Chromium Code Reviews| Index: chrome/browser/notifications/desktop_notification_service.cc |
| =================================================================== |
| --- chrome/browser/notifications/desktop_notification_service.cc (revision 71863) |
| +++ chrome/browser/notifications/desktop_notification_service.cc (working copy) |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2011 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. |
| @@ -43,6 +43,167 @@ |
| const ContentSetting kDefaultSetting = CONTENT_SETTING_ASK; |
| +// NotificationPermissionCallbackTask ----------------------------------------- |
| + |
| +// A task object which calls the renderer to inform the web page that the |
| +// permission request has completed. |
| +class NotificationPermissionCallbackTask : public Task { |
| + public: |
| + NotificationPermissionCallbackTask(int process_id, |
| + int route_id, |
| + int request_id); |
| + virtual ~NotificationPermissionCallbackTask(); |
| + |
| + private: |
| + virtual void Run(); |
| + |
| + int process_id_; |
| + int route_id_; |
| + int request_id_; |
| +}; |
| + |
| +NotificationPermissionCallbackTask::NotificationPermissionCallbackTask( |
| + int process_id, |
| + int route_id, |
| + int request_id) |
| + : process_id_(process_id), |
| + route_id_(route_id), |
| + request_id_(request_id) { |
| +} |
| + |
| +NotificationPermissionCallbackTask::~NotificationPermissionCallbackTask() { |
| +} |
| + |
| +void NotificationPermissionCallbackTask::Run() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_); |
| + if (host) |
| + host->Send(new ViewMsg_PermissionRequestDone(route_id_, request_id_)); |
| +} |
| + |
| + |
| +// NotificationPermissionInfoBarDelegate -------------------------------------- |
| + |
| +// The delegate for the infobar shown when an origin requests notification |
| +// permissions. |
| +class NotificationPermissionInfoBarDelegate : public ConfirmInfoBarDelegate { |
| + public: |
| + NotificationPermissionInfoBarDelegate(TabContents* contents, |
| + const GURL& origin, |
| + const string16& display_name, |
| + int process_id, |
| + int route_id, |
| + int callback_context); |
| + |
| + private: |
| + ~NotificationPermissionInfoBarDelegate(); |
|
Elliot Glaysher
2011/01/20 01:02:03
virtual, I presume?
Peter Kasting
2011/01/20 01:45:14
Good catch!
|
| + |
| + // ConfirmInfoBarDelegate: |
| + virtual void InfoBarClosed(); |
| + virtual SkBitmap* GetIcon() const; |
| + virtual Type GetInfoBarType() const; |
| + virtual string16 GetMessageText() const; |
| + virtual int GetButtons() const; |
| + virtual string16 GetButtonLabel(InfoBarButton button) const; |
| + virtual bool Accept(); |
| + virtual bool Cancel(); |
| + |
| + // 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. |
| + string16 display_name_; |
| + |
| + // The Profile that we restore sessions from. |
| + Profile* profile_; |
| + |
| + // The callback information that tells us how to respond to javascript via |
| + // the correct RenderView. |
| + int process_id_; |
| + int route_id_; |
| + int callback_context_; |
| + |
| + // Whether the user clicked one of the buttons. |
| + bool action_taken_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NotificationPermissionInfoBarDelegate); |
| +}; |
| + |
| +NotificationPermissionInfoBarDelegate::NotificationPermissionInfoBarDelegate( |
| + TabContents* contents, |
| + const GURL& origin, |
| + const string16& display_name, |
| + int process_id, |
| + int route_id, |
| + int callback_context) |
| + : ConfirmInfoBarDelegate(contents), |
| + origin_(origin), |
| + display_name_(display_name), |
| + profile_(contents->profile()), |
| + process_id_(process_id), |
| + route_id_(route_id), |
| + callback_context_(callback_context), |
| + action_taken_(false) { |
| +} |
| + |
| +NotificationPermissionInfoBarDelegate:: |
| + ~NotificationPermissionInfoBarDelegate() { |
| +} |
| + |
| +void NotificationPermissionInfoBarDelegate::InfoBarClosed() { |
| + if (!action_taken_) |
| + UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1); |
| + |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + new NotificationPermissionCallbackTask(process_id_, route_id_, |
| + callback_context_)); |
| + |
| + delete this; |
| +} |
| + |
| +SkBitmap* NotificationPermissionInfoBarDelegate::GetIcon() const { |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| + IDR_PRODUCT_ICON_32); |
| +} |
| + |
| +InfoBarDelegate::Type |
| + NotificationPermissionInfoBarDelegate::GetInfoBarType() const { |
| + return PAGE_ACTION_TYPE; |
| +} |
| + |
| +string16 NotificationPermissionInfoBarDelegate::GetMessageText() const { |
| + return l10n_util::GetStringFUTF16(IDS_NOTIFICATION_PERMISSIONS, |
| + display_name_); |
| +} |
| + |
| +int NotificationPermissionInfoBarDelegate::GetButtons() const { |
| + return BUTTON_OK | BUTTON_CANCEL; |
| +} |
| + |
| +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); |
| + profile_->GetDesktopNotificationService()->GrantPermission(origin_); |
| + action_taken_ = true; |
| + return true; |
| +} |
| + |
| +bool NotificationPermissionInfoBarDelegate::Cancel() { |
| + UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Denied", 1); |
| + profile_->GetDesktopNotificationService()->DenyPermission(origin_); |
| + action_taken_ = true; |
| + return true; |
| +} |
| + |
| + |
| +// DesktopNotificationService ------------------------------------------------- |
| + |
| // static |
| string16 DesktopNotificationService::CreateDataUrl( |
| const GURL& icon_url, const string16& title, const string16& body, |
| @@ -94,123 +255,6 @@ |
| EscapeQueryParamValue(data, false)); |
| } |
| -// A task object which calls the renderer to inform the web page that the |
| -// permission request has completed. |
| -class NotificationPermissionCallbackTask : public Task { |
| - public: |
| - NotificationPermissionCallbackTask(int process_id, int route_id, |
| - int request_id) |
| - : process_id_(process_id), |
| - route_id_(route_id), |
| - request_id_(request_id) { |
| - } |
| - |
| - virtual void Run() { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_); |
| - if (host) |
| - host->Send(new ViewMsg_PermissionRequestDone(route_id_, request_id_)); |
| - } |
| - |
| - private: |
| - int process_id_; |
| - int route_id_; |
| - int request_id_; |
| -}; |
| - |
| -// The delegate for the infobar shown when an origin requests notification |
| -// permissions. |
| -class NotificationPermissionInfoBarDelegate : public ConfirmInfoBarDelegate { |
| - public: |
| - NotificationPermissionInfoBarDelegate(TabContents* contents, |
| - const GURL& origin, |
| - const string16& display_name, |
| - int process_id, |
| - int route_id, |
| - int callback_context) |
| - : ConfirmInfoBarDelegate(contents), |
| - origin_(origin), |
| - display_name_(display_name), |
| - profile_(contents->profile()), |
| - process_id_(process_id), |
| - route_id_(route_id), |
| - callback_context_(callback_context), |
| - action_taken_(false) { |
| - } |
| - |
| - // Overridden from ConfirmInfoBarDelegate: |
| - virtual void InfoBarClosed() { |
| - if (!action_taken_) |
| - UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1); |
| - |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, FROM_HERE, |
| - new NotificationPermissionCallbackTask( |
| - process_id_, route_id_, callback_context_)); |
| - |
| - delete this; |
| - } |
| - |
| - virtual string16 GetMessageText() const { |
| - return l10n_util::GetStringFUTF16(IDS_NOTIFICATION_PERMISSIONS, |
| - display_name_); |
| - } |
| - |
| - virtual SkBitmap* GetIcon() const { |
| - return ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| - IDR_PRODUCT_ICON_32); |
| - } |
| - |
| - virtual int GetButtons() const { |
| - return BUTTON_OK | BUTTON_CANCEL | BUTTON_OK_DEFAULT; |
| - } |
| - |
| - virtual string16 GetButtonLabel(InfoBarButton button) const { |
| - return button == BUTTON_OK ? |
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_PERMISSION_YES) : |
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_PERMISSION_NO); |
| - } |
| - |
| - virtual bool Accept() { |
| - UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Allowed", 1); |
| - profile_->GetDesktopNotificationService()->GrantPermission(origin_); |
| - action_taken_ = true; |
| - return true; |
| - } |
| - |
| - virtual bool Cancel() { |
| - UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Denied", 1); |
| - profile_->GetDesktopNotificationService()->DenyPermission(origin_); |
| - action_taken_ = true; |
| - return true; |
| - } |
| - |
| - // Overridden from InfoBarDelegate: |
| - virtual Type GetInfoBarType() { return PAGE_ACTION_TYPE; } |
| - |
| - private: |
| - // 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. |
| - string16 display_name_; |
| - |
| - // The Profile that we restore sessions from. |
| - Profile* profile_; |
| - |
| - // The callback information that tells us how to respond to javascript via |
| - // the correct RenderView. |
| - int process_id_; |
| - int route_id_; |
| - int callback_context_; |
| - |
| - // Whether the user clicked one of the buttons. |
| - bool action_taken_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(NotificationPermissionInfoBarDelegate); |
| -}; |
| - |
| DesktopNotificationService::DesktopNotificationService(Profile* profile, |
| NotificationUIManager* ui_manager) |
| : profile_(profile), |