| 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 030b5fa870e888dd93305050ed720fa295abe772..b6a876dd7703237163245bae04a07d2280dd81c6 100644
|
| --- a/chrome/browser/notifications/message_center_notification_manager.cc
|
| +++ b/chrome/browser/notifications/message_center_notification_manager.cc
|
| @@ -7,9 +7,14 @@
|
| #include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/notifications/desktop_notification_service.h"
|
| +#include "chrome/browser/notifications/desktop_notification_service_factory.h"
|
| #include "chrome/browser/notifications/notification.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/browser_finder.h"
|
| +#include "chrome/browser/ui/chrome_pages.h"
|
| +#include "chrome/browser/ui/host_desktop.h"
|
| #include "chrome/common/extensions/extension_set.h"
|
| #include "chrome/common/pref_names.h"
|
|
|
| @@ -135,22 +140,42 @@ bool MessageCenterNotificationManager::UpdateNotification(
|
|
|
| void MessageCenterNotificationManager::DisableExtension(
|
| const std::string& notification_id) {
|
| - NOTIMPLEMENTED();
|
| + ProfileNotification* profile_notification =
|
| + FindProfileNotification(notification_id);
|
| + std::string extension_id = profile_notification->GetExtensionId();
|
| + DCHECK(!extension_id.empty()); // or UI should not have enabled the command.
|
| + profile_notification->profile()->GetExtensionService()->DisableExtension(
|
| + extension_id, extensions::Extension::DISABLE_USER_ACTION);
|
| }
|
|
|
| void MessageCenterNotificationManager::DisableNotificationsFromSource(
|
| const std::string& notification_id) {
|
| - NOTIMPLEMENTED();
|
| + ProfileNotification* profile_notification =
|
| + FindProfileNotification(notification_id);
|
| + // UI should not have enabled the command if there is no valid source.
|
| + DCHECK(profile_notification->notification().origin_url().is_valid());
|
| + DesktopNotificationService* service =
|
| + DesktopNotificationServiceFactory::GetForProfile(
|
| + profile_notification->profile());
|
| + service->DenyPermission(profile_notification->notification().origin_url());
|
| }
|
|
|
| void MessageCenterNotificationManager::NotificationRemoved(
|
| const std::string& notification_id) {
|
| - NOTIMPLEMENTED();
|
| + RemoveProfileNotification(FindProfileNotification(notification_id));
|
| }
|
|
|
| void MessageCenterNotificationManager::ShowSettings(
|
| const std::string& notification_id) {
|
| - NOTIMPLEMENTED();
|
| + ProfileNotification* profile_notification =
|
| + FindProfileNotification(notification_id);
|
| + Browser* browser =
|
| + chrome::FindOrCreateTabbedBrowser(profile_notification->profile(),
|
| + chrome::HOST_DESKTOP_TYPE_NATIVE);
|
| + if (profile_notification->GetExtensionId().empty())
|
| + chrome::ShowContentSettings(browser, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
|
| + else
|
| + chrome::ShowExtensions(browser);
|
| }
|
|
|
| void MessageCenterNotificationManager::ShowSettingsDialog(
|
| @@ -160,12 +185,13 @@ void MessageCenterNotificationManager::ShowSettingsDialog(
|
|
|
| void MessageCenterNotificationManager::OnClicked(
|
| const std::string& notification_id) {
|
| - NOTIMPLEMENTED();
|
| + FindProfileNotification(notification_id)->notification().Click();
|
| }
|
|
|
| void MessageCenterNotificationManager::OnButtonClicked(
|
| const std::string& notification_id, int button_index) {
|
| - NOTIMPLEMENTED();
|
| + FindProfileNotification(notification_id)->notification().ButtonClick(
|
| + button_index);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -216,3 +242,13 @@ void MessageCenterNotificationManager::RemoveProfileNotification(
|
| profile_notifications_.erase(id);
|
| delete profile_notification;
|
| }
|
| +
|
| +MessageCenterNotificationManager::ProfileNotification*
|
| + MessageCenterNotificationManager::FindProfileNotification(
|
| + const std::string& id) const {
|
| + NotificationMap::const_iterator iter = profile_notifications_.find(id);
|
| + // If the notification is shown in UI, it must be in the map.
|
| + DCHECK(iter != profile_notifications_.end());
|
| + DCHECK((*iter).second);
|
| + return (*iter).second;
|
| +}
|
|
|