Chromium Code Reviews| Index: chrome/browser/notifications/message_center_notification_manager.cc |
| diff --git a/chrome/browser/notifications/message_center_notification_manager.cc b/chrome/browser/notifications/message_center_notification_manager.cc |
| index be8bd2ef88fdbbe7e8d4b65da0070182eb80981d..945fefcb6c24c88835a550381524d1fef1d5aee4 100644 |
| --- a/chrome/browser/notifications/message_center_notification_manager.cc |
| +++ b/chrome/browser/notifications/message_center_notification_manager.cc |
| @@ -25,10 +25,18 @@ |
| #include "ui/message_center/message_center_tray.h" |
| #include "ui/message_center/notifier_settings.h" |
| +namespace { |
| + |
|
Andrew T Wilson (Slow)
2013/06/19 06:28:57
Remove blank line, and add a comment for what this
dewittj
2013/06/20 02:20:54
Done.
|
| +const int kIdleDelaySeconds = 1; |
| +} |
| + |
| MessageCenterNotificationManager::MessageCenterNotificationManager( |
| - message_center::MessageCenter* message_center) |
| + message_center::MessageCenter* message_center, |
| + PrefService* local_state) |
| : message_center_(message_center), |
| settings_controller_(new MessageCenterSettingsController) { |
| + first_run_pref_.Init(prefs::kMessageCenterShowedFirstRunBalloon, local_state); |
| + |
| message_center_->SetDelegate(this); |
| message_center_->AddObserver(this); |
| @@ -44,6 +52,20 @@ MessageCenterNotificationManager::~MessageCenterNotificationManager() { |
| message_center_->RemoveObserver(this); |
| } |
| +void MessageCenterNotificationManager::DisplayFirstRunBalloon() { |
| +#if !defined(OS_WIN) |
| + // The first run balloon is only displayed on Windows, since the visibility of |
| + // the tray icon is limited. |
| + return; |
|
Andrew T Wilson (Slow)
2013/06/19 06:28:57
I think it's better to make the entire method #if
dewittj
2013/06/20 02:20:54
Done.
|
| +#endif |
| + |
| + if (!tray_) |
| + return; |
| + |
| + // Store for posterity the fact that we've shown the first-run balloon. |
| + first_run_pref_.SetValue(true); |
| + tray_->DisplayFirstRunBalloon(); |
| +} |
| //////////////////////////////////////////////////////////////////////////////// |
| // NotificationUIManager |
| @@ -274,12 +296,20 @@ void MessageCenterNotificationManager::OnNotificationRemoved( |
| profile_notifications_.find(notification_id); |
| if (iter != profile_notifications_.end()) |
| RemoveProfileNotification(iter->second, by_user); |
| + |
| + CheckFirstRunTimer(); |
| } |
| void MessageCenterNotificationManager::OnNotificationCenterClosed() { |
| // When the center is open it halts all notifications, so we need to listen |
| // for events indicating it's been closed. |
| CheckAndShowNotifications(); |
| + CheckFirstRunTimer(); |
| +} |
| + |
| +void MessageCenterNotificationManager::OnNotificationUpdated( |
| + const std::string& notification_id) { |
| + CheckFirstRunTimer(); |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -496,3 +526,37 @@ MessageCenterNotificationManager::ProfileNotification* |
| return (*iter).second; |
| } |
| + |
| +void MessageCenterNotificationManager::CheckFirstRunTimer() { |
| +#if !defined(OS_WIN) |
| + // The first run balloon is only used on Windows, since it is the platform |
| + // that has the most issues with tray icon visibility. |
| + return; |
| +#endif |
| + |
| + // If there is no tray_, we can't display a balloon here anyway. |
| + // Also, we only want to display the first run balloon once, so the pref will |
| + // store the flag on disk based on whether we ever showed the balloon. |
| + if (!tray_.get() || first_run_pref_.GetValue()) |
|
Andrew T Wilson (Slow)
2013/06/19 06:28:57
What's the case where tray_ is null? Can we ever *
dewittj
2013/06/20 02:20:54
There is no case where tray_ is null. I was just
|
| + return; |
| + |
| + // If there are popups, the message center is visible, or there are no more |
| + // notifications, don't continue the timer since it will be annoying or |
| + // useless. |
| + if (message_center_->HasPopupNotifications() || |
| + message_center_->IsMessageCenterVisible() || |
| + 0 == message_center_->NotificationCount()) { |
| + first_run_balloon_timer_.Stop(); |
| + return; |
| + } |
| + |
| + // No need to restart the timer if it's already going. |
| + if (first_run_balloon_timer_.IsRunning()) |
| + return; |
| + |
| + first_run_balloon_timer_.Start( |
| + FROM_HERE, |
| + base::TimeDelta::FromSeconds(kIdleDelaySeconds), |
| + base::Bind(&MessageCenterNotificationManager::DisplayFirstRunBalloon, |
| + AsWeakPtr())); |
| +} |