| 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 c1434fdfeda72886772211d343c8dbaac977ee4c..fad44eb4d08637db2d682900097157e443a90a9d 100644
|
| --- a/chrome/browser/notifications/desktop_notification_service.cc
|
| +++ b/chrome/browser/notifications/desktop_notification_service.cc
|
| @@ -22,6 +22,7 @@
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/url_constants.h"
|
| +#include "components/content_settings/core/common/permission_request_id.h"
|
| #include "components/pref_registry/pref_registry_syncable.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/desktop_notification_delegate.h"
|
| @@ -42,6 +43,7 @@
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/browser/extension_util.h"
|
| #include "extensions/browser/info_map.h"
|
| +#include "extensions/browser/suggest_permission_util.h"
|
| #include "extensions/common/constants.h"
|
| #include "extensions/common/extension.h"
|
| #include "extensions/common/extension_set.h"
|
| @@ -138,14 +140,44 @@ DesktopNotificationService::~DesktopNotificationService() {
|
| void DesktopNotificationService::RequestNotificationPermission(
|
| content::WebContents* web_contents,
|
| const PermissionRequestID& request_id,
|
| - const GURL& requesting_frame,
|
| + const GURL& requesting_origin,
|
| bool user_gesture,
|
| const NotificationPermissionCallback& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| +#if defined(ENABLE_EXTENSIONS)
|
| + extensions::InfoMap* extension_info_map =
|
| + extensions::ExtensionSystem::Get(profile_)->info_map();
|
| + const extensions::Extension* extension = NULL;
|
| + if (extension_info_map) {
|
| + extensions::ExtensionSet extensions;
|
| + extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
|
| + requesting_origin,
|
| + request_id.render_process_id(),
|
| + extensions::APIPermission::kNotifications,
|
| + &extensions);
|
| + for (extensions::ExtensionSet::const_iterator iter = extensions.begin();
|
| + iter != extensions.end(); ++iter) {
|
| + if (IsNotifierEnabled(NotifierId(
|
| + NotifierId::APPLICATION, (*iter)->id()))) {
|
| + extension = iter->get();
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + if (IsExtensionWithPermissionOrSuggestInConsole(
|
| + extensions::APIPermission::kNotifications,
|
| + extension,
|
| + web_contents->GetRenderViewHost())) {
|
| + callback.Run(blink::WebNotificationPermissionAllowed);
|
| + return;
|
| + }
|
| +#endif
|
| +
|
| RequestPermission(
|
| web_contents,
|
| request_id,
|
| - requesting_frame,
|
| + requesting_origin,
|
| user_gesture,
|
| base::Bind(&DesktopNotificationService::OnNotificationPermissionRequested,
|
| weak_factory_.GetWeakPtr(),
|
|
|