OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/permissions/permission_manager.h" | 5 #include "chrome/browser/permissions/permission_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 const GURL& requesting_origin, | 312 const GURL& requesting_origin, |
313 const GURL& embedding_origin) { | 313 const GURL& embedding_origin) { |
314 return GetPermissionStatusHelper(permission, nullptr /* render_frame_host */, | 314 return GetPermissionStatusHelper(permission, nullptr /* render_frame_host */, |
315 requesting_origin, embedding_origin); | 315 requesting_origin, embedding_origin); |
316 } | 316 } |
317 | 317 |
318 PermissionResult PermissionManager::GetPermissionStatusForFrame( | 318 PermissionResult PermissionManager::GetPermissionStatusForFrame( |
319 ContentSettingsType permission, | 319 ContentSettingsType permission, |
320 content::RenderFrameHost* render_frame_host, | 320 content::RenderFrameHost* render_frame_host, |
321 const GURL& requesting_origin) { | 321 const GURL& requesting_origin) { |
322 DCHECK(render_frame_host); | |
322 content::WebContents* web_contents = | 323 content::WebContents* web_contents = |
323 content::WebContents::FromRenderFrameHost(render_frame_host); | 324 content::WebContents::FromRenderFrameHost(render_frame_host); |
324 GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); | 325 GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
325 return GetPermissionStatusHelper(permission, render_frame_host, | 326 return GetPermissionStatusHelper(permission, render_frame_host, |
326 requesting_origin, embedding_origin); | 327 requesting_origin, embedding_origin); |
327 } | 328 } |
328 | 329 |
329 int PermissionManager::RequestPermission( | 330 int PermissionManager::RequestPermission( |
330 PermissionType permission, | 331 PermissionType permission, |
331 content::RenderFrameHost* render_frame_host, | 332 content::RenderFrameHost* render_frame_host, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
408 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 409 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
409 PermissionContextBase* context = | 410 PermissionContextBase* context = |
410 GetPermissionContext(PermissionTypeToContentSetting(permission)); | 411 GetPermissionContext(PermissionTypeToContentSetting(permission)); |
411 if (!context) | 412 if (!context) |
412 return; | 413 return; |
413 | 414 |
414 context->ResetPermission(requesting_origin.GetOrigin(), | 415 context->ResetPermission(requesting_origin.GetOrigin(), |
415 embedding_origin.GetOrigin()); | 416 embedding_origin.GetOrigin()); |
416 } | 417 } |
417 | 418 |
418 PermissionStatus PermissionManager::GetPermissionStatus( | 419 PermissionStatus PermissionManager::GetPermissionStatusForFrame( |
419 PermissionType permission, | 420 PermissionType permission, |
420 const GURL& requesting_origin, | 421 content::RenderFrameHost* render_frame_host, |
421 const GURL& embedding_origin) { | 422 const GURL& requesting_origin) { |
422 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 423 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
423 PermissionResult result = | 424 PermissionResult result = |
424 GetPermissionStatus(PermissionTypeToContentSetting(permission), | 425 GetPermissionStatusForFrame(PermissionTypeToContentSetting(permission), |
425 requesting_origin, embedding_origin); | 426 render_frame_host, requesting_origin); |
426 | 427 |
427 // TODO(benwells): split this into two functions, GetPermissionStatus and | 428 // TODO(benwells): split this into two functions, GetPermissionStatus and |
428 // GetPermissionStatusForPermissionsAPI. | 429 // GetPermissionStatusForPermissionsAPI. |
429 PermissionContextBase* context = | 430 PermissionContextBase* context = |
430 GetPermissionContext(PermissionTypeToContentSetting(permission)); | 431 GetPermissionContext(PermissionTypeToContentSetting(permission)); |
431 if (context) { | 432 result = context->UpdatePermissionStatusWithDeviceStatus( |
432 result = context->UpdatePermissionStatusWithDeviceStatus( | 433 result, requesting_origin, |
433 result, requesting_origin, embedding_origin); | 434 content::WebContents::FromRenderFrameHost(render_frame_host) |
434 } | 435 ->GetLastCommittedURL() |
436 .GetOrigin()); | |
435 | 437 |
436 return ContentSettingToPermissionStatus(result.content_setting); | 438 return ContentSettingToPermissionStatus(result.content_setting); |
437 } | 439 } |
440 | |
441 PermissionStatus PermissionManager::GetPermissionStatusForWorker( | |
442 PermissionType permission, | |
443 const GURL& requesting_origin) { | |
444 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
445 PermissionContextBase* context = | |
446 GetPermissionContext(PermissionTypeToContentSetting(permission)); | |
447 | |
448 PermissionResult result = | |
449 GetPermissionStatus(PermissionTypeToContentSetting(permission), | |
450 requesting_origin, requesting_origin); | |
451 | |
452 result = context->UpdatePermissionStatusWithDeviceStatus( | |
453 result, requesting_origin, requesting_origin); | |
454 | |
455 // 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
| |
456 if (result.content_setting == CONTENT_SETTING_ASK) | |
457 return blink::mojom::PermissionStatus::DENIED; | |
458 | |
459 return ContentSettingToPermissionStatus(result.content_setting); | |
460 } | |
438 | 461 |
439 int PermissionManager::SubscribePermissionStatusChange( | 462 int PermissionManager::SubscribePermissionStatusChange( |
440 PermissionType permission, | 463 PermissionType permission, |
441 const GURL& requesting_origin, | 464 const GURL& requesting_origin, |
442 const GURL& embedding_origin, | 465 const GURL& embedding_origin, |
443 const base::Callback<void(PermissionStatus)>& callback) { | 466 const base::Callback<void(PermissionStatus)>& callback) { |
444 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 467 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
445 if (subscriptions_.IsEmpty()) | 468 if (subscriptions_.IsEmpty()) |
446 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); | 469 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); |
447 | 470 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
522 const GURL& embedding_origin) { | 545 const GURL& embedding_origin) { |
523 PermissionContextBase* context = GetPermissionContext(permission); | 546 PermissionContextBase* context = GetPermissionContext(permission); |
524 PermissionResult result = context->GetPermissionStatus( | 547 PermissionResult result = context->GetPermissionStatus( |
525 render_frame_host, requesting_origin.GetOrigin(), | 548 render_frame_host, requesting_origin.GetOrigin(), |
526 embedding_origin.GetOrigin()); | 549 embedding_origin.GetOrigin()); |
527 DCHECK(result.content_setting == CONTENT_SETTING_ALLOW || | 550 DCHECK(result.content_setting == CONTENT_SETTING_ALLOW || |
528 result.content_setting == CONTENT_SETTING_ASK || | 551 result.content_setting == CONTENT_SETTING_ASK || |
529 result.content_setting == CONTENT_SETTING_BLOCK); | 552 result.content_setting == CONTENT_SETTING_BLOCK); |
530 return result; | 553 return result; |
531 } | 554 } |
OLD | NEW |