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