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 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 if (!pending_requests_.Lookup(request_id)) | 327 if (!pending_requests_.Lookup(request_id)) |
328 return kNoPendingOperation; | 328 return kNoPendingOperation; |
329 | 329 |
330 return request_id; | 330 return request_id; |
331 } | 331 } |
332 | 332 |
333 PermissionResult PermissionManager::GetPermissionStatus( | 333 PermissionResult PermissionManager::GetPermissionStatus( |
334 ContentSettingsType permission, | 334 ContentSettingsType permission, |
335 const GURL& requesting_origin, | 335 const GURL& requesting_origin, |
336 const GURL& embedding_origin) { | 336 const GURL& embedding_origin) { |
337 if (IsConstantPermission(permission)) { | 337 return GetPermissionStatusHelper(permission, nullptr /* render_frame_host */, |
338 return PermissionResult(GetContentSettingForConstantPermission(permission), | 338 requesting_origin, embedding_origin); |
339 PermissionStatusSource::UNSPECIFIED); | 339 } |
340 } | 340 |
341 PermissionContextBase* context = GetPermissionContext(permission); | 341 PermissionResult PermissionManager::GetPermissionStatusForFrame( |
342 PermissionResult result = context->GetPermissionStatus( | 342 ContentSettingsType permission, |
343 requesting_origin.GetOrigin(), embedding_origin.GetOrigin()); | 343 content::RenderFrameHost* render_frame_host) { |
344 DCHECK(result.content_setting == CONTENT_SETTING_ALLOW || | 344 content::WebContents* web_contents = |
345 result.content_setting == CONTENT_SETTING_ASK || | 345 content::WebContents::FromRenderFrameHost(render_frame_host); |
346 result.content_setting == CONTENT_SETTING_BLOCK); | 346 GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
347 return result; | 347 return GetPermissionStatusHelper( |
| 348 permission, render_frame_host, |
| 349 render_frame_host->GetLastCommittedURL().GetOrigin(), embedding_origin); |
348 } | 350 } |
349 | 351 |
350 int PermissionManager::RequestPermission( | 352 int PermissionManager::RequestPermission( |
351 PermissionType permission, | 353 PermissionType permission, |
352 content::RenderFrameHost* render_frame_host, | 354 content::RenderFrameHost* render_frame_host, |
353 const GURL& requesting_origin, | 355 const GURL& requesting_origin, |
354 bool user_gesture, | 356 bool user_gesture, |
355 const base::Callback<void(PermissionStatus)>& callback) { | 357 const base::Callback<void(PermissionStatus)>& callback) { |
356 ContentSettingsType content_settings_type = | 358 ContentSettingsType content_settings_type = |
357 PermissionTypeToContentSetting(permission); | 359 PermissionTypeToContentSetting(permission); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 subscription->current_value = new_value; | 519 subscription->current_value = new_value; |
518 | 520 |
519 // Add the callback to |callbacks| which will be run after the loop to | 521 // Add the callback to |callbacks| which will be run after the loop to |
520 // prevent re-entrance issues. | 522 // prevent re-entrance issues. |
521 callbacks.push_back(base::Bind(subscription->callback, new_value)); | 523 callbacks.push_back(base::Bind(subscription->callback, new_value)); |
522 } | 524 } |
523 | 525 |
524 for (const auto& callback : callbacks) | 526 for (const auto& callback : callbacks) |
525 callback.Run(); | 527 callback.Run(); |
526 } | 528 } |
| 529 |
| 530 PermissionResult PermissionManager::GetPermissionStatusHelper( |
| 531 ContentSettingsType permission, |
| 532 content::RenderFrameHost* render_frame_host, |
| 533 const GURL& requesting_origin, |
| 534 const GURL& embedding_origin) { |
| 535 if (IsConstantPermission(permission)) { |
| 536 return PermissionResult(GetContentSettingForConstantPermission(permission), |
| 537 PermissionStatusSource::UNSPECIFIED); |
| 538 } |
| 539 PermissionContextBase* context = GetPermissionContext(permission); |
| 540 PermissionResult result = context->GetPermissionStatus( |
| 541 nullptr /* render_frame_host */, requesting_origin.GetOrigin(), |
| 542 embedding_origin.GetOrigin()); |
| 543 DCHECK(result.content_setting == CONTENT_SETTING_ALLOW || |
| 544 result.content_setting == CONTENT_SETTING_ASK || |
| 545 result.content_setting == CONTENT_SETTING_BLOCK); |
| 546 return result; |
| 547 } |
OLD | NEW |