| Index: chrome/browser/chrome_content_browser_client.cc
|
| diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
|
| index e3ae8430cec806a0579d1fb3054a56e0a57932a8..646b62b2ec29c428e1062c395a62a1031b408474 100644
|
| --- a/chrome/browser/chrome_content_browser_client.cc
|
| +++ b/chrome/browser/chrome_content_browser_client.cc
|
| @@ -29,23 +29,23 @@
|
| #include "chrome/browser/chrome_net_benchmarking_message_filter.h"
|
| #include "chrome/browser/chrome_quota_permission_context.h"
|
| #include "chrome/browser/content_settings/cookie_settings.h"
|
| +#include "chrome/browser/content_settings/permission_context.h"
|
| +#include "chrome/browser/content_settings/permission_observer.h"
|
| +#include "chrome/browser/content_settings/permission_observer_factory.h"
|
| #include "chrome/browser/content_settings/tab_specific_content_settings.h"
|
| #include "chrome/browser/defaults.h"
|
| #include "chrome/browser/download/download_prefs.h"
|
| #include "chrome/browser/font_family_cache.h"
|
| #include "chrome/browser/geolocation/chrome_access_token_store.h"
|
| #include "chrome/browser/geolocation/geolocation_permission_context.h"
|
| -#include "chrome/browser/geolocation/geolocation_permission_context_factory.h"
|
| #include "chrome/browser/media/media_capture_devices_dispatcher.h"
|
| #include "chrome/browser/media/midi_permission_context.h"
|
| -#include "chrome/browser/media/midi_permission_context_factory.h"
|
| #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h"
|
| #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h"
|
| #include "chrome/browser/net/chrome_net_log.h"
|
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
|
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
|
| #include "chrome/browser/notifications/desktop_notification_service.h"
|
| -#include "chrome/browser/notifications/desktop_notification_service_factory.h"
|
| #include "chrome/browser/notifications/platform_notification_service_impl.h"
|
| #include "chrome/browser/platform_util.h"
|
| #include "chrome/browser/prerender/prerender_final_status.h"
|
| @@ -57,7 +57,6 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_io_data.h"
|
| #include "chrome/browser/push_messaging/push_messaging_permission_context.h"
|
| -#include "chrome/browser/push_messaging/push_messaging_permission_context_factory.h"
|
| #include "chrome/browser/renderer_host/chrome_render_message_filter.h"
|
| #include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
|
| #include "chrome/browser/search/instant_service.h"
|
| @@ -171,7 +170,6 @@
|
|
|
| #if defined(OS_ANDROID) || defined(OS_CHROMEOS)
|
| #include "chrome/browser/media/protected_media_identifier_permission_context.h"
|
| -#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h"
|
| #endif
|
|
|
| #if defined(OS_POSIX) && !defined(OS_MACOSX)
|
| @@ -628,37 +626,6 @@ ContentSettingToPermissionStatus(ContentSetting setting) {
|
| return content::PERMISSION_STATUS_DENIED;
|
| }
|
|
|
| -PermissionContextBase* GetPermissionContext(Profile* profile,
|
| - content::PermissionType permission) {
|
| - switch (permission) {
|
| - case content::PERMISSION_MIDI_SYSEX:
|
| - return MidiPermissionContextFactory::GetForProfile(profile);
|
| - case content::PERMISSION_NOTIFICATIONS:
|
| -#if defined(ENABLE_NOTIFICATIONS)
|
| - return DesktopNotificationServiceFactory::GetForProfile(profile);
|
| -#else
|
| - NOTIMPLEMENTED();
|
| - break;
|
| -#endif
|
| - case content::PERMISSION_GEOLOCATION:
|
| - return GeolocationPermissionContextFactory::GetForProfile(profile);
|
| - case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER:
|
| -#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
|
| - return ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
|
| - profile);
|
| -#else
|
| - NOTIMPLEMENTED();
|
| - break;
|
| -#endif
|
| - case content::PERMISSION_PUSH_MESSAGING:
|
| - return PushMessagingPermissionContextFactory::GetForProfile(profile);
|
| - case content::PERMISSION_NUM:
|
| - NOTREACHED() << "Invalid RequestPermission for " << permission;
|
| - break;
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| // Helper method to translate from Permissions to ContentSettings
|
| ContentSettingsType PermissionToContentSetting(
|
| content::PermissionType permission) {
|
| @@ -681,7 +648,7 @@ ContentSettingsType PermissionToContentSetting(
|
| }
|
| }
|
|
|
| -void OnRequestPermission(
|
| +void PermissionStatusCallbackWrapper(
|
| const base::Callback<void(content::PermissionStatus)>& callback,
|
| ContentSetting content_setting) {
|
| callback.Run(ContentSettingToPermissionStatus(content_setting));
|
| @@ -1946,14 +1913,16 @@ void ChromeContentBrowserClient::RequestPermission(
|
| requesting_frame);
|
| Profile* profile =
|
| Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| - PermissionContextBase* context = GetPermissionContext(profile, permission);
|
| + PermissionContextBase* context =
|
| + PermissionContext::Get(profile, PermissionToContentSetting(permission));
|
|
|
| if (!context)
|
| return;
|
|
|
| context->RequestPermission(web_contents, request_id, requesting_frame,
|
| user_gesture,
|
| - base::Bind(&OnRequestPermission, result_callback));
|
| + base::Bind(&PermissionStatusCallbackWrapper,
|
| + result_callback));
|
| }
|
|
|
| content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus(
|
| @@ -1963,7 +1932,8 @@ content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus(
|
| const GURL& embedding_origin) {
|
| DCHECK(browser_context);
|
| Profile* profile = Profile::FromBrowserContext(browser_context);
|
| - PermissionContextBase* context = GetPermissionContext(profile, permission);
|
| + PermissionContextBase* context =
|
| + PermissionContext::Get(profile, PermissionToContentSetting(permission));
|
|
|
| if (!context)
|
| return content::PERMISSION_STATUS_ASK;
|
| @@ -1973,6 +1943,29 @@ content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus(
|
| embedding_origin.GetOrigin()));
|
| }
|
|
|
| +int ChromeContentBrowserClient::SubscribePermissionStatusChange(
|
| + content::PermissionType permission,
|
| + content::BrowserContext* browser_context,
|
| + const GURL& requesting_origin,
|
| + const GURL& embedding_origin,
|
| + const base::Callback<void(content::PermissionStatus)>& callback) {
|
| + return PermissionObserverFactory::GetForProfile(
|
| + Profile::FromBrowserContext(browser_context))
|
| + ->Subscribe(PermissionToContentSetting(permission),
|
| + requesting_origin,
|
| + embedding_origin,
|
| + base::Bind(&PermissionStatusCallbackWrapper,
|
| + callback));
|
| +}
|
| +
|
| +void ChromeContentBrowserClient::UnsubscribePermissionStatusChange(
|
| + content::BrowserContext* browser_context,
|
| + int subscription_id) {
|
| + PermissionObserverFactory::GetForProfile(
|
| + Profile::FromBrowserContext(browser_context))
|
| + ->Unsubscribe(subscription_id);
|
| +}
|
| +
|
| void ChromeContentBrowserClient::ResetPermission(
|
| content::PermissionType permission,
|
| content::BrowserContext* browser_context,
|
| @@ -1980,7 +1973,8 @@ void ChromeContentBrowserClient::ResetPermission(
|
| const GURL& embedding_origin) {
|
| DCHECK(browser_context);
|
| Profile* profile = Profile::FromBrowserContext(browser_context);
|
| - PermissionContextBase* context = GetPermissionContext(profile, permission);
|
| + PermissionContextBase* context =
|
| + PermissionContext::Get(profile, PermissionToContentSetting(permission));
|
|
|
| if (!context)
|
| return;
|
| @@ -2002,7 +1996,8 @@ void ChromeContentBrowserClient::CancelPermissionRequest(
|
| requesting_frame);
|
| Profile* profile =
|
| Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| - PermissionContextBase* context = GetPermissionContext(profile, permission);
|
| + PermissionContextBase* context =
|
| + PermissionContext::Get(profile, PermissionToContentSetting(permission));
|
| if (!context)
|
| return;
|
| context->CancelPermissionRequest(web_contents, request_id);
|
|
|