Chromium Code Reviews| Index: chrome/browser/notifications/desktop_notification_service.cc |
| diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc |
| index c9d144dcdfd7b0181d46a782ae8e963b2e3b924a..a5a51ef1cd3e2536489e65e3245ad0a980e7f4f2 100644 |
| --- a/chrome/browser/notifications/desktop_notification_service.cc |
| +++ b/chrome/browser/notifications/desktop_notification_service.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/threading/thread.h" |
| #include "base/utf_string_conversions.h" |
| +#include "chrome/browser/browser_process.h" |
| #include "chrome/browser/content_settings/content_settings_details.h" |
| #include "chrome/browser/content_settings/content_settings_provider.h" |
| #include "chrome/browser/content_settings/host_content_settings_map.h" |
| @@ -224,12 +225,6 @@ DesktopNotificationService::~DesktopNotificationService() { |
| StopObserving(); |
| } |
| -void DesktopNotificationService::SetUIManager( |
| - NotificationUIManager* ui_manager) { |
| - DCHECK(!ui_manager_); |
| - ui_manager_ = ui_manager; |
| -} |
| - |
| void DesktopNotificationService::StartObserving() { |
| if (!profile_->IsOffTheRecord()) { |
| notification_registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| @@ -274,8 +269,8 @@ void DesktopNotificationService::Observe( |
| // which was unloaded. |
| const Extension* extension = |
| content::Details<UnloadedExtensionInfo>(details)->extension; |
| - if (extension && ui_manager_) |
| - ui_manager_->CancelAllBySourceOrigin(extension->url()); |
| + if (extension) |
| + GetUIManager()->CancelAllBySourceOrigin(extension->url()); |
| } else if (type == chrome::NOTIFICATION_PROFILE_DESTROYED) { |
| StopObserving(); |
| } |
| @@ -371,8 +366,7 @@ void DesktopNotificationService::RequestPermission( |
| void DesktopNotificationService::ShowNotification( |
| const Notification& notification) { |
| - // ui_manager_ should never be NULL here. |
| - ui_manager_->Add(notification, profile_); |
| + GetUIManager()->Add(notification, profile_); |
| } |
| bool DesktopNotificationService::CancelDesktopNotification( |
| @@ -380,9 +374,7 @@ bool DesktopNotificationService::CancelDesktopNotification( |
| scoped_refptr<NotificationObjectProxy> proxy( |
| new NotificationObjectProxy(process_id, route_id, notification_id, |
| false)); |
| - if (ui_manager_) |
| - return ui_manager_->CancelById(proxy->id()); |
| - return false; |
| + return GetUIManager()->CancelById(proxy->id()); |
| } |
| bool DesktopNotificationService::ShowDesktopNotification( |
| @@ -431,6 +423,14 @@ void DesktopNotificationService::NotifySettingsChange() { |
| content::NotificationService::NoDetails()); |
| } |
| +NotificationUIManager* DesktopNotificationService::GetUIManager() { |
| + // We defer setting ui_manager_ to the global singleton until we need it |
| + // in order to avoid UI dependent construction during startup. |
| + if (!ui_manager_) |
|
jam
2011/11/19 01:18:32
this member variable, and even this function, seem
stevenjb
2011/11/19 01:24:20
Tests might set this in which case we do not want
|
| + ui_manager_ = g_browser_process->notification_ui_manager(); |
| + return ui_manager_; |
| +} |
| + |
| WebKit::WebNotificationPresenter::Permission |
| DesktopNotificationService::HasPermission(const GURL& origin) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |