Chromium Code Reviews| 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 c53742b75fb2f626fc4704d57af2862bf9b577f7..39fbb586de0a662b9e81ffc45cc09c0f7bd55bb6 100644 |
| --- a/chrome/browser/notifications/desktop_notification_service.cc |
| +++ b/chrome/browser/notifications/desktop_notification_service.cc |
| @@ -30,7 +30,6 @@ |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| -#include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/show_desktop_notification_params.h" |
| #include "ui/base/webui/web_ui_util.h" |
| @@ -47,11 +46,11 @@ |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/extension_set.h" |
| +#include "extensions/common/permissions/permissions_data.h" |
| #endif |
| using blink::WebTextDirection; |
| using content::BrowserThread; |
| -using content::RenderViewHost; |
| using content::WebContents; |
| using message_center::NotifierId; |
| @@ -147,49 +146,46 @@ void DesktopNotificationService::RequestNotificationPermission( |
| void DesktopNotificationService::ShowDesktopNotification( |
| const content::ShowDesktopNotificationHostMsgParams& params, |
| - content::RenderFrameHost* render_frame_host, |
| scoped_ptr<content::DesktopNotificationDelegate> delegate, |
| base::Closure* cancel_callback) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - const GURL& origin = params.origin; |
| - NotificationObjectProxy* proxy = |
| - new NotificationObjectProxy(render_frame_host, delegate.Pass()); |
| - base::string16 display_source = DisplayNameForOriginInProcessId( |
| - origin, render_frame_host->GetProcess()->GetID()); |
| - Notification notification(origin, params.icon_url, params.title, |
| + NotificationObjectProxy* proxy = new NotificationObjectProxy(delegate.Pass()); |
| + |
| + base::string16 display_source = DisplayNameForOrigin(params.origin); |
| + Notification notification(params.origin, params.icon_url, params.title, |
| params.body, params.direction, display_source, params.replace_id, |
| proxy); |
| - // The webkit notification doesn't timeout. |
| + // Web Notifications never timeout. |
| notification.set_never_timeout(true); |
| g_browser_process->notification_ui_manager()->Add(notification, profile_); |
| - if (cancel_callback) |
| - *cancel_callback = base::Bind(&CancelNotification, proxy->id()); |
| - DesktopNotificationProfileUtil::UsePermission(profile_, origin); |
| + DCHECK(cancel_callback); |
| + *cancel_callback = base::Bind(&CancelNotification, proxy->id()); |
| + |
| + DesktopNotificationProfileUtil::UsePermission(profile_, params.origin); |
| } |
| -base::string16 DesktopNotificationService::DisplayNameForOriginInProcessId( |
| - const GURL& origin, int process_id) { |
| +base::string16 DesktopNotificationService::DisplayNameForOrigin( |
|
Peter Beverloo
2014/09/17 16:24:08
This mimics the behavior of GetExtensionsWithAPIPe
dewittj
2014/09/17 16:58:48
+dcheng who wrote GetExtensionsWithAPIPermissionFo
dcheng
2014/10/03 18:40:06
It looks like I did this since it was suggested by
not at google - send to devlin
2014/10/17 16:12:27
Extension pages can end up being hosted in other p
|
| + const GURL& origin) { |
| #if defined(ENABLE_EXTENSIONS) |
| // If the source is an extension, lookup the display name. |
| if (origin.SchemeIs(extensions::kExtensionScheme)) { |
| extensions::InfoMap* extension_info_map = |
| extensions::ExtensionSystem::Get(profile_)->info_map(); |
| if (extension_info_map) { |
| - extensions::ExtensionSet extensions; |
| - extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( |
| - origin, |
| - process_id, |
| - extensions::APIPermission::kNotifications, |
| - &extensions); |
| - for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); |
| - iter != extensions.end(); ++iter) { |
| - NotifierId notifier_id(NotifierId::APPLICATION, (*iter)->id()); |
| + const std::string& extension_id = origin.host(); |
| + const extensions::Extension* extension = |
| + extension_info_map->extensions().GetByID(extension_id); |
| + |
| + if (extension && |
| + extension->permissions_data()->HasAPIPermission( |
| + extensions::APIPermission::kNotifications)) { |
| + NotifierId notifier_id(NotifierId::APPLICATION, extension_id); |
| if (IsNotifierEnabled(notifier_id)) |
| - return base::UTF8ToUTF16((*iter)->name()); |
| + return base::UTF8ToUTF16(extension->name()); |
| } |
| } |
| } |