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..13519115e443a0f2552884dc0a35e2034f298cc7 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,45 @@ 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)); | 
| + | 
| + 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. | 
| 
 
johnme
2017/06/12 10:18:20
The web Permissions API returns "prompt" even when
 
 | 
| + if (result.content_setting == CONTENT_SETTING_ASK) | 
| + return blink::mojom::PermissionStatus::DENIED; | 
| return ContentSettingToPermissionStatus(result.content_setting); | 
| } |