Chromium Code Reviews| 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 cf63aa7cf1ec233a8427de64bbba0c5e8ce9d4c0..091b123c27957913676f0bc2fcf09ee830a79fb2 100644 |
| --- a/chrome/browser/chrome_content_browser_client.cc |
| +++ b/chrome/browser/chrome_content_browser_client.cc |
| @@ -632,6 +632,7 @@ PermissionContextBase* GetPermissionContext(Profile* profile, |
| return DesktopNotificationServiceFactory::GetForProfile(profile); |
| #else |
| NOTIMPLEMENTED(); |
| + break; |
| #endif |
| case content::PERMISSION_GEOLOCATION: |
| return GeolocationPermissionContextFactory::GetForProfile(profile); |
| @@ -652,6 +653,28 @@ PermissionContextBase* GetPermissionContext(Profile* profile, |
| return nullptr; |
| } |
| +// Helper method to translate from Permissions to ContentSettings |
| +ContentSettingsType PermissionToContentSetting( |
|
Nico
2015/02/04 16:43:32
nit: feels like this could be somewhere in content
timvolodine
2015/02/05 18:19:04
ack, for now think we can keep it here as it's onl
|
| + content::PermissionType permission) { |
| + switch (permission) { |
| + case content::PERMISSION_MIDI_SYSEX: |
| + return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; |
| + case content::PERMISSION_PUSH_MESSAGING: |
| + return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING; |
| + case content::PERMISSION_NOTIFICATIONS: |
| + return CONTENT_SETTINGS_TYPE_NOTIFICATIONS; |
| + case content::PERMISSION_GEOLOCATION: |
| + return CONTENT_SETTINGS_TYPE_GEOLOCATION; |
| +#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| + case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
| + return CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER; |
| +#endif |
| + default: |
| + NOTREACHED() << "Unknown content setting for permission " << permission; |
| + return CONTENT_SETTINGS_TYPE_DEFAULT; |
| + } |
| +} |
| + |
| } // namespace |
| namespace chrome { |
| @@ -1908,67 +1931,19 @@ void ChromeContentBrowserClient::RequestPermission( |
| const base::Callback<void(bool)>& result_callback) { |
| int render_process_id = web_contents->GetRenderProcessHost()->GetID(); |
| int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
| - Profile* profile = |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| - |
| const PermissionRequestID request_id(render_process_id, |
| render_view_id, |
| bridge_id, |
| requesting_frame); |
| + Profile* profile = |
| + Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| + PermissionContextBase* context = GetPermissionContext(profile, permission); |
| - switch (permission) { |
| - case content::PERMISSION_MIDI_SYSEX: |
| - MidiPermissionContextFactory::GetForProfile(profile) |
| - ->RequestPermission(web_contents, |
| - request_id, |
| - requesting_frame, |
| - user_gesture, |
| - result_callback); |
| - break; |
| - case content::PERMISSION_NOTIFICATIONS: |
| -#if defined(ENABLE_NOTIFICATIONS) |
| - DesktopNotificationServiceFactory::GetForProfile(profile) |
| - ->RequestNotificationPermission(web_contents, |
| - request_id, |
| - requesting_frame, |
| - user_gesture, |
| - result_callback); |
| -#else |
| - NOTIMPLEMENTED(); |
| -#endif |
| - break; |
| - case content::PERMISSION_GEOLOCATION: |
| - GeolocationPermissionContextFactory::GetForProfile(profile) |
| - ->RequestPermission(web_contents, |
| - request_id, |
| - requesting_frame.GetOrigin(), |
| - user_gesture, |
| - result_callback); |
| - break; |
| - case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
| -#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| - ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(profile) |
| - ->RequestPermission(web_contents, |
| - request_id, |
| - requesting_frame.GetOrigin(), |
| - user_gesture, |
| - result_callback); |
| -#else |
| - NOTIMPLEMENTED(); |
| -#endif |
| - break; |
| - case content::PERMISSION_PUSH_MESSAGING: |
| - gcm::PushMessagingPermissionContextFactory::GetForProfile(profile) |
| - ->RequestPermission(web_contents, |
| - request_id, |
| - requesting_frame.GetOrigin(), |
| - user_gesture, |
| - result_callback); |
| - break; |
| - case content::PERMISSION_NUM: |
| - NOTREACHED() << "Invalid RequestPermission for " << permission; |
| - break; |
| - } |
| + if (!context) |
| + return; |
| + |
| + context->RequestPermission(web_contents, request_id, requesting_frame, |
| + user_gesture, result_callback); |
| } |
| content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus( |
| @@ -2011,67 +1986,16 @@ void ChromeContentBrowserClient::CancelPermissionRequest( |
| const GURL& requesting_frame) { |
| int render_process_id = web_contents->GetRenderProcessHost()->GetID(); |
| int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
| - |
| const PermissionRequestID request_id(render_process_id, |
| render_view_id, |
| bridge_id, |
| requesting_frame); |
| Profile* profile = |
| Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| - switch (permission) { |
| - case content::PERMISSION_MIDI_SYSEX: |
| - MidiPermissionContextFactory::GetForProfile(profile) |
| - ->CancelPermissionRequest(web_contents, request_id); |
| - break; |
| - case content::PERMISSION_NOTIFICATIONS: |
| -#if defined(ENABLE_NOTIFICATIONS) |
| - DesktopNotificationServiceFactory::GetForProfile(profile) |
| - ->CancelPermissionRequest(web_contents, request_id); |
| -#else |
| - NOTIMPLEMENTED(); |
| -#endif |
| - break; |
| - case content::PERMISSION_GEOLOCATION: |
| - GeolocationPermissionContextFactory::GetForProfile(profile) |
| - ->CancelPermissionRequest(web_contents, request_id); |
| - break; |
| - case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
| -#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| - ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(profile) |
| - ->CancelPermissionRequest(web_contents, request_id); |
| -#else |
| - NOTIMPLEMENTED(); |
| -#endif |
| - break; |
| - case content::PERMISSION_PUSH_MESSAGING: |
| - NOTIMPLEMENTED() << "CancelPermission not implemented for " << permission; |
| - break; |
| - case content::PERMISSION_NUM: |
| - NOTREACHED() << "Invalid CancelPermission for " << permission; |
| - break; |
| - } |
| -} |
| - |
| -// Helper method to translate from Permissions to ContentSettings |
| -static ContentSettingsType PermissionToContentSetting( |
| - content::PermissionType permission) { |
| - switch (permission) { |
| - case content::PERMISSION_MIDI_SYSEX: |
| - return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; |
| - case content::PERMISSION_PUSH_MESSAGING: |
| - return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING; |
| - case content::PERMISSION_NOTIFICATIONS: |
| - return CONTENT_SETTINGS_TYPE_NOTIFICATIONS; |
| - case content::PERMISSION_GEOLOCATION: |
| - return CONTENT_SETTINGS_TYPE_GEOLOCATION; |
| -#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| - case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
| - return CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER; |
| -#endif |
| - default: |
| - NOTREACHED() << "Unknown content setting for permission " << permission; |
| - return CONTENT_SETTINGS_TYPE_DEFAULT; |
| - } |
| + PermissionContextBase* context = GetPermissionContext(profile, permission); |
| + if (!context) |
| + return; |
| + context->CancelPermissionRequest(web_contents, request_id); |
| } |
| void ChromeContentBrowserClient::RegisterPermissionUsage( |