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); |
} |