Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2322)

Unified Diff: chrome/browser/notifications/desktop_notification_service.cc

Issue 376253005: Migrate the notification permission to the new common permission classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 2d605f819ea3475e513bbbbad2f9711825e2c61b..541b4d23b051b60ac5ce53c5a970924238387efe 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -14,7 +14,6 @@
#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"
-#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/notifications/desktop_notification_service_factory.h"
#include "chrome/browser/notifications/notification.h"
#include "chrome/browser/notifications/notification_object_proxy.h"
@@ -23,14 +22,10 @@
#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
-#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
#include "chrome/common/content_settings.h"
#include "chrome/common/content_settings_pattern.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
-#include "components/infobars/core/confirm_infobar_delegate.h"
-#include "components/infobars/core/infobar.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_service.h"
@@ -71,226 +66,6 @@ namespace {
const char kChromeNowExtensionID[] = "pafkbggdmjlpgkdkcbjmhmfcdpncadgh";
-// NotificationPermissionRequest ---------------------------------------
-
-class NotificationPermissionRequest : public PermissionBubbleRequest {
- public:
- NotificationPermissionRequest(
- DesktopNotificationService* notification_service,
- const GURL& origin,
- base::string16 display_name,
- const base::Closure& callback);
- virtual ~NotificationPermissionRequest();
-
- // PermissionBubbleDelegate:
- virtual int GetIconID() const OVERRIDE;
- virtual base::string16 GetMessageText() const OVERRIDE;
- virtual base::string16 GetMessageTextFragment() const OVERRIDE;
- virtual bool HasUserGesture() const OVERRIDE;
- virtual GURL GetRequestingHostname() const OVERRIDE;
- virtual void PermissionGranted() OVERRIDE;
- virtual void PermissionDenied() OVERRIDE;
- virtual void Cancelled() OVERRIDE;
- virtual void RequestFinished() OVERRIDE;
-
- private:
- // The notification service to be used.
- DesktopNotificationService* notification_service_;
-
- // The origin we are asking for permissions on.
- GURL origin_;
-
- // The display name for the origin to be displayed. Will be different from
- // origin_ for extensions.
- base::string16 display_name_;
-
- // The callback information that tells us how to respond to javascript.
- base::Closure callback_;
-
- // Whether the user clicked one of the buttons.
- bool action_taken_;
-
- DISALLOW_COPY_AND_ASSIGN(NotificationPermissionRequest);
-};
-
-NotificationPermissionRequest::NotificationPermissionRequest(
- DesktopNotificationService* notification_service,
- const GURL& origin,
- base::string16 display_name,
- const base::Closure& callback)
- : notification_service_(notification_service),
- origin_(origin),
- display_name_(display_name),
- callback_(callback),
- action_taken_(false) {}
-
-NotificationPermissionRequest::~NotificationPermissionRequest() {}
-
-int NotificationPermissionRequest::GetIconID() const {
- return IDR_INFOBAR_DESKTOP_NOTIFICATIONS;
-}
-
-base::string16 NotificationPermissionRequest::GetMessageText() const {
- return l10n_util::GetStringFUTF16(IDS_NOTIFICATION_PERMISSIONS,
- display_name_);
-}
-
-base::string16
-NotificationPermissionRequest::GetMessageTextFragment() const {
- return l10n_util::GetStringUTF16(IDS_NOTIFICATION_PERMISSIONS_FRAGMENT);
-}
-
-bool NotificationPermissionRequest::HasUserGesture() const {
- // Currently notification permission requests are only issued on
- // user gesture.
- return true;
-}
-
-GURL NotificationPermissionRequest::GetRequestingHostname() const {
- return origin_;
-}
-
-void NotificationPermissionRequest::PermissionGranted() {
- action_taken_ = true;
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Allowed", 1);
- notification_service_->GrantPermission(origin_);
-}
-
-void NotificationPermissionRequest::PermissionDenied() {
- action_taken_ = true;
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Denied", 1);
- notification_service_->DenyPermission(origin_);
-}
-
-void NotificationPermissionRequest::Cancelled() {
-}
-
-void NotificationPermissionRequest::RequestFinished() {
- if (!action_taken_)
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1);
-
- callback_.Run();
-
- delete this;
-}
-
-
-// NotificationPermissionInfoBarDelegate --------------------------------------
-
-// The delegate for the infobar shown when an origin requests notification
-// permissions.
-class NotificationPermissionInfoBarDelegate : public ConfirmInfoBarDelegate {
- public:
- // Creates a notification permission infobar and delegate and adds the infobar
- // to |infobar_service|.
- static void Create(InfoBarService* infobar_service,
- DesktopNotificationService* notification_service,
- const GURL& origin,
- const base::string16& display_name,
- const base::Closure& callback);
-
- private:
- NotificationPermissionInfoBarDelegate(
- DesktopNotificationService* notification_service,
- const GURL& origin,
- const base::string16& display_name,
- const base::Closure& callback);
- virtual ~NotificationPermissionInfoBarDelegate();
-
- // ConfirmInfoBarDelegate:
- virtual int GetIconID() const OVERRIDE;
- virtual Type GetInfoBarType() const OVERRIDE;
- virtual base::string16 GetMessageText() const OVERRIDE;
- virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
- virtual bool Accept() OVERRIDE;
- virtual bool Cancel() OVERRIDE;
-
- // The origin we are asking for permissions on.
- GURL origin_;
-
- // The display name for the origin to be displayed. Will be different from
- // origin_ for extensions.
- base::string16 display_name_;
-
- // The notification service to be used.
- DesktopNotificationService* notification_service_;
-
- // The callback information that tells us how to respond to javascript.
- base::Closure callback_;
-
- // Whether the user clicked one of the buttons.
- bool action_taken_;
-
- DISALLOW_COPY_AND_ASSIGN(NotificationPermissionInfoBarDelegate);
-};
-
-// static
-void NotificationPermissionInfoBarDelegate::Create(
- InfoBarService* infobar_service,
- DesktopNotificationService* notification_service,
- const GURL& origin,
- const base::string16& display_name,
- const base::Closure& callback) {
- infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
- scoped_ptr<ConfirmInfoBarDelegate>(
- new NotificationPermissionInfoBarDelegate(
- notification_service, origin, display_name, callback))));
-}
-
-NotificationPermissionInfoBarDelegate::NotificationPermissionInfoBarDelegate(
- DesktopNotificationService* notification_service,
- const GURL& origin,
- const base::string16& display_name,
- const base::Closure& callback)
- : ConfirmInfoBarDelegate(),
- origin_(origin),
- display_name_(display_name),
- notification_service_(notification_service),
- callback_(callback),
- action_taken_(false) {
-}
-
-NotificationPermissionInfoBarDelegate::
- ~NotificationPermissionInfoBarDelegate() {
- if (!action_taken_)
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1);
Peter Beverloo 2014/07/10 11:29:39 We seem to lose this UMA coverage, but I've heard
Miguel Garcia 2014/07/17 17:24:48 I think we will, I decided to drop it since it onl
-
- callback_.Run();
-}
-
-int NotificationPermissionInfoBarDelegate::GetIconID() const {
- return IDR_INFOBAR_DESKTOP_NOTIFICATIONS;
-}
-
-infobars::InfoBarDelegate::Type
-NotificationPermissionInfoBarDelegate::GetInfoBarType() const {
- return PAGE_ACTION_TYPE;
-}
-
-base::string16 NotificationPermissionInfoBarDelegate::GetMessageText() const {
- return l10n_util::GetStringFUTF16(IDS_NOTIFICATION_PERMISSIONS,
- display_name_);
-}
-
-base::string16 NotificationPermissionInfoBarDelegate::GetButtonLabel(
- InfoBarButton button) const {
- return l10n_util::GetStringUTF16((button == BUTTON_OK) ?
- IDS_NOTIFICATION_PERMISSION_YES : IDS_NOTIFICATION_PERMISSION_NO);
-}
-
-bool NotificationPermissionInfoBarDelegate::Accept() {
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Allowed", 1);
- notification_service_->GrantPermission(origin_);
- action_taken_ = true;
- return true;
-}
-
-bool NotificationPermissionInfoBarDelegate::Cancel() {
- UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Denied", 1);
- notification_service_->DenyPermission(origin_);
- action_taken_ = true;
- return true;
-}
void CancelNotification(const std::string& id) {
g_browser_process->notification_ui_manager()->CancelById(id);
@@ -386,7 +161,8 @@ std::string DesktopNotificationService::AddIconNotification(
DesktopNotificationService::DesktopNotificationService(
Profile* profile,
NotificationUIManager* ui_manager)
- : profile_(profile),
+ : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_NOTIFICATIONS),
+ profile_(profile),
ui_manager_(ui_manager) {
OnStringListPrefChanged(
prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_);
@@ -439,23 +215,6 @@ void DesktopNotificationService::DenyPermission(const GURL& origin) {
CONTENT_SETTING_BLOCK);
}
-ContentSetting DesktopNotificationService::GetDefaultContentSetting(
- std::string* provider_id) {
- return profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS, provider_id);
-}
-
-void DesktopNotificationService::SetDefaultContentSetting(
- ContentSetting setting) {
- profile_->GetHostContentSettingsMap()->SetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting);
-}
-
-void DesktopNotificationService::ResetToDefaultContentSetting() {
- profile_->GetHostContentSettingsMap()->SetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_DEFAULT);
-}
-
void DesktopNotificationService::GetNotificationsSettings(
ContentSettingsForOneType* settings) {
profile_->GetHostContentSettingsMap()->GetSettingsForOneType(
@@ -464,21 +223,6 @@ void DesktopNotificationService::GetNotificationsSettings(
settings);
}
-void DesktopNotificationService::ClearSetting(
- const ContentSettingsPattern& pattern) {
- profile_->GetHostContentSettingsMap()->SetContentSetting(
- pattern,
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- NO_RESOURCE_IDENTIFIER,
- CONTENT_SETTING_DEFAULT);
-}
-
-void DesktopNotificationService::ResetAllOrigins() {
Peter Beverloo 2014/07/10 11:29:39 This is still used in notification_browsertest.cc.
Miguel Garcia 2014/07/17 17:24:48 Yeah there were two tests broken, fixed them now.
- profile_->GetHostContentSettingsMap()->ClearSettingsForOneType(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
-}
-
ContentSetting DesktopNotificationService::GetContentSetting(
const GURL& origin) {
return profile_->GetHostContentSettingsMap()->GetContentSetting(
@@ -488,52 +232,6 @@ ContentSetting DesktopNotificationService::GetContentSetting(
NO_RESOURCE_IDENTIFIER);
}
-void DesktopNotificationService::RequestPermission(
- const GURL& origin,
- content::RenderFrameHost* render_frame_host,
- const base::Closure& callback) {
- // If |origin| hasn't been seen before and the default content setting for
- // notifications is "ask", show an infobar.
- // The cache can only answer queries on the IO thread once it's initialized,
- // so don't ask the cache.
- WebContents* web_contents = WebContents::FromRenderFrameHost(
- render_frame_host);
- ContentSetting setting = GetContentSetting(origin);
- if (setting == CONTENT_SETTING_ASK) {
- if (PermissionBubbleManager::Enabled()) {
- PermissionBubbleManager* bubble_manager =
- PermissionBubbleManager::FromWebContents(web_contents);
- if (bubble_manager) {
- bubble_manager->AddRequest(new NotificationPermissionRequest(
- this,
- origin,
- DisplayNameForOriginInProcessId(
- origin, render_frame_host->GetProcess()->GetID()),
- callback));
- }
- return;
- }
-
- // Show an info bar requesting permission.
- InfoBarService* infobar_service =
- InfoBarService::FromWebContents(web_contents);
- // |infobar_service| may be NULL, e.g., if this request originated in a
- // browser action popup, extension background page, or any HTML that runs
- // outside of a tab.
- if (infobar_service) {
- NotificationPermissionInfoBarDelegate::Create(
- infobar_service, this, origin,
- DisplayNameForOriginInProcessId(
- origin, render_frame_host->GetProcess()->GetID()),
- callback);
- return;
- }
- }
-
- // Notify renderer immediately.
- callback.Run();
-}
-
void DesktopNotificationService::ShowDesktopNotification(
const content::ShowDesktopNotificationHostMsgParams& params,
content::RenderFrameHost* render_frame_host,
@@ -583,13 +281,6 @@ base::string16 DesktopNotificationService::DisplayNameForOriginInProcessId(
return base::UTF8ToUTF16(origin.host());
}
-void DesktopNotificationService::NotifySettingsChange() {
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED,
- content::Source<DesktopNotificationService>(this),
- 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.

Powered by Google App Engine
This is Rietveld 408576698