Commit 48ab3a66 authored by miguelg's avatar miguelg Committed by Commit bot

Refactor extension code for notification permission handling.

As a first step just move it from chrome_content_browser client
to the desktop_notification_service.

BUG=392187

Review URL: https://codereview.chromium.org/660293002

Cr-Commit-Position: refs/heads/master@{#300241}
parent a42e46ee
...@@ -229,7 +229,6 @@ ...@@ -229,7 +229,6 @@
#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/guest_view/web_view/web_view_guest.h"
#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
#include "extensions/browser/suggest_permission_util.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_set.h" #include "extensions/common/extension_set.h"
...@@ -1829,35 +1828,6 @@ void ChromeContentBrowserClient::RequestDesktopNotificationPermission( ...@@ -1829,35 +1828,6 @@ void ChromeContentBrowserClient::RequestDesktopNotificationPermission(
render_frame_host->GetSiteInstance()->GetBrowserContext()); render_frame_host->GetSiteInstance()->GetBrowserContext());
DesktopNotificationService* notification_service = DesktopNotificationService* notification_service =
DesktopNotificationServiceFactory::GetForProfile(profile); DesktopNotificationServiceFactory::GetForProfile(profile);
#if defined(ENABLE_EXTENSIONS)
InfoMap* extension_info_map =
extensions::ExtensionSystem::Get(profile)->info_map();
const Extension* extension = NULL;
if (extension_info_map) {
extensions::ExtensionSet extensions;
extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
source_origin,
render_frame_host->GetProcess()->GetID(),
extensions::APIPermission::kNotifications,
&extensions);
for (extensions::ExtensionSet::const_iterator iter = extensions.begin();
iter != extensions.end(); ++iter) {
if (notification_service->IsNotifierEnabled(NotifierId(
NotifierId::APPLICATION, (*iter)->id()))) {
extension = iter->get();
break;
}
}
}
if (IsExtensionWithPermissionOrSuggestInConsole(
APIPermission::kNotifications,
extension,
render_frame_host->GetRenderViewHost())) {
callback.Run(blink::WebNotificationPermissionAllowed);
return;
}
#endif
WebContents* web_contents = WebContents::FromRenderFrameHost( WebContents* web_contents = WebContents::FromRenderFrameHost(
render_frame_host); render_frame_host);
int render_process_id = render_frame_host->GetProcess()->GetID(); int render_process_id = render_frame_host->GetProcess()->GetID();
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.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 "components/pref_registry/pref_registry_syncable.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/desktop_notification_delegate.h" #include "content/public/browser/desktop_notification_delegate.h"
...@@ -42,6 +43,7 @@ ...@@ -42,6 +43,7 @@
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/browser/extension_util.h" #include "extensions/browser/extension_util.h"
#include "extensions/browser/info_map.h" #include "extensions/browser/info_map.h"
#include "extensions/browser/suggest_permission_util.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_set.h" #include "extensions/common/extension_set.h"
...@@ -138,14 +140,44 @@ DesktopNotificationService::~DesktopNotificationService() { ...@@ -138,14 +140,44 @@ DesktopNotificationService::~DesktopNotificationService() {
void DesktopNotificationService::RequestNotificationPermission( void DesktopNotificationService::RequestNotificationPermission(
content::WebContents* web_contents, content::WebContents* web_contents,
const PermissionRequestID& request_id, const PermissionRequestID& request_id,
const GURL& requesting_frame, const GURL& requesting_origin,
bool user_gesture, bool user_gesture,
const NotificationPermissionCallback& callback) { const NotificationPermissionCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 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( RequestPermission(
web_contents, web_contents,
request_id, request_id,
requesting_frame, requesting_origin,
user_gesture, user_gesture,
base::Bind(&DesktopNotificationService::OnNotificationPermissionRequested, base::Bind(&DesktopNotificationService::OnNotificationPermissionRequested,
weak_factory_.GetWeakPtr(), weak_factory_.GetWeakPtr(),
......
...@@ -87,7 +87,7 @@ class DesktopNotificationService : public PermissionContextBase ...@@ -87,7 +87,7 @@ class DesktopNotificationService : public PermissionContextBase
void RequestNotificationPermission( void RequestNotificationPermission(
content::WebContents* web_contents, content::WebContents* web_contents,
const PermissionRequestID& request_id, const PermissionRequestID& request_id,
const GURL& requesting_frame, const GURL& requesting_origin,
bool user_gesture, bool user_gesture,
const NotificationPermissionCallback& callback); const NotificationPermissionCallback& callback);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment