| Index: ui/arc/notification/arc_custom_notification_item.cc
|
| diff --git a/ui/arc/notification/arc_custom_notification_item.cc b/ui/arc/notification/arc_custom_notification_item.cc
|
| index ac60ba8b97b68297fff936677fd9e203e8fd9772..153cf3e6a69ba2c9ba35c90fa4d0ff2051fbd98b 100644
|
| --- a/ui/arc/notification/arc_custom_notification_item.cc
|
| +++ b/ui/arc/notification/arc_custom_notification_item.cc
|
| @@ -20,13 +20,14 @@ constexpr char kNotifierId[] = "ARC_NOTIFICATION";
|
|
|
| class ArcNotificationDelegate : public message_center::NotificationDelegate {
|
| public:
|
| - ArcNotificationDelegate() {}
|
| + explicit ArcNotificationDelegate(ArcCustomNotificationItem* item)
|
| + : item_(item) {}
|
|
|
| std::unique_ptr<views::View> CreateCustomContent() override {
|
| if (!surface_)
|
| return nullptr;
|
|
|
| - return base::MakeUnique<ArcCustomNotificationView>(surface_);
|
| + return base::MakeUnique<ArcCustomNotificationView>(item_, surface_);
|
| }
|
|
|
| void set_notification_surface(exo::NotificationSurface* surface) {
|
| @@ -37,6 +38,7 @@ class ArcNotificationDelegate : public message_center::NotificationDelegate {
|
| // The destructor is private since this class is ref-counted.
|
| ~ArcNotificationDelegate() override {}
|
|
|
| + ArcCustomNotificationItem* const item_;
|
| exo::NotificationSurface* surface_ = nullptr;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ArcNotificationDelegate);
|
| @@ -57,6 +59,8 @@ ArcCustomNotificationItem::ArcCustomNotificationItem(
|
| ArcCustomNotificationItem::~ArcCustomNotificationItem() {
|
| if (ArcNotificationSurfaceManager::Get())
|
| ArcNotificationSurfaceManager::Get()->RemoveObserver(this);
|
| +
|
| + FOR_EACH_OBSERVER(Observer, observers_, OnItemDestroying());
|
| }
|
|
|
| void ArcCustomNotificationItem::UpdateWithArcNotificationData(
|
| @@ -83,7 +87,7 @@ void ArcCustomNotificationItem::UpdateWithArcNotificationData(
|
| base::UTF8ToUTF16(data.message.get()), gfx::Image(),
|
| base::UTF8ToUTF16("arc"), // display source
|
| GURL(), // empty origin url, for system component
|
| - notifier_id, rich_data, new ArcNotificationDelegate()));
|
| + notifier_id, rich_data, new ArcNotificationDelegate(this)));
|
|
|
| exo::NotificationSurface* surface =
|
| ArcNotificationSurfaceManager::Get()->GetSurface(notification_key());
|
| @@ -91,6 +95,24 @@ void ArcCustomNotificationItem::UpdateWithArcNotificationData(
|
| OnNotificationSurfaceAdded(surface);
|
| else
|
| ArcNotificationSurfaceManager::Get()->AddObserver(this);
|
| +
|
| + pinned_ = rich_data.pinned;
|
| + FOR_EACH_OBSERVER(Observer, observers_, OnItemPinnedChanged());
|
| +}
|
| +
|
| +void ArcCustomNotificationItem::CloseFromCloseButton() {
|
| + // Needs to manually remove notification from MessageCenter because
|
| + // the floating close button is not part of MessageCenter.
|
| + message_center()->RemoveNotification(notification_id(), true);
|
| + Close(true);
|
| +}
|
| +
|
| +void ArcCustomNotificationItem::AddObserver(Observer* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void ArcCustomNotificationItem::RemoveObserver(Observer* observer) {
|
| + observers_.RemoveObserver(observer);
|
| }
|
|
|
| void ArcCustomNotificationItem::OnNotificationSurfaceAdded(
|
|
|