message_center.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/message_center/message_center.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/singleton.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notification.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notification_list.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace message_center { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static MessageCenter* g_message_center; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::Initialize() { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(g_message_center == NULL); 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_message_center = new MessageCenter(); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenter* MessageCenter::Get() { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(g_message_center); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return g_message_center; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::Shutdown() { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(g_message_center); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete g_message_center; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_message_center = NULL; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenter::Delegate::~Delegate() { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenter::MessageCenter() 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : delegate_(NULL) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_.reset(new NotificationList(this)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MessageCenter::~MessageCenter() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_.reset(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::AddObserver(Observer* observer) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer_list_.AddObserver(observer); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::RemoveObserver(Observer* observer) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer_list_.RemoveObserver(observer); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageCenter::SetDelegate(Delegate* delegate) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageCenter::SetMessageCenterVisible(bool visible) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_->SetMessageCenterVisible(visible); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t MessageCenter::NotificationCount() const { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return notification_list_->NotificationCount(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t MessageCenter::UnreadNotificationCount() const { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notification_list_->unread_count(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MessageCenter::HasPopupNotifications() const { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notification_list_->HasPopupNotifications(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Client code interface. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageCenter::AddNotification( 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationType type, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& title, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& message, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& display_source, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* optional_fields) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_->AddNotification(type, id, title, message, display_source, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_id, optional_fields); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::UpdateNotification( 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& old_id, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& new_id, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& title, 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& message, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* optional_fields) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_->UpdateNotificationMessage( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) old_id, new_id, title, message, optional_fields); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageCenter::RemoveNotification(const std::string& id) { 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_list_->RemoveNotification(id); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(false); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::SetNotificationIcon(const std::string& notification_id, 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& image) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (notification_list_->SetNotificationIcon(notification_id, image)) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::SetNotificationImage(const std::string& notification_id, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& image) { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (notification_list_->SetNotificationImage(notification_id, image)) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::SetNotificationButtonIcon( 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& notification_id, int button_index, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& image) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (notification_list_->SetNotificationButtonIcon(notification_id, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_index, image)) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Overridden from NotificationChangeObserver: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnRemoveNotification(const std::string& id, bool by_user) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NotificationRemoved(id, by_user); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnRemoveAllNotifications(bool by_user) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NotificationList::Notifications& notifications = 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_list_->GetNotifications(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (NotificationList::Notifications::const_iterator loopiter = 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications.begin(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loopiter != notifications.end(); ) { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationList::Notifications::const_iterator curiter = loopiter++; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string notification_id = (*curiter)->id(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // May call RemoveNotification and erase curiter. 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NotificationRemoved(notification_id, by_user); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnDisableNotificationsByExtension( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DisableExtension(id); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When we disable notifications, we remove any existing matching 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notifications to avoid adding complicated UI to re-enable the source. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_->SendRemoveNotificationsByExtension(id); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnDisableNotificationsByUrl(const std::string& id) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DisableNotificationsFromSource(id); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_list_->SendRemoveNotificationsBySource(id); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnShowNotificationSettings(const std::string& id) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowSettings(id); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnShowNotificationSettingsDialog(gfx::NativeView context) { 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ShowSettingsDialog(context); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnExpanded(const std::string& id) { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_list_->MarkNotificationAsExpanded(id); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnClicked(const std::string& id) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnClicked(id); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (HasPopupNotifications()) { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_list_->MarkSinglePopupAsShown(id, true); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(false); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnButtonClicked(const std::string& id, int button_index) { 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnButtonClicked(id, button_index); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (HasPopupNotifications()) { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_list_->MarkSinglePopupAsShown(id, true); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(false); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Overridden from NotificationList::Delegate: 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::SendRemoveNotification(const std::string& id, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool by_user) { 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NotificationRemoved(id, by_user); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::OnQuietModeChanged(bool quiet_mode) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterChanged(true); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Private. 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenter::NotifyMessageCenterChanged(bool new_notification) { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FOR_EACH_OBSERVER(Observer, 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer_list_, 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnMessageCenterChanged(new_notification)); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace message_center 228