| Index: chrome/browser/media/protected_media_identifier_permission_context.cc
|
| diff --git a/chrome/browser/media/protected_media_identifier_permission_context.cc b/chrome/browser/media/protected_media_identifier_permission_context.cc
|
| index 6f1bc6e115b467d6a50608fb7d7ebc361e3a5382..fd5f549137799d6b4a939f2f02b35b39b6ce7481 100644
|
| --- a/chrome/browser/media/protected_media_identifier_permission_context.cc
|
| +++ b/chrome/browser/media/protected_media_identifier_permission_context.cc
|
| @@ -4,22 +4,12 @@
|
|
|
| #include "chrome/browser/media/protected_media_identifier_permission_context.h"
|
|
|
| -#include <functional>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| #include "base/prefs/pref_service.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/content_settings/tab_specific_content_settings.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/tab_contents/tab_util.h"
|
| #include "chrome/common/pref_names.h"
|
| -#include "components/content_settings/core/browser/host_content_settings_map.h"
|
| #include "components/content_settings/core/common/permission_request_id.h"
|
| #include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/web_contents.h"
|
|
|
| #if defined(ENABLE_EXTENSIONS)
|
| @@ -34,30 +24,23 @@ using extensions::APIPermission;
|
|
|
| ProtectedMediaIdentifierPermissionContext::
|
| ProtectedMediaIdentifierPermissionContext(Profile* profile)
|
| - : profile_(profile), shutting_down_(false) {}
|
| + : PermissionContextBase(profile,
|
| + CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) {
|
| +}
|
|
|
| ProtectedMediaIdentifierPermissionContext::
|
| ~ProtectedMediaIdentifierPermissionContext() {
|
| - // ProtectedMediaIdentifierPermissionContext may be destroyed on either
|
| - // the UI thread or the IO thread, but the PermissionQueueController must have
|
| - // been destroyed on the UI thread.
|
| - DCHECK(!permission_queue_controller_.get());
|
| }
|
|
|
| -void ProtectedMediaIdentifierPermissionContext::
|
| - RequestProtectedMediaIdentifierPermission(
|
| - content::WebContents* web_contents,
|
| - const GURL& origin,
|
| - base::Callback<void(bool)> result_callback) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - if (shutting_down_)
|
| - return;
|
| -
|
| - int render_process_id = web_contents->GetRenderProcessHost()->GetID();
|
| - int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID();
|
| +void ProtectedMediaIdentifierPermissionContext::RequestPermission(
|
| + content::WebContents* web_contents,
|
| + const PermissionRequestID& id,
|
| + const GURL& requesting_frame_origin,
|
| + bool user_gesture,
|
| + const BrowserPermissionCallback& callback) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - const PermissionRequestID id(
|
| - render_process_id, render_view_id, 0, origin);
|
| + GURL embedder = web_contents->GetLastCommittedURL().GetOrigin();
|
|
|
| #if defined(ENABLE_EXTENSIONS)
|
| if (extensions::GetViewType(web_contents) !=
|
| @@ -67,102 +50,42 @@ void ProtectedMediaIdentifierPermissionContext::
|
| << "Attempt to use protected media identifier in tabless renderer: "
|
| << id.ToString()
|
| << " (can't prompt user without a visible tab)";
|
| - NotifyPermissionSet(id, origin, result_callback, false);
|
| + NotifyPermissionSet(id, origin, embedder, callback, false, false);
|
| return;
|
| }
|
| #endif
|
|
|
| - GURL embedder = web_contents->GetLastCommittedURL();
|
| - if (!origin.is_valid() || !embedder.is_valid()) {
|
| + if (!requesting_frame_origin.is_valid() || !embedder.is_valid()) {
|
| LOG(WARNING)
|
| << "Attempt to use protected media identifier from an invalid URL: "
|
| - << origin << "," << embedder
|
| + << requesting_frame_origin << "," << embedder
|
| << " (proteced media identifier is not supported in popups)";
|
| - NotifyPermissionSet(id, origin, result_callback, false);
|
| + NotifyPermissionSet(id, requesting_frame_origin, embedder,
|
| + callback, false, false);
|
| return;
|
| }
|
|
|
| - content::RenderViewHost* rvh = web_contents->GetRenderViewHost();
|
| - DecidePermission(id, origin, embedder, rvh, result_callback);
|
| -}
|
| -
|
| -void ProtectedMediaIdentifierPermissionContext::
|
| - CancelProtectedMediaIdentifierPermissionRequests(
|
| - int render_process_id,
|
| - int render_view_id,
|
| - const GURL& origin) {
|
| - CancelPendingInfobarRequests(
|
| - render_process_id, render_view_id, origin);
|
| -}
|
| -
|
| -void ProtectedMediaIdentifierPermissionContext::DecidePermission(
|
| - const PermissionRequestID& id,
|
| - const GURL& origin,
|
| - const GURL& embedder,
|
| - content::RenderViewHost* rvh,
|
| - const base::Callback<void(bool)>& callback) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| -
|
| #if defined(OS_ANDROID)
|
| // Check if the protected media identifier master switch is disabled.
|
| if (!profile()->GetPrefs()->GetBoolean(
|
| prefs::kProtectedMediaIdentifierEnabled)) {
|
| - PermissionDecided(id, origin, embedder, callback, false);
|
| + NotifyPermissionSet(id, requesting_frame_origin, embedder, callback,
|
| + false, false);
|
| return;
|
| }
|
| #endif
|
|
|
| - ContentSetting content_setting =
|
| - profile_->GetHostContentSettingsMap()->GetContentSetting(
|
| - origin,
|
| - embedder,
|
| - CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER,
|
| - std::string());
|
| - switch (content_setting) {
|
| - case CONTENT_SETTING_BLOCK:
|
| - PermissionDecided(id, origin, embedder, callback, false);
|
| - break;
|
| - case CONTENT_SETTING_ALLOW:
|
| - PermissionDecided(id, origin, embedder, callback, true);
|
| - break;
|
| - case CONTENT_SETTING_ASK:
|
| - QueueController()->CreateInfoBarRequest(
|
| - id,
|
| - origin,
|
| - embedder,
|
| - base::Bind(&ProtectedMediaIdentifierPermissionContext::
|
| - NotifyPermissionSet,
|
| - base::Unretained(this),
|
| - id,
|
| - origin,
|
| - callback));
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void ProtectedMediaIdentifierPermissionContext::ShutdownOnUIThread() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - permission_queue_controller_.reset();
|
| - shutting_down_ = true;
|
| + PermissionContextBase::RequestPermission(web_contents, id,
|
| + requesting_frame_origin,
|
| + user_gesture,
|
| + callback);
|
| }
|
|
|
| -void ProtectedMediaIdentifierPermissionContext::PermissionDecided(
|
| +void ProtectedMediaIdentifierPermissionContext::UpdateTabContext(
|
| const PermissionRequestID& id,
|
| - const GURL& origin,
|
| - const GURL& embedder,
|
| - const base::Callback<void(bool)>& callback,
|
| + const GURL& requesting_frame,
|
| bool allowed) {
|
| - NotifyPermissionSet(id, origin, callback, allowed);
|
| -}
|
| -
|
| -void ProtectedMediaIdentifierPermissionContext::NotifyPermissionSet(
|
| - const PermissionRequestID& id,
|
| - const GURL& origin,
|
| - const base::Callback<void(bool)>& callback,
|
| - bool allowed) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| // WebContents may have gone away.
|
| TabSpecificContentSettings* content_settings =
|
| @@ -170,49 +93,7 @@ void ProtectedMediaIdentifierPermissionContext::NotifyPermissionSet(
|
| id.render_view_id());
|
| if (content_settings) {
|
| content_settings->OnProtectedMediaIdentifierPermissionSet(
|
| - origin.GetOrigin(), allowed);
|
| + requesting_frame.GetOrigin(), allowed);
|
| }
|
|
|
| - callback.Run(allowed);
|
| -}
|
| -
|
| -PermissionQueueController*
|
| - ProtectedMediaIdentifierPermissionContext::QueueController() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - DCHECK(!shutting_down_);
|
| - if (!permission_queue_controller_)
|
| - permission_queue_controller_.reset(CreateQueueController());
|
| - return permission_queue_controller_.get();
|
| -}
|
| -
|
| -PermissionQueueController*
|
| - ProtectedMediaIdentifierPermissionContext::CreateQueueController() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - return new PermissionQueueController(
|
| - profile(), CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER);
|
| -}
|
| -
|
| -void
|
| -ProtectedMediaIdentifierPermissionContext::CancelPendingInfobarRequests(
|
| - int render_process_id,
|
| - int render_view_id,
|
| - const GURL& origin) {
|
| - if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ProtectedMediaIdentifierPermissionContext::
|
| - CancelPendingInfobarRequests,
|
| - this,
|
| - render_process_id,
|
| - render_view_id,
|
| - origin));
|
| - return;
|
| - }
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - if (shutting_down_)
|
| - return;
|
| - QueueController()->CancelInfoBarRequest(
|
| - PermissionRequestID(render_process_id, render_view_id, 0,
|
| - origin));
|
| }
|
|
|