| Index: chrome/browser/notifications/notification_options_menu_model.cc
|
| ===================================================================
|
| --- chrome/browser/notifications/notification_options_menu_model.cc (revision 263121)
|
| +++ chrome/browser/notifications/notification_options_menu_model.cc (working copy)
|
| @@ -1,280 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/notifications/notification_options_menu_model.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/browser/notifications/balloon.h"
|
| -#include "chrome/browser/notifications/balloon_collection.h"
|
| -#include "chrome/browser/notifications/balloon_notification_ui_manager.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/notifications/notification_prefs_manager.h"
|
| -#include "chrome/browser/notifications/notification_ui_manager.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/browser.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/chrome_switches.h"
|
| -#include "chrome/common/content_settings_types.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "content/public/browser/web_contents_delegate.h"
|
| -#include "extensions/common/constants.h"
|
| -#include "extensions/common/extension.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -// Menu commands
|
| -const int kTogglePermissionCommand = 0;
|
| -const int kToggleExtensionCommand = 1;
|
| -const int kOpenContentSettingsCommand = 2;
|
| -const int kCornerSelectionSubMenu = 3;
|
| -
|
| -const int kCornerGroupId = 10;
|
| -const int kCornerUpperLeft = 11;
|
| -const int kCornerUpperRight = 12;
|
| -const int kCornerLowerLeft = 13;
|
| -const int kCornerLowerRight = 14;
|
| -const int kCornerDefault = 20;
|
| -
|
| -CornerSelectionMenuModel::CornerSelectionMenuModel(Balloon* balloon)
|
| - : ui::SimpleMenuModel(this),
|
| - balloon_(balloon) {
|
| - AddRadioItem(kCornerDefault,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_DEFAULT),
|
| - kCornerGroupId);
|
| - AddSeparator(ui::NORMAL_SEPARATOR);
|
| - AddRadioItem(kCornerUpperLeft,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_UPPER_LEFT),
|
| - kCornerGroupId);
|
| - AddRadioItem(kCornerUpperRight,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_UPPER_RIGHT),
|
| - kCornerGroupId);
|
| - AddRadioItem(kCornerLowerLeft,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_LOWER_LEFT),
|
| - kCornerGroupId);
|
| - AddRadioItem(kCornerLowerRight,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_LOWER_RIGHT),
|
| - kCornerGroupId);
|
| -}
|
| -
|
| -CornerSelectionMenuModel::~CornerSelectionMenuModel() {
|
| -}
|
| -
|
| -bool CornerSelectionMenuModel::IsCommandIdChecked(int command_id) const {
|
| - // TODO(dimich): MessageCenter does not use this preference (yet?)
|
| - if (NotificationUIManager::DelegatesToMessageCenter())
|
| - return false;
|
| -
|
| - NotificationPrefsManager* prefs =
|
| - static_cast<BalloonNotificationUIManager*>(
|
| - g_browser_process->notification_ui_manager())->prefs_manager();
|
| -
|
| - BalloonCollection::PositionPreference current =
|
| - prefs->GetPositionPreference();
|
| -
|
| - if (command_id == kCornerUpperLeft)
|
| - return (current == BalloonCollection::UPPER_LEFT);
|
| - else if (command_id == kCornerUpperRight)
|
| - return (current == BalloonCollection::UPPER_RIGHT);
|
| - else if (command_id == kCornerLowerLeft)
|
| - return (current == BalloonCollection::LOWER_LEFT);
|
| - else if (command_id == kCornerLowerRight)
|
| - return (current == BalloonCollection::LOWER_RIGHT);
|
| - else if (command_id == kCornerDefault)
|
| - return (current == BalloonCollection::DEFAULT_POSITION);
|
| -
|
| - NOTREACHED();
|
| - return false;
|
| -}
|
| -
|
| -bool CornerSelectionMenuModel::IsCommandIdEnabled(int command_id) const {
|
| - // All the menu options are always enabled.
|
| - return true;
|
| -}
|
| -
|
| -bool CornerSelectionMenuModel::GetAcceleratorForCommandId(
|
| - int command_id, ui::Accelerator* accelerator) {
|
| - // Currently no accelerators.
|
| - return false;
|
| -}
|
| -
|
| -void CornerSelectionMenuModel::ExecuteCommand(int command_id, int event_flags) {
|
| - // TODO(dimich): MessageCenter does not use this preference (yet?)
|
| - if (NotificationUIManager::DelegatesToMessageCenter())
|
| - return;
|
| -
|
| - NotificationPrefsManager* prefs =
|
| - static_cast<BalloonNotificationUIManager*>(
|
| - g_browser_process->notification_ui_manager())->prefs_manager();
|
| -
|
| - if (command_id == kCornerUpperLeft)
|
| - prefs->SetPositionPreference(BalloonCollection::UPPER_LEFT);
|
| - else if (command_id == kCornerUpperRight)
|
| - prefs->SetPositionPreference(BalloonCollection::UPPER_RIGHT);
|
| - else if (command_id == kCornerLowerLeft)
|
| - prefs->SetPositionPreference(BalloonCollection::LOWER_LEFT);
|
| - else if (command_id == kCornerLowerRight)
|
| - prefs->SetPositionPreference(BalloonCollection::LOWER_RIGHT);
|
| - else if (command_id == kCornerDefault)
|
| - prefs->SetPositionPreference(BalloonCollection::DEFAULT_POSITION);
|
| - else
|
| - NOTREACHED();
|
| -}
|
| -
|
| -NotificationOptionsMenuModel::NotificationOptionsMenuModel(Balloon* balloon)
|
| - : ui::SimpleMenuModel(this),
|
| - balloon_(balloon) {
|
| - const Notification& notification = balloon->notification();
|
| - const GURL& origin = notification.origin_url();
|
| -
|
| - if (origin.SchemeIs(extensions::kExtensionScheme)) {
|
| - ExtensionService* extension_service =
|
| - balloon_->profile()->GetExtensionService();
|
| - const extensions::Extension* extension =
|
| - extension_service->extensions()->GetExtensionOrAppByURL(origin);
|
| - // We get back no extension here when we show the notification after
|
| - // the extension has crashed.
|
| - if (extension) {
|
| - const base::string16 disable_label = l10n_util::GetStringUTF16(
|
| - IDS_EXTENSIONS_DISABLE);
|
| - AddItem(kToggleExtensionCommand, disable_label);
|
| - }
|
| - } else if (!notification.display_source().empty()) {
|
| - const base::string16 disable_label = l10n_util::GetStringFUTF16(
|
| - IDS_NOTIFICATION_BALLOON_REVOKE_MESSAGE,
|
| - notification.display_source());
|
| - AddItem(kTogglePermissionCommand, disable_label);
|
| - }
|
| -
|
| - if (!notification.display_source().empty()) {
|
| - const base::string16 settings_label = l10n_util::GetStringUTF16(
|
| - IDS_NOTIFICATIONS_SETTINGS_BUTTON);
|
| - AddItem(kOpenContentSettingsCommand, settings_label);
|
| - }
|
| -
|
| - corner_menu_model_.reset(new CornerSelectionMenuModel(balloon));
|
| - AddSubMenu(kCornerSelectionSubMenu,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_CHOOSE_POSITION),
|
| - corner_menu_model_.get());
|
| -}
|
| -
|
| -NotificationOptionsMenuModel::~NotificationOptionsMenuModel() {
|
| -}
|
| -
|
| -bool NotificationOptionsMenuModel::IsItemForCommandIdDynamic(int command_id)
|
| - const {
|
| - return command_id == kTogglePermissionCommand ||
|
| - command_id == kToggleExtensionCommand;
|
| -}
|
| -
|
| -base::string16 NotificationOptionsMenuModel::GetLabelForCommandId(
|
| - int command_id) const {
|
| - // TODO(tfarina,johnnyg): Remove this code if we decide to close notifications
|
| - // after permissions are revoked.
|
| - if (command_id == kTogglePermissionCommand ||
|
| - command_id == kToggleExtensionCommand) {
|
| - const Notification& notification = balloon_->notification();
|
| - const GURL& origin = notification.origin_url();
|
| -
|
| - DesktopNotificationService* service =
|
| - DesktopNotificationServiceFactory::GetForProfile(balloon_->profile());
|
| - if (origin.SchemeIs(extensions::kExtensionScheme)) {
|
| - ExtensionService* extension_service =
|
| - balloon_->profile()->GetExtensionService();
|
| - const extensions::Extension* extension =
|
| - extension_service->extensions()->GetExtensionOrAppByURL(origin);
|
| - if (extension) {
|
| - return l10n_util::GetStringUTF16(
|
| - extension_service->IsExtensionEnabled(extension->id()) ?
|
| - IDS_EXTENSIONS_DISABLE :
|
| - IDS_EXTENSIONS_ENABLE);
|
| - }
|
| - } else {
|
| - if (service->GetContentSetting(origin) == CONTENT_SETTING_ALLOW) {
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_NOTIFICATION_BALLOON_REVOKE_MESSAGE,
|
| - notification.display_source());
|
| - } else {
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_NOTIFICATION_BALLOON_ENABLE_MESSAGE,
|
| - notification.display_source());
|
| - }
|
| - }
|
| - } else if (command_id == kOpenContentSettingsCommand) {
|
| - return l10n_util::GetStringUTF16(IDS_NOTIFICATIONS_SETTINGS_BUTTON);
|
| - }
|
| - return base::string16();
|
| -}
|
| -
|
| -bool NotificationOptionsMenuModel::IsCommandIdChecked(int /* command_id */)
|
| - const {
|
| - // Nothing in the menu is checked.
|
| - return false;
|
| -}
|
| -
|
| -bool NotificationOptionsMenuModel::IsCommandIdEnabled(int /* command_id */)
|
| - const {
|
| - // All the menu options are always enabled.
|
| - return true;
|
| -}
|
| -
|
| -bool NotificationOptionsMenuModel::GetAcceleratorForCommandId(
|
| - int /* command_id */, ui::Accelerator* /* accelerator */) {
|
| - // Currently no accelerators.
|
| - return false;
|
| -}
|
| -
|
| -void NotificationOptionsMenuModel::ExecuteCommand(int command_id,
|
| - int event_flags) {
|
| - DesktopNotificationService* service =
|
| - DesktopNotificationServiceFactory::GetForProfile(balloon_->profile());
|
| - ExtensionService* extension_service =
|
| - balloon_->profile()->GetExtensionService();
|
| - const GURL& origin = balloon_->notification().origin_url();
|
| - switch (command_id) {
|
| - case kTogglePermissionCommand:
|
| - if (service->GetContentSetting(origin) == CONTENT_SETTING_ALLOW)
|
| - service->DenyPermission(origin);
|
| - else
|
| - service->GrantPermission(origin);
|
| - break;
|
| - case kToggleExtensionCommand: {
|
| - const extensions::Extension* extension =
|
| - extension_service->extensions()->GetExtensionOrAppByURL(origin);
|
| - if (extension) {
|
| - const std::string& id = extension->id();
|
| - if (extension_service->IsExtensionEnabled(id))
|
| - extension_service->DisableExtension(
|
| - id, extensions::Extension::DISABLE_USER_ACTION);
|
| - else
|
| - extension_service->EnableExtension(id);
|
| - }
|
| - break;
|
| - }
|
| - case kOpenContentSettingsCommand: {
|
| - chrome::HostDesktopType active_desktop = chrome::GetActiveDesktop();
|
| - Browser* browser = chrome::FindLastActiveWithProfile(
|
| - balloon_->profile(), active_desktop);
|
| - if (!browser) {
|
| - // It is possible that there is no browser window (e.g. when there are
|
| - // background pages).
|
| - browser = new Browser(Browser::CreateParams(balloon_->profile(),
|
| - active_desktop));
|
| - }
|
| - chrome::ShowContentSettings(browser, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| -}
|
|
|