Chromium Code Reviews| Index: chrome/browser/permissions/permission_manager.cc |
| diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc |
| index bed2a61d7364ea0cbc3ff26275c73e31d4b4447d..3dfd24d890c0ac368c124b5b071c7d18bc7dd191 100644 |
| --- a/chrome/browser/permissions/permission_manager.cc |
| +++ b/chrome/browser/permissions/permission_manager.cc |
| @@ -319,6 +319,7 @@ PermissionResult PermissionManager::GetPermissionStatusForFrame( |
| ContentSettingsType permission, |
| content::RenderFrameHost* render_frame_host, |
| const GURL& requesting_origin) { |
| + DCHECK(render_frame_host); |
| content::WebContents* web_contents = |
| content::WebContents::FromRenderFrameHost(render_frame_host); |
| GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
| @@ -415,23 +416,47 @@ void PermissionManager::ResetPermission(PermissionType permission, |
| embedding_origin.GetOrigin()); |
| } |
| -PermissionStatus PermissionManager::GetPermissionStatus( |
| +PermissionStatus PermissionManager::GetPermissionStatusForFrame( |
| PermissionType permission, |
| - const GURL& requesting_origin, |
| - const GURL& embedding_origin) { |
| + content::RenderFrameHost* render_frame_host, |
| + const GURL& requesting_origin) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| PermissionResult result = |
| - GetPermissionStatus(PermissionTypeToContentSetting(permission), |
| - requesting_origin, embedding_origin); |
| + GetPermissionStatusForFrame(PermissionTypeToContentSetting(permission), |
| + render_frame_host, requesting_origin); |
| // TODO(benwells): split this into two functions, GetPermissionStatus and |
| // GetPermissionStatusForPermissionsAPI. |
| PermissionContextBase* context = |
| GetPermissionContext(PermissionTypeToContentSetting(permission)); |
| - if (context) { |
| - result = context->UpdatePermissionStatusWithDeviceStatus( |
| - result, requesting_origin, embedding_origin); |
| - } |
| + result = context->UpdatePermissionStatusWithDeviceStatus( |
| + result, requesting_origin, |
| + content::WebContents::FromRenderFrameHost(render_frame_host) |
| + ->GetLastCommittedURL() |
| + .GetOrigin()); |
| + |
| + return ContentSettingToPermissionStatus(result.content_setting); |
| +} |
| + |
| +PermissionStatus PermissionManager::GetPermissionStatusForWorker( |
| + PermissionType permission, |
| + const GURL& requesting_origin) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + PermissionContextBase* context = |
| + GetPermissionContext(PermissionTypeToContentSetting(permission)); |
| + if (!context->IsAllowedInWorkers()) |
| + return blink::mojom::PermissionStatus::DENIED; |
| + |
| + PermissionResult result = |
| + GetPermissionStatus(PermissionTypeToContentSetting(permission), |
| + requesting_origin, requesting_origin); |
| + |
| + result = context->UpdatePermissionStatusWithDeviceStatus( |
| + result, requesting_origin, requesting_origin); |
| + |
| + // Workers can never prompt the user, so we return blocked in that case. |
|
benwells
2017/05/30 06:49:12
Did this mapping of ASK -> DENIED happen for worke
benwells
2017/05/31 01:48:10
^^^ still valid.
|
| + if (result.content_setting == CONTENT_SETTING_ASK) |
| + return blink::mojom::PermissionStatus::DENIED; |
| return ContentSettingToPermissionStatus(result.content_setting); |
| } |