Commit 62ca2198 authored by David Black's avatar David Black Committed by Commit Bot

Don't attempt to update holding space item chip view pin if deleted.

Unpinning an item from its view may result in that view being deleted.
If the view is deleted, we shouldn't attempt to update its pin.

Bug: 1130086
Change-Id: Ib5c8dbe086b4446161569924b3c81a9bd37d272c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2422247
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarAhmed Mehfooz <amehfooz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#809526}
parent 5c868eac
...@@ -63,9 +63,9 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) ...@@ -63,9 +63,9 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
// Subscribe to be notified of changes to `item_`'s image. // Subscribe to be notified of changes to `item_`'s image.
image_subscription_ = image_subscription_ =
item->image().AddImageSkiaChangedCallback(base::BindRepeating( item->image().AddImageSkiaChangedCallback(base::BindRepeating(
&HoldingSpaceItemChipView::Update, base::Unretained(this))); &HoldingSpaceItemChipView::UpdateImage, base::Unretained(this)));
Update(); UpdateImage();
} }
HoldingSpaceItemChipView::~HoldingSpaceItemChipView() = default; HoldingSpaceItemChipView::~HoldingSpaceItemChipView() = default;
...@@ -85,15 +85,19 @@ void HoldingSpaceItemChipView::OnMouseEvent(ui::MouseEvent* event) { ...@@ -85,15 +85,19 @@ void HoldingSpaceItemChipView::OnMouseEvent(ui::MouseEvent* event) {
void HoldingSpaceItemChipView::ButtonPressed(views::Button* sender, void HoldingSpaceItemChipView::ButtonPressed(views::Button* sender,
const ui::Event& event) { const ui::Event& event) {
DCHECK_EQ(sender, pin_); DCHECK_EQ(sender, pin_);
bool is_item_pinned = HoldingSpaceController::Get()->model()->GetItem( const bool is_item_pinned = HoldingSpaceController::Get()->model()->GetItem(
HoldingSpaceItem::GetFileBackedItemId(HoldingSpaceItem::Type::kPinnedFile, HoldingSpaceItem::GetFileBackedItemId(HoldingSpaceItem::Type::kPinnedFile,
item()->file_path())); item()->file_path()));
pin_->SetToggled(!is_item_pinned);
// Unpinning `item()` may result in the destruction of this view.
auto weak_ptr = weak_factory_.GetWeakPtr();
if (is_item_pinned) if (is_item_pinned)
HoldingSpaceController::Get()->client()->UnpinItem(*item()); HoldingSpaceController::Get()->client()->UnpinItem(*item());
else else
HoldingSpaceController::Get()->client()->PinItem(*item()); HoldingSpaceController::Get()->client()->PinItem(*item());
if (weak_ptr)
UpdatePin();
} }
void HoldingSpaceItemChipView::AddPinButton() { void HoldingSpaceItemChipView::AddPinButton() {
...@@ -112,7 +116,7 @@ void HoldingSpaceItemChipView::AddPinButton() { ...@@ -112,7 +116,7 @@ void HoldingSpaceItemChipView::AddPinButton() {
pin_->SetToggledImage(views::Button::STATE_NORMAL, &pinned_icon); pin_->SetToggledImage(views::Button::STATE_NORMAL, &pinned_icon);
} }
void HoldingSpaceItemChipView::Update() { void HoldingSpaceItemChipView::UpdateImage() {
image_->SetImage( image_->SetImage(
item()->image().image_skia(), item()->image().image_skia(),
gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize)); gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize));
...@@ -124,7 +128,7 @@ void HoldingSpaceItemChipView::UpdatePin() { ...@@ -124,7 +128,7 @@ void HoldingSpaceItemChipView::UpdatePin() {
return; return;
} }
bool is_item_pinned = HoldingSpaceController::Get()->model()->GetItem( const bool is_item_pinned = HoldingSpaceController::Get()->model()->GetItem(
HoldingSpaceItem::GetFileBackedItemId(HoldingSpaceItem::Type::kPinnedFile, HoldingSpaceItem::GetFileBackedItemId(HoldingSpaceItem::Type::kPinnedFile,
item()->file_path())); item()->file_path()));
......
...@@ -46,7 +46,7 @@ class ASH_EXPORT HoldingSpaceItemChipView : public HoldingSpaceItemView, ...@@ -46,7 +46,7 @@ class ASH_EXPORT HoldingSpaceItemChipView : public HoldingSpaceItemView,
private: private:
void AddPinButton(); void AddPinButton();
void Update(); void UpdateImage();
void UpdatePin(); void UpdatePin();
tray::RoundedImageView* image_ = nullptr; tray::RoundedImageView* image_ = nullptr;
...@@ -54,6 +54,8 @@ class ASH_EXPORT HoldingSpaceItemChipView : public HoldingSpaceItemView, ...@@ -54,6 +54,8 @@ class ASH_EXPORT HoldingSpaceItemChipView : public HoldingSpaceItemView,
views::ToggleImageButton* pin_ = nullptr; views::ToggleImageButton* pin_ = nullptr;
std::unique_ptr<HoldingSpaceImage::Subscription> image_subscription_; std::unique_ptr<HoldingSpaceImage::Subscription> image_subscription_;
base::WeakPtrFactory<HoldingSpaceItemChipView> weak_factory_{this};
}; };
} // namespace ash } // namespace ash
......
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