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 f57d75c04f098c77d5fe3bdf545caba967341b31..aa606d5a4c1d83155eabaf4358bac7b077fda21c 100644 |
| --- a/chrome/browser/chrome_content_browser_client.cc |
| +++ b/chrome/browser/chrome_content_browser_client.cc |
| @@ -1816,39 +1816,6 @@ content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() { |
| return MediaCaptureDevicesDispatcher::GetInstance(); |
| } |
| -void ChromeContentBrowserClient::RequestDesktopNotificationPermission( |
| - const GURL& source_origin, |
| - content::RenderFrameHost* render_frame_host, |
| - const base::Callback<void(blink::WebNotificationPermission)>& callback) { |
| -#if defined(ENABLE_NOTIFICATIONS) |
| - // Skip showing the infobar if the request comes from an extension, and that |
| - // extension has the 'notify' permission. (If the extension does not have the |
| - // permission, the user will still be prompted.) |
| - Profile* profile = Profile::FromBrowserContext( |
| - render_frame_host->GetSiteInstance()->GetBrowserContext()); |
| - DesktopNotificationService* notification_service = |
| - DesktopNotificationServiceFactory::GetForProfile(profile); |
| - WebContents* web_contents = WebContents::FromRenderFrameHost( |
| - render_frame_host); |
| - int render_process_id = render_frame_host->GetProcess()->GetID(); |
| - const PermissionRequestID request_id(render_process_id, |
| - web_contents->GetRoutingID(), |
| - -1 /* bridge id */, |
| - GURL()); |
| - |
| - notification_service->RequestNotificationPermission( |
| - web_contents, |
| - request_id, |
| - source_origin, |
| - // TODO(peter): plumb user_gesture over IPC |
| - true, |
| - callback); |
| - |
| -#else |
| - NOTIMPLEMENTED(); |
| -#endif |
| -} |
| - |
| blink::WebNotificationPermission |
| ChromeContentBrowserClient::CheckDesktopNotificationPermission( |
| const GURL& source_origin, |
| @@ -1917,7 +1884,8 @@ void ChromeContentBrowserClient::ShowDesktopNotification( |
| #endif |
| } |
| -void ChromeContentBrowserClient::RequestGeolocationPermission( |
| +void ChromeContentBrowserClient::RequestPermission( |
| + content::PermissionType permission, |
| content::WebContents* web_contents, |
| int bridge_id, |
| const GURL& requesting_frame, |
| @@ -1925,19 +1893,55 @@ void ChromeContentBrowserClient::RequestGeolocationPermission( |
| 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()); |
|
Peter Beverloo
2014/10/20 17:32:16
Profile* profile =
Profile::FromBrowserConte
Miguel Garcia
2014/10/21 17:17:12
Done.
|
| const PermissionRequestID request_id(render_process_id, |
| render_view_id, |
| bridge_id, |
| requesting_frame); |
| - GeolocationPermissionContextFactory::GetForProfile( |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext()))-> |
| - RequestPermission(web_contents, request_id, |
| - requesting_frame.GetOrigin(), user_gesture, |
| - result_callback); |
| + |
| + 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( |
|
Bernhard Bauer
2014/10/20 14:57:24
At the very least, indent this four more spaces, a
Miguel Garcia
2014/10/21 17:17:11
Done.
|
| + web_contents, |
| + request_id, |
| + requesting_frame, |
| + user_gesture, |
| + result_callback); |
| +#else |
| + NOTIMPLEMENTED(); |
|
Bernhard Bauer
2014/10/20 14:57:24
Fix alignment.
Miguel Garcia
2014/10/21 17:17:12
Done.
|
| +#endif |
| + break; |
| + case content::PERMISSION_GEOLOCATION: |
| + GeolocationPermissionContextFactory::GetForProfile(profile) |
| + ->RequestPermission(web_contents, request_id, |
| + requesting_frame.GetOrigin(), user_gesture, |
| + result_callback); |
| + break; |
| +#if defined(OS_ANDROID) |
|
Peter Beverloo
2014/10/20 17:32:16
Either place the #if inside of the case-statement,
Miguel Garcia
2014/10/21 17:17:12
Done.
|
| + case content::PERMISSION_PROTECTED_MEDIA: |
| + ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(profile) |
| + ->RequestProtectedMediaIdentifierPermission(web_contents, |
| + requesting_frame, |
| + result_callback); |
| + break; |
| +#endif |
| + default: |
| + LOG(WARNING) << "Permission not available " << permission; |
|
Peter Beverloo
2014/10/20 17:32:16
nit: break for consistency.
Miguel Garcia
2014/10/21 17:17:12
Not sure where do you want to see the break
|
| + } |
| + |
| } |
| -void ChromeContentBrowserClient::CancelGeolocationPermissionRequest( |
| +void ChromeContentBrowserClient::CancelPermissionRequest( |
| + content::PermissionType permission, |
| content::WebContents* web_contents, |
| int bridge_id, |
| const GURL& requesting_frame) { |
| @@ -1948,56 +1952,70 @@ void ChromeContentBrowserClient::CancelGeolocationPermissionRequest( |
| render_view_id, |
| bridge_id, |
| requesting_frame); |
| - GeolocationPermissionContextFactory::GetForProfile( |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext()))-> |
| - CancelPermissionRequest(web_contents, request_id); |
| + Profile* profile = Profile::FromBrowserContext( |
| + web_contents->GetBrowserContext()); |
| + switch (permission) { |
| + case content::PERMISSION_MIDI_SYSEX: |
| + MidiPermissionContextFactory::GetForProfile(profile) |
|
Peter Beverloo
2014/10/20 17:32:16
Fix indentation.
Miguel Garcia
2014/10/21 17:17:12
Done.
|
| + ->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; |
| + #if defined(OS_ANDROID) |
| + case content::PERMISSION_PROTECTED_MEDIA: |
| + ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( |
| + profile)->CancelProtectedMediaIdentifierPermissionRequests( |
| + render_process_id, |
| + render_view_id, |
| + requesting_frame); |
| + break; |
| + #endif |
| + default: |
| + LOG(WARNING) << "Permission not available " << permission; |
| + } |
| } |
| -void ChromeContentBrowserClient::RequestMidiSysExPermission( |
| - content::WebContents* web_contents, |
| - int bridge_id, |
| - const GURL& requesting_frame, |
| - bool user_gesture, |
| - base::Callback<void(bool)> result_callback, |
| - base::Closure* cancel_callback) { |
| - MidiPermissionContext* context = |
| - MidiPermissionContextFactory::GetForProfile( |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext())); |
| - int renderer_id = web_contents->GetRenderProcessHost()->GetID(); |
| - int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
| - const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL()); |
| +// Helper method to translate from Permissions to ContentSettings |
| +static ContentSettingsType PermissionToContentSetting( |
| + content::PermissionType permission) { |
| + switch (permission) { |
| + case content::PERMISSION_MIDI_SYSEX: |
|
Peter Beverloo
2014/10/20 17:32:16
Fix indentation.
Miguel Garcia
2014/10/21 17:17:11
Done.
|
| + return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; |
| + case content::PERMISSION_NOTIFICATIONS: |
| + return CONTENT_SETTINGS_TYPE_NOTIFICATIONS; |
| + case content::PERMISSION_GEOLOCATION: |
| + return CONTENT_SETTINGS_TYPE_GEOLOCATION; |
| +#if defined(OS_ANDROID) |
| + case content::PERMISSION_PROTECTED_MEDIA: |
| + return CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER; |
| +#endif |
| - context->RequestPermission(web_contents, id, requesting_frame, |
| - user_gesture, result_callback); |
| + default: |
| + NOTREACHED() << "Unknown content setting for permission " << permission; |
| + return CONTENT_SETTINGS_TYPE_DEFAULT; |
| + } |
| } |
| -void ChromeContentBrowserClient::DidUseGeolocationPermission( |
| +void ChromeContentBrowserClient::RegisterPermissionUsage( |
| + content::PermissionType permission, |
| content::WebContents* web_contents, |
| const GURL& frame_url, |
| const GURL& main_frame_url) { |
| Profile::FromBrowserContext(web_contents->GetBrowserContext()) |
| ->GetHostContentSettingsMap() |
| ->UpdateLastUsage( |
| - frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| -} |
| - |
| -void ChromeContentBrowserClient::RequestProtectedMediaIdentifierPermission( |
| - content::WebContents* web_contents, |
| - const GURL& origin, |
| - base::Callback<void(bool)> result_callback, |
| - base::Closure* cancel_callback) { |
| -#if defined(OS_ANDROID) |
| - ProtectedMediaIdentifierPermissionContext* context = |
| - ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext())); |
| - context->RequestProtectedMediaIdentifierPermission(web_contents, |
| - origin, |
| - result_callback, |
| - cancel_callback); |
| -#else |
| - NOTIMPLEMENTED(); |
| - result_callback.Run(false); |
| -#endif // defined(OS_ANDROID) |
| + frame_url, main_frame_url, PermissionToContentSetting(permission)); |
| } |
| bool ChromeContentBrowserClient::CanCreateWindow( |