12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_tray.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/models/simple_menu_model.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/message_center/message_center.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_tray_delegate.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/message_center/message_center_types.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/message_center/notification_blocker.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/strings/grit/ui_strings.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace message_center { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Menu constants 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kTogglePermissionCommand = 0; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kShowSettingsCommand = 1; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// The model of the context menu for a notification card. 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NotificationMenuModel : public ui::SimpleMenuModel, 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public ui::SimpleMenuModel::Delegate { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NotificationMenuModel(MessageCenterTray* tray, 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const NotifierId& notifier_id, 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& display_source); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~NotificationMenuModel(); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Overridden from ui::SimpleMenuModel::Delegate: 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool GetAcceleratorForCommandId( 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int command_id, 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::Accelerator* accelerator) OVERRIDE; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MessageCenterTray* tray_; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NotifierId notifier_id_; 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NotificationMenuModel); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)NotificationMenuModel::NotificationMenuModel( 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MessageCenterTray* tray, 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const NotifierId& notifier_id, 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& display_source) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : ui::SimpleMenuModel(this), 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tray_(tray), 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) notifier_id_(notifier_id) { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add 'disable notifications' menu item. 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!display_source.empty()) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddItem(kTogglePermissionCommand, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_NOTIFIER_DISABLE, 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) display_source)); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add settings menu item. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddItem(kShowSettingsCommand, 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS)); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)NotificationMenuModel::~NotificationMenuModel() { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool NotificationMenuModel::IsCommandIdChecked(int command_id) const { 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool NotificationMenuModel::IsCommandIdEnabled(int command_id) const { 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return tray_->delegate()->IsContextMenuEnabled(); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool NotificationMenuModel::GetAcceleratorForCommandId( 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int command_id, 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::Accelerator* accelerator) { 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NotificationMenuModel::ExecuteCommand(int command_id, int event_flags) { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (command_id) { 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case kTogglePermissionCommand: 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tray_->message_center()->DisableNotificationsByNotifier(notifier_id_); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case kShowSettingsCommand: 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tray_->ShowNotifierSettingsBubble(); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenterTray::MessageCenterTray( 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MessageCenterTrayDelegate* delegate, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center::MessageCenter* message_center) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : message_center_(message_center), 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center_visible_(false), 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popups_visible_(false), 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_(delegate) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center_->AddObserver(this); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenterTray::~MessageCenterTray() { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center_->RemoveObserver(this); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::ShowMessageCenterBubble() { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (message_center_visible_) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HidePopupBubbleInternal(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center_visible_ = delegate_->ShowMessageCenter(); 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) message_center_->SetVisibility(message_center::VISIBILITY_MESSAGE_CENTER); 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return message_center_visible_; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::HideMessageCenterBubble() { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!message_center_visible_) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->HideMessageCenter(); 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MarkMessageCenterHidden(); 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid MessageCenterTray::MarkMessageCenterHidden() { 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!message_center_visible_) 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center_visible_ = false; 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) message_center_->SetVisibility(message_center::VISIBILITY_TRANSIENT); 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Some notifications (like system ones) should appear as popups again 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // after the message center is closed. 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (message_center_->HasPopupNotifications()) { 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ShowPopupBubble(); 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::ToggleMessageCenterBubble() { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (message_center_visible_) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HideMessageCenterBubble(); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowMessageCenterBubble(); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::ShowPopupBubble() { 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (message_center_visible_) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (popups_visible_) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!message_center_->HasPopupNotifications()) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popups_visible_ = delegate_->ShowPopups(); 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::HidePopupBubble() { 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!popups_visible_) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HidePopupBubbleInternal(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MessageCenterTray::HidePopupBubbleInternal() { 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!popups_visible_) 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate_->HidePopups(); 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) popups_visible_ = false; 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MessageCenterTray::ShowNotifierSettingsBubble() { 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (popups_visible_) 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HidePopupBubbleInternal(); 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch message_center_visible_ = delegate_->ShowNotifierSettings(); 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) message_center_->SetVisibility(message_center::VISIBILITY_SETTINGS); 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<ui::MenuModel> MessageCenterTray::CreateNotificationMenuModel( 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const NotifierId& notifier_id, 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& display_source) { 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<ui::MenuModel>(new NotificationMenuModel( 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, notifier_id, display_source)); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationAdded( 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& notification_id) { 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnMessageCenterChanged(); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationRemoved( 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& notification_id, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool by_user) { 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnMessageCenterChanged(); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationUpdated( 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& notification_id) { 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnMessageCenterChanged(); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationClicked( 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& notification_id) { 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (popups_visible_) 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnMessageCenterChanged(); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationButtonClicked( 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& notification_id, 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int button_index) { 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (popups_visible_) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnMessageCenterChanged(); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationDisplayed( 236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& notification_id, 237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const DisplaySource source) { 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void MessageCenterTray::OnQuietModeChanged(bool in_quiet_mode) { 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NotifyMessageCenterTrayChanged(); 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void MessageCenterTray::OnBlockingStateChanged(NotificationBlocker* blocker) { 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnMessageCenterChanged(); 247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnMessageCenterChanged() { 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (message_center_visible_ && message_center_->NotificationCount() == 0) 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HideMessageCenterBubble(); 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (popups_visible_ && !message_center_->HasPopupNotifications()) 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HidePopupBubbleInternal(); 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) else if (!popups_visible_ && message_center_->HasPopupNotifications()) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowPopupBubble(); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyMessageCenterTrayChanged(); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::NotifyMessageCenterTrayChanged() { 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnMessageCenterTrayChanged(); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace message_center 266