Chromium Code Reviews| Index: chrome/browser/chromeos/notifications/system_notification.cc |
| diff --git a/chrome/browser/chromeos/notifications/system_notification.cc b/chrome/browser/chromeos/notifications/system_notification.cc |
| index f248707b1ed4b6b1aa6927055fedde813833b7e1..70a842a19ec1964b0b455ecf3c2144e32710ff87 100644 |
| --- a/chrome/browser/chromeos/notifications/system_notification.cc |
| +++ b/chrome/browser/chromeos/notifications/system_notification.cc |
| @@ -11,10 +11,12 @@ |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/ui/webui/web_ui_util.h" |
| +#include "chromeos/dbus/dbus_thread_manager.h" |
| namespace chromeos { |
| void SystemNotification::Init(int icon_resource_id) { |
| + DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); |
| collection_ = static_cast<BalloonCollectionImplType*>( |
| g_browser_process->notification_ui_manager()->balloon_collection()); |
| std::string url = web_ui_util::GetImageDataUrlFromResource(icon_resource_id); |
| @@ -32,7 +34,9 @@ SystemNotification::SystemNotification(Profile* profile, |
| delegate_(delegate), |
| title_(title), |
| visible_(false), |
| - urgent_(false) { |
| + sticky_(false), |
| + urgent_(false), |
| + show_on_unlock_(false) { |
| Init(icon_resource_id); |
| } |
| @@ -45,11 +49,23 @@ SystemNotification::SystemNotification(Profile* profile, |
| delegate_(new Delegate(id)), |
| title_(title), |
| visible_(false), |
| - urgent_(false) { |
| + sticky_(false), |
| + urgent_(false), |
| + show_on_unlock_(false) { |
| Init(icon_resource_id); |
| } |
| SystemNotification::~SystemNotification() { |
| + DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); |
| +} |
| + |
| +void SystemNotification::UnlockScreen() { |
| + if (show_on_unlock_) { |
| + DCHECK(!visible_); |
| + Notification notify = SystemNotificationFactory::Create( |
| + icon_, title_, message_, link_, delegate_.get()); |
| + ShowNotification(notify); |
| + } |
| } |
| void SystemNotification::Show(const string16& message, |
| @@ -63,8 +79,24 @@ void SystemNotification::Show(const string16& message, |
| const BalloonViewHost::MessageCallback& callback, |
| bool urgent, |
| bool sticky) { |
| - Notification notify = SystemNotificationFactory::Create(icon_, |
| - title_, message, link, delegate_.get()); |
| + message_ = message; |
| + link_ = link; |
| + callback_ = callback; |
| + sticky_ = sticky; |
| + |
| + if (DBusThreadManager::Get()->GetPowerManagerClient()->GetIsScreenLocked()) { |
|
oshima
2012/05/11 19:40:07
can you use ScreenLocker::default_screen_locker()-
|
| + if (visible_ && urgent && !urgent_) { |
| + // Hide the notification so that we show/update it on unlock. |
| + Hide(); |
| + urgent_ = true; |
| + } |
| + if (!visible_) |
| + show_on_unlock_ = true; |
| + return; |
| + } |
| + |
| + Notification notify = SystemNotificationFactory::Create( |
| + icon_, title_, message_, link_, delegate_.get()); |
| if (visible_) { |
| // Force showing a user hidden notification on an urgent transition. |
| if (urgent && !urgent_) { |
| @@ -74,14 +106,17 @@ void SystemNotification::Show(const string16& message, |
| collection_->UpdateNotification(notify); |
| } |
| } |
| - if (!visible_) { |
| - collection_->AddSystemNotification(notify, profile_, sticky); |
| - collection_->AddWebUIMessageCallback(notify, "link", callback); |
| - } |
| - visible_ = true; |
| + if (!visible_) |
| + ShowNotification(notify); |
| urgent_ = urgent; |
| } |
| +void SystemNotification::ShowNotification(const Notification& notify) { |
| + collection_->AddSystemNotification(notify, profile_, sticky_); |
| + collection_->AddWebUIMessageCallback(notify, "link", callback_); |
| + visible_ = true; |
| +} |
| + |
| void SystemNotification::Hide() { |
| if (visible_) { |
| collection_->RemoveById(delegate_->id()); |