Commit aa4105d2 authored by Kunihiko Sakamoto's avatar Kunihiko Sakamoto Committed by Commit Bot

Revert "Introduce partially initialized holding space items"

This reverts commit 314e453b.

Reason for revert: HoldingSpaceTrayTest.ShowTrayButtonOnFirstUse is crashing on linux-chromeos-dbg:
https://ci.chromium.org/p/chromium/builders/ci/linux-chromeos-dbg/21023


Original change's description:
> Introduce partially initialized holding space items
>
> Introduces a concept of partially initialized HoldingSpaceItem - this
> state will be used when loading items from persistent storage in case
> the item file system URL cannot immediately be resolved (e.g. if the
> associated mount point hasn't been loaded yet).
> HoldingSpacePersistenceDelegate will deserialize persisted items into
> partial state when they are first loaded from the storage, and
> "finalize" them when their file system URL can be resolved.
>
> Compared to an alternative approach where items whose initialization has
> to be deferred, this approach keeps the order in which items are added
> to the model.
>
> Updates holding space UI not to show partially initialized items.
>
> BUG=1140150
>
> Change-Id: Ie19997ec02f6323434f4053f6ba41a2998e72efa
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2493323
> Commit-Queue: Toni Baržić <tbarzic@chromium.org>
> Reviewed-by: David Black <dmblack@google.com>
> Cr-Commit-Position: refs/heads/master@{#821024}

TBR=tbarzic@chromium.org,dmblack@google.com

Change-Id: Ie916d1b4f15eab360b7124c481105733736c671c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 1140150
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2500688Reviewed-by: default avatarKunihiko Sakamoto <ksakamoto@chromium.org>
Commit-Queue: Kunihiko Sakamoto <ksakamoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821111}
parent dd5ab0fb
...@@ -2129,7 +2129,6 @@ test("ash_unittests") { ...@@ -2129,7 +2129,6 @@ test("ash_unittests") {
"system/bluetooth/tray_bluetooth_helper_legacy_unittest.cc", "system/bluetooth/tray_bluetooth_helper_legacy_unittest.cc",
"system/caps_lock_notification_controller_unittest.cc", "system/caps_lock_notification_controller_unittest.cc",
"system/gesture_education/gesture_education_notification_controller_unittest.cc", "system/gesture_education/gesture_education_notification_controller_unittest.cc",
"system/holding_space/holding_space_tray_unittest.cc",
"system/ime/ime_feature_pod_controller_unittest.cc", "system/ime/ime_feature_pod_controller_unittest.cc",
"system/ime_menu/ime_menu_tray_unittest.cc", "system/ime_menu/ime_menu_tray_unittest.cc",
"system/locale/locale_feature_pod_controller_unittest.cc", "system/locale/locale_feature_pod_controller_unittest.cc",
......
...@@ -63,8 +63,6 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::CreateFileBackedItem( ...@@ -63,8 +63,6 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::CreateFileBackedItem(
const base::FilePath& file_path, const base::FilePath& file_path,
const GURL& file_system_url, const GURL& file_system_url,
std::unique_ptr<HoldingSpaceImage> image) { std::unique_ptr<HoldingSpaceImage> image) {
DCHECK(!file_system_url.is_empty());
// Note: std::make_unique does not work with private constructors. // Note: std::make_unique does not work with private constructors.
return base::WrapUnique(new HoldingSpaceItem( return base::WrapUnique(new HoldingSpaceItem(
type, GetFileBackedItemId(type, file_path), file_path, file_system_url, type, GetFileBackedItemId(type, file_path), file_path, file_system_url,
...@@ -76,6 +74,7 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::CreateFileBackedItem( ...@@ -76,6 +74,7 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::CreateFileBackedItem(
// serialization versions are supported, care must be taken to handle each. // serialization versions are supported, care must be taken to handle each.
std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::Deserialize( std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::Deserialize(
const base::DictionaryValue& dict, const base::DictionaryValue& dict,
FileSystemUrlResolver file_system_url_resolver,
ImageResolver image_resolver) { ImageResolver image_resolver) {
const base::Optional<int> version = dict.FindIntPath(kVersionPath); const base::Optional<int> version = dict.FindIntPath(kVersionPath);
DCHECK(version.has_value() && version.value() == kVersion); DCHECK(version.has_value() && version.value() == kVersion);
...@@ -84,10 +83,11 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::Deserialize( ...@@ -84,10 +83,11 @@ std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::Deserialize(
const base::FilePath file_path = DeserializeFilePath(dict); const base::FilePath file_path = DeserializeFilePath(dict);
// NOTE: `std::make_unique` does not work with private constructors. // NOTE: `std::make_unique` does not work with private constructors.
return base::WrapUnique(new HoldingSpaceItem( return base::WrapUnique(
type, DeserializeId(dict), file_path, new HoldingSpaceItem(type, DeserializeId(dict), file_path,
/*file_system_url=*/GURL(), file_path.BaseName().LossyDisplayName(), std::move(file_system_url_resolver).Run(file_path),
std::move(image_resolver).Run(type, file_path))); file_path.BaseName().LossyDisplayName(),
std::move(image_resolver).Run(type, file_path)));
} }
// static // static
...@@ -144,14 +144,4 @@ HoldingSpaceItem::HoldingSpaceItem(Type type, ...@@ -144,14 +144,4 @@ HoldingSpaceItem::HoldingSpaceItem(Type type,
text_(text), text_(text),
image_(std::move(image)) {} image_(std::move(image)) {}
bool HoldingSpaceItem::IsFinalized() const {
return !file_system_url_.is_empty();
}
void HoldingSpaceItem::Finalize(const GURL& file_system_url) {
DCHECK(!IsFinalized());
DCHECK(!file_system_url.is_empty());
file_system_url_ = file_system_url;
}
} // namespace ash } // namespace ash
...@@ -50,7 +50,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem { ...@@ -50,7 +50,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem {
const base::FilePath& file_path); const base::FilePath& file_path);
// Creates a HoldingSpaceItem that's backed by a file system URL. // Creates a HoldingSpaceItem that's backed by a file system URL.
// NOTE: `file_system_url` is expected to be non-empty.
static std::unique_ptr<HoldingSpaceItem> CreateFileBackedItem( static std::unique_ptr<HoldingSpaceItem> CreateFileBackedItem(
Type type, Type type,
const base::FilePath& file_path, const base::FilePath& file_path,
...@@ -65,10 +64,9 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem { ...@@ -65,10 +64,9 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem {
std::unique_ptr<HoldingSpaceImage>(Type, const base::FilePath&)>; std::unique_ptr<HoldingSpaceImage>(Type, const base::FilePath&)>;
// Deserializes from `base::DictionaryValue` to `HoldingSpaceItem`. // Deserializes from `base::DictionaryValue` to `HoldingSpaceItem`.
// This creates a partially initialized item with an empty file system URL.
// The item should be finalized using `Finalize()`.
static std::unique_ptr<HoldingSpaceItem> Deserialize( static std::unique_ptr<HoldingSpaceItem> Deserialize(
const base::DictionaryValue& dict, const base::DictionaryValue& dict,
FileSystemUrlResolver file_system_url_resolver,
ImageResolver image_resolver); ImageResolver image_resolver);
// Deserializes `id_` from a serialized `HoldingSpaceItem`. // Deserializes `id_` from a serialized `HoldingSpaceItem`.
...@@ -80,15 +78,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem { ...@@ -80,15 +78,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceItem {
// Serializes from `HoldingSpaceItem` to `base::DictionaryValue`. // Serializes from `HoldingSpaceItem` to `base::DictionaryValue`.
base::DictionaryValue Serialize() const; base::DictionaryValue Serialize() const;
// Indicates whether the item has been finalized. This will be false for items
// created using `Deserialize()` for which `Finalize()` has not yet been
// called.
// Non-finalized items should not be shown in the holding space UI.
bool IsFinalized() const;
// Used to finalize partially initialized items created by `Deserialize()`.
void Finalize(const GURL& file_system_url);
const std::string& id() const { return id_; } const std::string& id() const { return id_; }
Type type() const { return type_; } Type type() const { return type_; }
......
...@@ -32,7 +32,7 @@ using HoldingSpaceItemTest = testing::TestWithParam<HoldingSpaceItem::Type>; ...@@ -32,7 +32,7 @@ using HoldingSpaceItemTest = testing::TestWithParam<HoldingSpaceItem::Type>;
// Tests round-trip serialization for each holding space item type. // Tests round-trip serialization for each holding space item type.
TEST_P(HoldingSpaceItemTest, Serialization) { TEST_P(HoldingSpaceItemTest, Serialization) {
const base::FilePath file_path("file_path"); const base::FilePath file_path("file_path");
const GURL file_system_url("filesystem:file_system_url"); const GURL file_system_url("file_system_url");
const gfx::ImageSkia placeholder(gfx::test::CreateImageSkia(10, 10)); const gfx::ImageSkia placeholder(gfx::test::CreateImageSkia(10, 10));
const auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem( const auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
...@@ -45,6 +45,9 @@ TEST_P(HoldingSpaceItemTest, Serialization) { ...@@ -45,6 +45,9 @@ TEST_P(HoldingSpaceItemTest, Serialization) {
const auto deserialized_holding_space_item = HoldingSpaceItem::Deserialize( const auto deserialized_holding_space_item = HoldingSpaceItem::Deserialize(
serialized_holding_space_item, serialized_holding_space_item,
/*file_system_url_resolver=*/
base::BindLambdaForTesting(
[&](const base::FilePath& file_path) { return file_system_url; }),
/*image_resolver=*/ /*image_resolver=*/
base::BindLambdaForTesting([&](HoldingSpaceItem::Type type, base::BindLambdaForTesting([&](HoldingSpaceItem::Type type,
const base::FilePath& file_path) { const base::FilePath& file_path) {
...@@ -52,19 +55,13 @@ TEST_P(HoldingSpaceItemTest, Serialization) { ...@@ -52,19 +55,13 @@ TEST_P(HoldingSpaceItemTest, Serialization) {
placeholder, /*async_bitmap_resolver=*/base::DoNothing()); placeholder, /*async_bitmap_resolver=*/base::DoNothing());
})); }));
EXPECT_FALSE(deserialized_holding_space_item->IsFinalized());
EXPECT_TRUE(deserialized_holding_space_item->file_system_url().is_empty());
deserialized_holding_space_item->Finalize(file_system_url);
EXPECT_TRUE(deserialized_holding_space_item->IsFinalized());
EXPECT_EQ(*deserialized_holding_space_item, *holding_space_item); EXPECT_EQ(*deserialized_holding_space_item, *holding_space_item);
} }
// Tests deserialization of id for each holding space item type. // Tests deserialization of id for each holding space item type.
TEST_P(HoldingSpaceItemTest, DeserializeId) { TEST_P(HoldingSpaceItemTest, DeserializeId) {
const auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem( const auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
/*type=*/GetParam(), base::FilePath("file_path"), /*type=*/GetParam(), base::FilePath("file_path"), GURL("file_system_url"),
GURL("filesystem:file_system_url"),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::test::CreateImageSkia(10, 10), /*placeholder=*/gfx::test::CreateImageSkia(10, 10),
/*async_bitmap_resolver=*/base::DoNothing())); /*async_bitmap_resolver=*/base::DoNothing()));
......
...@@ -43,28 +43,6 @@ void HoldingSpaceModel::RemoveItem(const std::string& id) { ...@@ -43,28 +43,6 @@ void HoldingSpaceModel::RemoveItem(const std::string& id) {
observer.OnHoldingSpaceItemRemoved(item.get()); observer.OnHoldingSpaceItemRemoved(item.get());
} }
void HoldingSpaceModel::FinalizeOrRemoveItem(const std::string& id,
const GURL& file_system_url) {
if (file_system_url.is_empty()) {
RemoveItem(id);
return;
}
auto item_it = std::find_if(
items_.begin(), items_.end(),
[&id](const std::unique_ptr<HoldingSpaceItem>& item) -> bool {
return id == item->id();
});
DCHECK(item_it != items_.end());
HoldingSpaceItem* item = item_it->get();
DCHECK(!item->IsFinalized());
item->Finalize(file_system_url);
for (auto& observer : observers_)
observer.OnHoldingSpaceItemFinalized(item);
}
void HoldingSpaceModel::RemoveIf(Predicate predicate) { void HoldingSpaceModel::RemoveIf(Predicate predicate) {
for (int i = items_.size() - 1; i >= 0; --i) { for (int i = items_.size() - 1; i >= 0; --i) {
const HoldingSpaceItem* item = items_.at(i).get(); const HoldingSpaceItem* item = items_.at(i).get();
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "ash/public/cpp/ash_public_export.h" #include "ash/public/cpp/ash_public_export.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "url/gurl.h"
namespace ash { namespace ash {
...@@ -41,10 +40,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceModel { ...@@ -41,10 +40,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceModel {
// Removes a single holding space item from the model. // Removes a single holding space item from the model.
void RemoveItem(const std::string& id); void RemoveItem(const std::string& id);
// Finalizes a partially initialized holding space item using the provided
// file system URL. The item will be removed if the file system url is empty.
void FinalizeOrRemoveItem(const std::string& id, const GURL& file_system_url);
// Removes all holding space items from the model for which the specified // Removes all holding space items from the model for which the specified
// `predicate` returns true. // `predicate` returns true.
using Predicate = base::RepeatingCallback<bool(const HoldingSpaceItem*)>; using Predicate = base::RepeatingCallback<bool(const HoldingSpaceItem*)>;
......
...@@ -20,9 +20,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceModelObserver ...@@ -20,9 +20,6 @@ class ASH_PUBLIC_EXPORT HoldingSpaceModelObserver
// Called when an item gets removed from the holding space model. // Called when an item gets removed from the holding space model.
virtual void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) = 0; virtual void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) = 0;
// Called when a partially initialized holding space `item` gets finalized.
virtual void OnHoldingSpaceItemFinalized(const HoldingSpaceItem* item) = 0;
}; };
} // namespace ash } // namespace ash
......
...@@ -58,12 +58,6 @@ class ASH_EXPORT HoldingSpaceTestApi { ...@@ -58,12 +58,6 @@ class ASH_EXPORT HoldingSpaceTestApi {
// If holding space UI is not visible, an empty collection is returned. // If holding space UI is not visible, an empty collection is returned.
std::vector<views::View*> GetScreenCaptureViews(); std::vector<views::View*> GetScreenCaptureViews();
// Returns whether the pinned files container is shown.
bool PinnedFilesContainerShown() const;
// Returns whether the recent files container is shown.
bool RecentFilesContainerShown() const;
private: private:
HoldingSpaceTray* holding_space_tray_ = nullptr; HoldingSpaceTray* holding_space_tray_ = nullptr;
}; };
......
...@@ -27,10 +27,8 @@ void HoldingSpaceItemViewsContainer::ChildVisibilityChanged( ...@@ -27,10 +27,8 @@ void HoldingSpaceItemViewsContainer::ChildVisibilityChanged(
void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelAttached( void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelAttached(
HoldingSpaceModel* model) { HoldingSpaceModel* model) {
model_observer_.Add(model); model_observer_.Add(model);
for (const auto& item : model->items()) { for (const auto& item : model->items())
if (item->IsFinalized()) AddHoldingSpaceItemView(item.get());
AddHoldingSpaceItemView(item.get());
}
} }
void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelDetached( void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelDetached(
...@@ -41,9 +39,6 @@ void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelDetached( ...@@ -41,9 +39,6 @@ void HoldingSpaceItemViewsContainer::OnHoldingSpaceModelDetached(
void HoldingSpaceItemViewsContainer::OnHoldingSpaceItemAdded( void HoldingSpaceItemViewsContainer::OnHoldingSpaceItemAdded(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
if (!item->IsFinalized())
return;
AddHoldingSpaceItemView(item); AddHoldingSpaceItemView(item);
} }
...@@ -52,9 +47,4 @@ void HoldingSpaceItemViewsContainer::OnHoldingSpaceItemRemoved( ...@@ -52,9 +47,4 @@ void HoldingSpaceItemViewsContainer::OnHoldingSpaceItemRemoved(
RemoveHoldingSpaceItemView(item); RemoveHoldingSpaceItemView(item);
} }
void HoldingSpaceItemViewsContainer::OnHoldingSpaceItemFinalized( } // namespace ash
const HoldingSpaceItem* item) { \ No newline at end of file
AddHoldingSpaceItemView(item);
}
} // namespace ash
...@@ -43,7 +43,6 @@ class HoldingSpaceItemViewsContainer : public views::View, ...@@ -43,7 +43,6 @@ class HoldingSpaceItemViewsContainer : public views::View,
// HoldingSpaceModelObserver: // HoldingSpaceModelObserver:
void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemFinalized(const HoldingSpaceItem* item) override;
private: private:
ScopedObserver<HoldingSpaceController, HoldingSpaceControllerObserver> ScopedObserver<HoldingSpaceController, HoldingSpaceControllerObserver>
......
...@@ -126,22 +126,4 @@ std::vector<views::View*> HoldingSpaceTestApi::GetScreenCaptureViews() { ...@@ -126,22 +126,4 @@ std::vector<views::View*> HoldingSpaceTestApi::GetScreenCaptureViews() {
return screen_capture_views; return screen_capture_views;
} }
bool HoldingSpaceTestApi::PinnedFilesContainerShown() const {
if (!holding_space_tray_->GetBubbleView())
return false;
views::View* container = holding_space_tray_->GetBubbleView()->GetViewByID(
kHoldingSpacePinnedFilesContainerId);
return container && container->GetVisible();
}
bool HoldingSpaceTestApi::RecentFilesContainerShown() const {
if (!holding_space_tray_->GetBubbleView())
return false;
views::View* container = holding_space_tray_->GetBubbleView()->GetViewByID(
kHoldingSpaceRecentFilesContainerId);
return container && container->GetVisible();
}
} // namespace ash } // namespace ash
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "ash/accessibility/accessibility_controller_impl.h" #include "ash/accessibility/accessibility_controller_impl.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/public/cpp/holding_space/holding_space_metrics.h" #include "ash/public/cpp/holding_space/holding_space_metrics.h"
#include "ash/public/cpp/holding_space/holding_space_prefs.h" #include "ash/public/cpp/holding_space/holding_space_prefs.h"
#include "ash/public/cpp/shelf_config.h" #include "ash/public/cpp/shelf_config.h"
...@@ -28,19 +27,6 @@ ...@@ -28,19 +27,6 @@
namespace ash { namespace ash {
namespace {
// Returns whether the holding space model contains any finalized items.
bool ModelContainsFinalizedItems(HoldingSpaceModel* model) {
for (const auto& item : model->items()) {
if (item->IsFinalized())
return true;
}
return false;
}
} // namespace
HoldingSpaceTray::HoldingSpaceTray(Shelf* shelf) : TrayBackgroundView(shelf) { HoldingSpaceTray::HoldingSpaceTray(Shelf* shelf) : TrayBackgroundView(shelf) {
controller_observer_.Add(HoldingSpaceController::Get()); controller_observer_.Add(HoldingSpaceController::Get());
SetVisible(false); SetVisible(false);
...@@ -161,8 +147,7 @@ void HoldingSpaceTray::UpdateVisibility() { ...@@ -161,8 +147,7 @@ void HoldingSpaceTray::UpdateVisibility() {
.has_value() .has_value()
: false; : false;
SetVisiblePreferred(!has_ever_pinned_item || SetVisiblePreferred(!model->items().empty() || !has_ever_pinned_item);
ModelContainsFinalizedItems(model));
} }
base::string16 HoldingSpaceTray::GetAccessibleNameForBubble() { base::string16 HoldingSpaceTray::GetAccessibleNameForBubble() {
...@@ -195,11 +180,6 @@ void HoldingSpaceTray::OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) { ...@@ -195,11 +180,6 @@ void HoldingSpaceTray::OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) {
UpdateVisibility(); UpdateVisibility();
} }
void HoldingSpaceTray::OnHoldingSpaceItemFinalized(
const HoldingSpaceItem* item) {
UpdateVisibility();
}
void HoldingSpaceTray::OnWidgetDragWillStart(views::Widget* widget) { void HoldingSpaceTray::OnWidgetDragWillStart(views::Widget* widget) {
// The holding space bubble should be closed while dragging holding space // The holding space bubble should be closed while dragging holding space
// items so as not to obstruct drop targets. Post the task to close the bubble // items so as not to obstruct drop targets. Post the task to close the bubble
......
...@@ -64,7 +64,6 @@ class ASH_EXPORT HoldingSpaceTray : public TrayBackgroundView, ...@@ -64,7 +64,6 @@ class ASH_EXPORT HoldingSpaceTray : public TrayBackgroundView,
// HoldingSpaceModelObserver: // HoldingSpaceModelObserver:
void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemFinalized(const HoldingSpaceItem* item) override;
// views::WidgetObserver: // views::WidgetObserver:
void OnWidgetDragWillStart(views::Widget* widget) override; void OnWidgetDragWillStart(views::Widget* widget) override;
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "ash/system/holding_space/holding_space_item_chips_container.h" #include "ash/system/holding_space/holding_space_item_chips_container.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_item_style.h" #include "ash/system/tray/tray_popup_item_style.h"
#include "base/containers/adapters.h"
#include "base/optional.h" #include "base/optional.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -150,25 +149,12 @@ void PinnedFilesContainer::ViewHierarchyChanged( ...@@ -150,25 +149,12 @@ void PinnedFilesContainer::ViewHierarchyChanged(
void PinnedFilesContainer::AddHoldingSpaceItemView( void PinnedFilesContainer::AddHoldingSpaceItemView(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
DCHECK(!base::Contains(views_by_item_id_, item->id())); DCHECK(!base::Contains(views_by_item_id_, item->id()));
DCHECK(item->IsFinalized());
if (item->type() != HoldingSpaceItem::Type::kPinnedFile) if (item->type() == HoldingSpaceItem::Type::kPinnedFile) {
return; views_by_item_id_[item->id()] = item_chips_container_->AddChildViewAt(
std::make_unique<HoldingSpaceItemChipView>(delegate_, item),
// Find the position to which the view should be added. /*index=*/0);
size_t index = 0;
for (const auto& candidate :
base::Reversed(HoldingSpaceController::Get()->model()->items())) {
if (candidate->id() == item->id())
break;
if (candidate->IsFinalized() &&
candidate->type() == HoldingSpaceItem::Type::kPinnedFile) {
++index;
}
} }
views_by_item_id_[item->id()] = item_chips_container_->AddChildViewAt(
std::make_unique<HoldingSpaceItemChipView>(delegate_, item), index);
} }
void PinnedFilesContainer::RemoveAllHoldingSpaceItemViews() { void PinnedFilesContainer::RemoveAllHoldingSpaceItemViews() {
......
...@@ -148,26 +148,10 @@ void RecentFilesContainer::ViewHierarchyChanged( ...@@ -148,26 +148,10 @@ void RecentFilesContainer::ViewHierarchyChanged(
void RecentFilesContainer::AddHoldingSpaceItemView( void RecentFilesContainer::AddHoldingSpaceItemView(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
DCHECK(item->IsFinalized());
if (item->type() != HoldingSpaceItem::Type::kScreenshot &&
item->type() != HoldingSpaceItem::Type::kDownload) {
return;
}
size_t index = 0;
for (const auto& candidate :
base::Reversed(HoldingSpaceController::Get()->model()->items())) {
if (candidate->id() == item->id())
break;
if (candidate->IsFinalized() && candidate->type() == item->type())
++index;
}
if (item->type() == HoldingSpaceItem::Type::kScreenshot) if (item->type() == HoldingSpaceItem::Type::kScreenshot)
AddHoldingSpaceScreenCaptureView(item, index); AddHoldingSpaceScreenCaptureView(item);
else if (item->type() == HoldingSpaceItem::Type::kDownload) else if (item->type() == HoldingSpaceItem::Type::kDownload)
AddHoldingSpaceDownloadView(item, index); AddHoldingSpaceDownloadView(item);
} }
void RecentFilesContainer::RemoveAllHoldingSpaceItemViews() { void RecentFilesContainer::RemoveAllHoldingSpaceItemViews() {
...@@ -185,14 +169,10 @@ void RecentFilesContainer::RemoveHoldingSpaceItemView( ...@@ -185,14 +169,10 @@ void RecentFilesContainer::RemoveHoldingSpaceItemView(
} }
void RecentFilesContainer::AddHoldingSpaceScreenCaptureView( void RecentFilesContainer::AddHoldingSpaceScreenCaptureView(
const HoldingSpaceItem* item, const HoldingSpaceItem* item) {
size_t index) {
DCHECK_EQ(item->type(), HoldingSpaceItem::Type::kScreenshot); DCHECK_EQ(item->type(), HoldingSpaceItem::Type::kScreenshot);
DCHECK(!base::Contains(views_by_item_id_, item->id())); DCHECK(!base::Contains(views_by_item_id_, item->id()));
if (index >= kMaxScreenCaptures)
return;
// Remove the last screen capture view if we are already at max capacity. // Remove the last screen capture view if we are already at max capacity.
if (screen_captures_container_->children().size() == kMaxScreenCaptures) { if (screen_captures_container_->children().size() == kMaxScreenCaptures) {
std::unique_ptr<views::View> view = std::unique_ptr<views::View> view =
...@@ -205,7 +185,7 @@ void RecentFilesContainer::AddHoldingSpaceScreenCaptureView( ...@@ -205,7 +185,7 @@ void RecentFilesContainer::AddHoldingSpaceScreenCaptureView(
// Add the screen capture view to the front in order to sort by recency. // Add the screen capture view to the front in order to sort by recency.
views_by_item_id_[item->id()] = screen_captures_container_->AddChildViewAt( views_by_item_id_[item->id()] = screen_captures_container_->AddChildViewAt(
std::make_unique<HoldingSpaceItemScreenCaptureView>(delegate_, item), std::make_unique<HoldingSpaceItemScreenCaptureView>(delegate_, item),
index); /*index=*/0);
} }
void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView( void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView(
...@@ -228,8 +208,7 @@ void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView( ...@@ -228,8 +208,7 @@ void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView(
// the back in order to maintain sort by recency. // the back in order to maintain sort by recency.
for (const auto& candidate : for (const auto& candidate :
base::Reversed(HoldingSpaceController::Get()->model()->items())) { base::Reversed(HoldingSpaceController::Get()->model()->items())) {
if (candidate->IsFinalized() && if (candidate->type() == HoldingSpaceItem::Type::kScreenshot &&
candidate->type() == HoldingSpaceItem::Type::kScreenshot &&
!base::Contains(views_by_item_id_, candidate->id())) { !base::Contains(views_by_item_id_, candidate->id())) {
views_by_item_id_[candidate->id()] = views_by_item_id_[candidate->id()] =
screen_captures_container_->AddChildView( screen_captures_container_->AddChildView(
...@@ -241,14 +220,10 @@ void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView( ...@@ -241,14 +220,10 @@ void RecentFilesContainer::RemoveHoldingSpaceScreenCaptureView(
} }
void RecentFilesContainer::AddHoldingSpaceDownloadView( void RecentFilesContainer::AddHoldingSpaceDownloadView(
const HoldingSpaceItem* item, const HoldingSpaceItem* item) {
size_t index) {
DCHECK_EQ(item->type(), HoldingSpaceItem::Type::kDownload); DCHECK_EQ(item->type(), HoldingSpaceItem::Type::kDownload);
DCHECK(!base::Contains(views_by_item_id_, item->id())); DCHECK(!base::Contains(views_by_item_id_, item->id()));
if (index >= kMaxDownloads)
return;
// Remove the last download view if we are already at max capacity. // Remove the last download view if we are already at max capacity.
if (downloads_container_->children().size() == kMaxDownloads) { if (downloads_container_->children().size() == kMaxDownloads) {
std::unique_ptr<views::View> view = downloads_container_->RemoveChildViewT( std::unique_ptr<views::View> view = downloads_container_->RemoveChildViewT(
...@@ -259,7 +234,7 @@ void RecentFilesContainer::AddHoldingSpaceDownloadView( ...@@ -259,7 +234,7 @@ void RecentFilesContainer::AddHoldingSpaceDownloadView(
// Add the download view to the front in order to sort by recency. // Add the download view to the front in order to sort by recency.
views_by_item_id_[item->id()] = downloads_container_->AddChildViewAt( views_by_item_id_[item->id()] = downloads_container_->AddChildViewAt(
std::make_unique<HoldingSpaceItemChipView>(delegate_, item), index); std::make_unique<HoldingSpaceItemChipView>(delegate_, item), /*index=*/0);
} }
void RecentFilesContainer::RemoveHoldingSpaceDownloadView( void RecentFilesContainer::RemoveHoldingSpaceDownloadView(
...@@ -282,8 +257,7 @@ void RecentFilesContainer::RemoveHoldingSpaceDownloadView( ...@@ -282,8 +257,7 @@ void RecentFilesContainer::RemoveHoldingSpaceDownloadView(
// back in order to maintain sort by recency. // back in order to maintain sort by recency.
for (const auto& candidate : for (const auto& candidate :
base::Reversed(HoldingSpaceController::Get()->model()->items())) { base::Reversed(HoldingSpaceController::Get()->model()->items())) {
if (candidate->IsFinalized() && if (candidate->type() == HoldingSpaceItem::Type::kDownload &&
candidate->type() == HoldingSpaceItem::Type::kDownload &&
!base::Contains(views_by_item_id_, candidate->id())) { !base::Contains(views_by_item_id_, candidate->id())) {
views_by_item_id_[candidate->id()] = downloads_container_->AddChildView( views_by_item_id_[candidate->id()] = downloads_container_->AddChildView(
std::make_unique<HoldingSpaceItemChipView>(delegate_, std::make_unique<HoldingSpaceItemChipView>(delegate_,
......
...@@ -34,10 +34,9 @@ class RecentFilesContainer : public HoldingSpaceItemViewsContainer { ...@@ -34,10 +34,9 @@ class RecentFilesContainer : public HoldingSpaceItemViewsContainer {
void RemoveHoldingSpaceItemView(const HoldingSpaceItem* item) override; void RemoveHoldingSpaceItemView(const HoldingSpaceItem* item) override;
private: private:
void AddHoldingSpaceScreenCaptureView(const HoldingSpaceItem* item, void AddHoldingSpaceScreenCaptureView(const HoldingSpaceItem* item);
size_t index);
void RemoveHoldingSpaceScreenCaptureView(const HoldingSpaceItem* item); void RemoveHoldingSpaceScreenCaptureView(const HoldingSpaceItem* item);
void AddHoldingSpaceDownloadView(const HoldingSpaceItem* item, size_t index); void AddHoldingSpaceDownloadView(const HoldingSpaceItem* item);
void RemoveHoldingSpaceDownloadView(const HoldingSpaceItem* item); void RemoveHoldingSpaceDownloadView(const HoldingSpaceItem* item);
void OnScreenCapturesContainerViewHierarchyChanged( void OnScreenCapturesContainerViewHierarchyChanged(
const views::ViewHierarchyChangedDetails& details); const views::ViewHierarchyChangedDetails& details);
......
...@@ -32,6 +32,24 @@ namespace { ...@@ -32,6 +32,24 @@ namespace {
// Helpers --------------------------------------------------------------------- // Helpers ---------------------------------------------------------------------
// Adds and returns a holding space item of the specified `type` backed by the
// file at the specified `file_path`.
HoldingSpaceItem* AddItem(Profile* profile,
HoldingSpaceItem::Type type,
const base::FilePath& file_path) {
auto item = HoldingSpaceItem::CreateFileBackedItem(
type, file_path,
holding_space_util::ResolveFileSystemUrl(profile, file_path),
/*image=*/
std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing()));
auto* item_ptr = item.get();
HoldingSpaceController::Get()->model()->AddItem(std::move(item));
return item_ptr;
}
// Returns the path of the downloads mount point for the given `profile`. // Returns the path of the downloads mount point for the given `profile`.
base::FilePath GetDownloadsPath(Profile* profile) { base::FilePath GetDownloadsPath(Profile* profile) {
base::FilePath result; base::FilePath result;
...@@ -170,23 +188,6 @@ HoldingSpaceItem* HoldingSpaceBrowserTestBase::AddScreenshotFile() { ...@@ -170,23 +188,6 @@ HoldingSpaceItem* HoldingSpaceBrowserTestBase::AddScreenshotFile() {
/*file_path=*/CreateImageFile(GetProfile())); /*file_path=*/CreateImageFile(GetProfile()));
} }
HoldingSpaceItem* HoldingSpaceBrowserTestBase::AddItem(
Profile* profile,
HoldingSpaceItem::Type type,
const base::FilePath& file_path) {
auto item = HoldingSpaceItem::CreateFileBackedItem(
type, file_path,
holding_space_util::ResolveFileSystemUrl(profile, file_path),
/*image=*/
std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing()));
auto* item_ptr = item.get();
HoldingSpaceController::Get()->model()->AddItem(std::move(item));
return item_ptr;
}
std::vector<views::View*> HoldingSpaceBrowserTestBase::GetDownloadChips() { std::vector<views::View*> HoldingSpaceBrowserTestBase::GetDownloadChips() {
return test_api_->GetDownloadChips(); return test_api_->GetDownloadChips();
} }
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "ash/public/cpp/holding_space/holding_space_item.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
...@@ -64,12 +63,6 @@ class HoldingSpaceBrowserTestBase : public InProcessBrowserTest { ...@@ -64,12 +63,6 @@ class HoldingSpaceBrowserTestBase : public InProcessBrowserTest {
// Adds and returns an arbitrary screenshot file to the holding space. // Adds and returns an arbitrary screenshot file to the holding space.
HoldingSpaceItem* AddScreenshotFile(); HoldingSpaceItem* AddScreenshotFile();
// Adds and returns a holding space item of the specified `type` backed by the
// file at the specified `file_path`.
HoldingSpaceItem* AddItem(Profile* profile,
HoldingSpaceItem::Type type,
const base::FilePath& file_path);
// Returns the collection of download chips in holding space UI. // Returns the collection of download chips in holding space UI.
// If holding space UI is not visible, an empty collection is returned. // If holding space UI is not visible, an empty collection is returned.
std::vector<views::View*> GetDownloadChips(); std::vector<views::View*> GetDownloadChips();
......
...@@ -17,14 +17,12 @@ ...@@ -17,14 +17,12 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "chrome/browser/chromeos/file_manager/path_util.h"
#include "chrome/browser/extensions/component_loader.h" #include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.h" #include "chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h" #include "content/public/test/browser_test.h"
#include "storage/browser/file_system/external_mount_points.h"
#include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia.h"
namespace ash { namespace ash {
...@@ -38,30 +36,11 @@ constexpr char kTextFilePath[] = "text.txt"; ...@@ -38,30 +36,11 @@ constexpr char kTextFilePath[] = "text.txt";
// Helpers --------------------------------------------------------------------- // Helpers ---------------------------------------------------------------------
// Copies the file for the `relative_path` in the test data directory to // Returns the file for the `relative_path` in the test data directory.
// downloads directory, and returns the path to the copy. base::FilePath TestFile(const std::string& relative_path) {
base::FilePath TestFile(Profile* profile, const std::string& relative_path) {
base::FilePath source_root; base::FilePath source_root;
EXPECT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root)); EXPECT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root));
const base::FilePath source_file = return source_root.AppendASCII(kTestDataDir).AppendASCII(relative_path);
source_root.AppendASCII(kTestDataDir).AppendASCII(relative_path);
base::FilePath target_dir;
if (!storage::ExternalMountPoints::GetSystemInstance()->GetRegisteredPath(
file_manager::util::GetDownloadsMountPointName(profile),
&target_dir)) {
ADD_FAILURE() << "Failed to get downloads mount point";
return base::FilePath();
}
const base::FilePath target_path = target_dir.Append(source_file.BaseName());
base::ScopedAllowBlockingForTesting allow_blocking;
if (!base::CopyFile(source_file, target_path)) {
ADD_FAILURE() << "Failed to create file.";
return base::FilePath();
}
return target_path;
} }
} // namespace } // namespace
...@@ -81,9 +60,11 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, CopyImageToClipboard) { ...@@ -81,9 +60,11 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, CopyImageToClipboard) {
{ {
// Create a holding space item backed by a non-image file. // Create a holding space item backed by a non-image file.
auto* holding_space_item = auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
AddItem(GetProfile(), HoldingSpaceItem::Type::kDownload, HoldingSpaceItem::Type::kDownload, TestFile(kTextFilePath), GURL(),
TestFile(GetProfile(), kTextFilePath)); std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing()));
// We expect `HoldingSpaceClient::CopyImageToClipboard()` to fail when the // We expect `HoldingSpaceClient::CopyImageToClipboard()` to fail when the
// backing file for `holding_space_item` is not an image file. // backing file for `holding_space_item` is not an image file.
...@@ -99,9 +80,11 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, CopyImageToClipboard) { ...@@ -99,9 +80,11 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, CopyImageToClipboard) {
{ {
// Create a holding space item backed by an image file. // Create a holding space item backed by an image file.
auto* holding_space_item = auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
AddItem(GetProfile(), HoldingSpaceItem::Type::kDownload, HoldingSpaceItem::Type::kDownload, TestFile(kImageFilePath), GURL(),
TestFile(GetProfile(), kImageFilePath)); std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing()));
// We expect `HoldingSpaceClient::CopyImageToClipboard()` to succeed when // We expect `HoldingSpaceClient::CopyImageToClipboard()` to succeed when
// the backing file for `holding_space_item` is an image file. // the backing file for `holding_space_item` is an image file.
...@@ -146,8 +129,7 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, OpenItems) { ...@@ -146,8 +129,7 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, OpenItems) {
{ {
// Create a holding space item backed by a non-existing file. // Create a holding space item backed by a non-existing file.
auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem( auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
HoldingSpaceItem::Type::kDownload, base::FilePath("foo"), HoldingSpaceItem::Type::kDownload, base::FilePath("foo"), GURL(),
GURL("filesystem:fake"),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(), /*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing())); /*async_bitmap_resolver=*/base::DoNothing()));
...@@ -199,8 +181,7 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, MAYBE_ShowItemInFolder) { ...@@ -199,8 +181,7 @@ IN_PROC_BROWSER_TEST_F(HoldingSpaceClientImplTest, MAYBE_ShowItemInFolder) {
{ {
// Create a holding space item backed by a non-existing file. // Create a holding space item backed by a non-existing file.
auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem( auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
HoldingSpaceItem::Type::kDownload, base::FilePath("foo"), HoldingSpaceItem::Type::kDownload, base::FilePath("foo"), GURL(),
GURL("filesystem:fake"),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(), /*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing())); /*async_bitmap_resolver=*/base::DoNothing()));
......
...@@ -95,9 +95,6 @@ void HoldingSpaceFileSystemDelegate::OnHoldingSpaceItemAdded( ...@@ -95,9 +95,6 @@ void HoldingSpaceFileSystemDelegate::OnHoldingSpaceItemAdded(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!item->IsFinalized())
return;
// Watch the directory containing `items`'s backing file. If the directory is // Watch the directory containing `items`'s backing file. If the directory is
// already being watched, this will no-op. // already being watched, this will no-op.
AddWatch(item->file_path().DirName()); AddWatch(item->file_path().DirName());
...@@ -110,22 +107,17 @@ void HoldingSpaceFileSystemDelegate::OnHoldingSpaceItemRemoved( ...@@ -110,22 +107,17 @@ void HoldingSpaceFileSystemDelegate::OnHoldingSpaceItemRemoved(
// Since we were watching the directory containing `item`'s backing file and // Since we were watching the directory containing `item`'s backing file and
// not the backing file itself, we only need to remove the associated watch if // not the backing file itself, we only need to remove the associated watch if
// there are no other holding space items backed by the same directory. // there are no other holding space items backed by the same directory.
const bool remove_watch = std::none_of( const bool remove_watch =
model()->items().begin(), model()->items().end(), std::none_of(model()->items().begin(), model()->items().end(),
[removed_item = item](const auto& item) { [removed_item = item](const auto& item) {
return item->IsFinalized() && item->file_path().DirName() == return item->file_path().DirName() ==
removed_item->file_path().DirName(); removed_item->file_path().DirName();
}); });
if (remove_watch) if (remove_watch)
RemoveWatch(item->file_path().DirName()); RemoveWatch(item->file_path().DirName());
} }
void HoldingSpaceFileSystemDelegate::OnHoldingSpaceItemFinalized(
const HoldingSpaceItem* item) {
AddWatch(item->file_path().DirName());
}
void HoldingSpaceFileSystemDelegate::OnFilePathChanged( void HoldingSpaceFileSystemDelegate::OnFilePathChanged(
const base::FilePath& file_path, const base::FilePath& file_path,
bool error) { bool error) {
......
...@@ -41,7 +41,6 @@ class HoldingSpaceFileSystemDelegate : public HoldingSpaceKeyedServiceDelegate { ...@@ -41,7 +41,6 @@ class HoldingSpaceFileSystemDelegate : public HoldingSpaceKeyedServiceDelegate {
void Init() override; void Init() override;
void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemFinalized(const HoldingSpaceItem* item) override;
// Invoked when the specified `file_path` has changed. // Invoked when the specified `file_path` has changed.
void OnFilePathChanged(const base::FilePath& file_path, bool error); void OnFilePathChanged(const base::FilePath& file_path, bool error);
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "chrome/browser/chromeos/file_manager/path_util.h" #include "chrome/browser/chromeos/file_manager/path_util.h"
#include "chrome/browser/extensions/component_loader.h" #include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/ui/ash/holding_space/holding_space_util.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h" #include "content/public/test/browser_test.h"
...@@ -43,10 +42,6 @@ class MockHoldingSpaceModelObserver : public HoldingSpaceModelObserver { ...@@ -43,10 +42,6 @@ class MockHoldingSpaceModelObserver : public HoldingSpaceModelObserver {
OnHoldingSpaceItemRemoved, OnHoldingSpaceItemRemoved,
(const HoldingSpaceItem* item), (const HoldingSpaceItem* item),
(override)); (override));
MOCK_METHOD(void,
OnHoldingSpaceItemFinalized,
(const HoldingSpaceItem* item),
(override));
}; };
// Helpers --------------------------------------------------------------------- // Helpers ---------------------------------------------------------------------
...@@ -108,10 +103,8 @@ const HoldingSpaceItem* AddHoldingSpaceItem(Profile* profile) { ...@@ -108,10 +103,8 @@ const HoldingSpaceItem* AddHoldingSpaceItem(Profile* profile) {
run_loop.Quit(); run_loop.Quit();
}); });
base::FilePath item_path = CreateTextFile(profile);
holding_space_model->AddItem(HoldingSpaceItem::CreateFileBackedItem( holding_space_model->AddItem(HoldingSpaceItem::CreateFileBackedItem(
HoldingSpaceItem::Type::kDownload, item_path, HoldingSpaceItem::Type::kDownload, CreateTextFile(profile), GURL(),
holding_space_util::ResolveFileSystemUrl(profile, item_path),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(), /*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing()))); /*async_bitmap_resolver=*/base::DoNothing())));
......
...@@ -42,9 +42,6 @@ void HoldingSpaceKeyedServiceDelegate::OnHoldingSpaceItemAdded( ...@@ -42,9 +42,6 @@ void HoldingSpaceKeyedServiceDelegate::OnHoldingSpaceItemAdded(
void HoldingSpaceKeyedServiceDelegate::OnHoldingSpaceItemRemoved( void HoldingSpaceKeyedServiceDelegate::OnHoldingSpaceItemRemoved(
const HoldingSpaceItem* item) {} const HoldingSpaceItem* item) {}
void HoldingSpaceKeyedServiceDelegate::OnHoldingSpaceItemFinalized(
const HoldingSpaceItem* item) {}
void HoldingSpaceKeyedServiceDelegate::OnPersistenceRestored() {} void HoldingSpaceKeyedServiceDelegate::OnPersistenceRestored() {}
} // namespace ash } // namespace ash
...@@ -49,7 +49,6 @@ class HoldingSpaceKeyedServiceDelegate : public HoldingSpaceModelObserver { ...@@ -49,7 +49,6 @@ class HoldingSpaceKeyedServiceDelegate : public HoldingSpaceModelObserver {
// HoldingSpaceModelObserver: // HoldingSpaceModelObserver:
void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemAdded(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override; void OnHoldingSpaceItemRemoved(const HoldingSpaceItem* item) override;
void OnHoldingSpaceItemFinalized(const HoldingSpaceItem* item) override;
// Invoked when holding space persistence has been restored. // Invoked when holding space persistence has been restored.
virtual void OnPersistenceRestored(); virtual void OnPersistenceRestored();
......
...@@ -548,9 +548,8 @@ TEST_F(HoldingSpaceKeyedServiceTest, RestorePersistentStorage) { ...@@ -548,9 +548,8 @@ TEST_F(HoldingSpaceKeyedServiceTest, RestorePersistentStorage) {
auto stale_holding_space_item = auto stale_holding_space_item =
HoldingSpaceItem::CreateFileBackedItem( HoldingSpaceItem::CreateFileBackedItem(
type, type,
downloads_mount.GetRootPath().AppendASCII( base::FilePath(base::UnguessableToken::Create().ToString()),
base::UnguessableToken::Create().ToString()), GURL(),
GURL("filesystem:fake_file_system_url"),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(), /*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing())); /*async_bitmap_resolver=*/base::DoNothing()));
...@@ -644,13 +643,11 @@ TEST_F(HoldingSpaceKeyedServiceTest, RemoveOlderFilesFromPersistance) { ...@@ -644,13 +643,11 @@ TEST_F(HoldingSpaceKeyedServiceTest, RemoveOlderFilesFromPersistance) {
std::move(fresh_holding_space_item)); std::move(fresh_holding_space_item));
} }
const base::FilePath stale_item_file =
downloads_mount.GetRootPath().AppendASCII(
base::UnguessableToken::Create().ToString());
auto stale_holding_space_item = auto stale_holding_space_item =
HoldingSpaceItem::CreateFileBackedItem( HoldingSpaceItem::CreateFileBackedItem(
type, stale_item_file, type,
GetFileSystemUrl(GetProfile(), stale_item_file), base::FilePath(base::UnguessableToken::Create().ToString()),
GURL(),
std::make_unique<HoldingSpaceImage>( std::make_unique<HoldingSpaceImage>(
/*placeholder=*/gfx::ImageSkia(), /*placeholder=*/gfx::ImageSkia(),
/*async_bitmap_resolver=*/base::DoNothing())); /*async_bitmap_resolver=*/base::DoNothing()));
......
...@@ -86,26 +86,18 @@ void HoldingSpacePersistenceDelegate::RestoreModelFromPersistence() { ...@@ -86,26 +86,18 @@ void HoldingSpacePersistenceDelegate::RestoreModelFromPersistence() {
for (const auto& persisted_holding_space_item : for (const auto& persisted_holding_space_item :
persisted_holding_space_items->GetList()) { persisted_holding_space_items->GetList()) {
std::unique_ptr<HoldingSpaceItem> holding_space_item = holding_space_items.push_back(HoldingSpaceItem::Deserialize(
HoldingSpaceItem::Deserialize( base::Value::AsDictionaryValue(persisted_holding_space_item),
base::Value::AsDictionaryValue(persisted_holding_space_item), base::BindOnce(&holding_space_util::ResolveFileSystemUrl,
base::BindOnce(&holding_space_util::ResolveImage, base::Unretained(profile())),
base::Unretained(thumbnail_loader_))); base::BindOnce(&holding_space_util::ResolveImage,
const GURL file_system_url = holding_space_util::ResolveFileSystemUrl( base::Unretained(thumbnail_loader_))));
profile(), holding_space_item->file_path());
// TODO(https://crbug.com/1140150): Better handle the case an item file
// path cannot be resolved to a file system URL.
if (!file_system_url.is_empty())
holding_space_item->Finalize(file_system_url);
holding_space_util::ValidityRequirement requirements; holding_space_util::ValidityRequirement requirements;
HoldingSpaceItem* holding_space_item = holding_space_items.back().get();
if (holding_space_item->type() != HoldingSpaceItem::Type::kPinnedFile) if (holding_space_item->type() != HoldingSpaceItem::Type::kPinnedFile)
requirements.must_be_newer_than = kMaxFileAge; requirements.must_be_newer_than = kMaxFileAge;
file_paths_with_requirements.push_back( file_paths_with_requirements.push_back(
{holding_space_item->file_path(), requirements}); {holding_space_item->file_path(), requirements});
holding_space_items.push_back(std::move(holding_space_item));
} }
holding_space_util::PartitionFilePathsByValidity( holding_space_util::PartitionFilePathsByValidity(
...@@ -123,10 +115,8 @@ void HoldingSpacePersistenceDelegate::RestoreModelByValidity( ...@@ -123,10 +115,8 @@ void HoldingSpacePersistenceDelegate::RestoreModelByValidity(
// Restore valid holding space items. // Restore valid holding space items.
for (auto& holding_space_item : holding_space_items) { for (auto& holding_space_item : holding_space_items) {
if (holding_space_item->IsFinalized() && if (base::Contains(valid_file_paths, holding_space_item->file_path()))
base::Contains(valid_file_paths, holding_space_item->file_path())) {
item_restored_callback_.Run(std::move(holding_space_item)); item_restored_callback_.Run(std::move(holding_space_item));
}
} }
// Clean up invalid holding space items from persistence. // Clean up invalid holding space items from persistence.
......
...@@ -84,10 +84,6 @@ class MockHoldingSpaceModelObserver : public HoldingSpaceModelObserver { ...@@ -84,10 +84,6 @@ class MockHoldingSpaceModelObserver : public HoldingSpaceModelObserver {
OnHoldingSpaceItemRemoved, OnHoldingSpaceItemRemoved,
(const HoldingSpaceItem* item), (const HoldingSpaceItem* item),
(override)); (override));
MOCK_METHOD(void,
OnHoldingSpaceItemFinalized,
(const HoldingSpaceItem* item),
(override));
}; };
// DropTargetView -------------------------------------------------------------- // DropTargetView --------------------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment