| Index: chrome/browser/notifications/desktop_notification_service.cc
|
| ===================================================================
|
| --- chrome/browser/notifications/desktop_notification_service.cc (revision 72158)
|
| +++ 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:
|
| + virtual ~NotificationPermissionInfoBarDelegate();
|
| +
|
| + // 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),
|
|
|