| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/media/protected_media_identifier_permission_context.h" | 5 #include "chrome/browser/media/protected_media_identifier_permission_context.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 9 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "chromeos/settings/cros_settings_names.h" | 22 #include "chromeos/settings/cros_settings_names.h" |
| 23 #include "components/pref_registry/pref_registry_syncable.h" | 23 #include "components/pref_registry/pref_registry_syncable.h" |
| 24 #include "components/user_prefs/user_prefs.h" | 24 #include "components/user_prefs/user_prefs.h" |
| 25 #include "ui/views/widget/widget.h" | 25 #include "ui/views/widget/widget.h" |
| 26 #elif defined(OS_ANDROID) | 26 #elif defined(OS_ANDROID) |
| 27 #include "media/base/media_switches.h" | 27 #include "media/base/media_switches.h" |
| 28 #else | 28 #else |
| 29 #error This file currently only supports Chrome OS and Android. | 29 #error This file currently only supports Chrome OS and Android. |
| 30 #endif | 30 #endif |
| 31 | 31 |
| 32 #if defined(OS_CHROMEOS) |
| 33 using chromeos::attestation::PlatformVerificationDialog; |
| 34 #endif |
| 35 |
| 32 ProtectedMediaIdentifierPermissionContext:: | 36 ProtectedMediaIdentifierPermissionContext:: |
| 33 ProtectedMediaIdentifierPermissionContext(Profile* profile) | 37 ProtectedMediaIdentifierPermissionContext(Profile* profile) |
| 34 : PermissionContextBase(profile, | 38 : PermissionContextBase(profile, |
| 35 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) | 39 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) |
| 36 #if defined(OS_CHROMEOS) | 40 #if defined(OS_CHROMEOS) |
| 37 , | 41 , |
| 38 weak_factory_(this) | 42 weak_factory_(this) |
| 39 #endif | 43 #endif |
| 40 { | 44 { |
| 41 } | 45 } |
| 42 | 46 |
| 43 ProtectedMediaIdentifierPermissionContext:: | 47 ProtectedMediaIdentifierPermissionContext:: |
| 44 ~ProtectedMediaIdentifierPermissionContext() { | 48 ~ProtectedMediaIdentifierPermissionContext() { |
| 45 } | 49 } |
| 46 | 50 |
| 47 #if defined(OS_CHROMEOS) | |
| 48 using chromeos::attestation::PlatformVerificationDialog; | |
| 49 | |
| 50 // static | |
| 51 void ProtectedMediaIdentifierPermissionContext::RegisterProfilePrefs( | |
| 52 user_prefs::PrefRegistrySyncable* prefs) { | |
| 53 prefs->RegisterBooleanPref(prefs::kRAConsentGranted, | |
| 54 false, // Default value. | |
| 55 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | |
| 56 } | |
| 57 #endif | |
| 58 | |
| 59 void ProtectedMediaIdentifierPermissionContext::RequestPermission( | 51 void ProtectedMediaIdentifierPermissionContext::RequestPermission( |
| 60 content::WebContents* web_contents, | 52 content::WebContents* web_contents, |
| 61 const PermissionRequestID& id, | 53 const PermissionRequestID& id, |
| 62 const GURL& requesting_origin, | 54 const GURL& requesting_origin, |
| 63 bool user_gesture, | 55 bool user_gesture, |
| 64 const BrowserPermissionCallback& callback) { | 56 const BrowserPermissionCallback& callback) { |
| 65 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 57 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 66 | 58 |
| 67 GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); | 59 GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
| 68 | 60 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 !IsProtectedMediaIdentifierEnabled()) { | 112 !IsProtectedMediaIdentifierEnabled()) { |
| 121 return CONTENT_SETTING_BLOCK; | 113 return CONTENT_SETTING_BLOCK; |
| 122 } | 114 } |
| 123 | 115 |
| 124 ContentSetting content_setting = PermissionContextBase::GetPermissionStatus( | 116 ContentSetting content_setting = PermissionContextBase::GetPermissionStatus( |
| 125 requesting_origin, embedding_origin); | 117 requesting_origin, embedding_origin); |
| 126 DCHECK(content_setting == CONTENT_SETTING_ALLOW || | 118 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
| 127 content_setting == CONTENT_SETTING_BLOCK || | 119 content_setting == CONTENT_SETTING_BLOCK || |
| 128 content_setting == CONTENT_SETTING_ASK); | 120 content_setting == CONTENT_SETTING_ASK); |
| 129 | 121 |
| 130 #if defined(OS_CHROMEOS) | 122 #if defined(OS_ANDROID) |
| 131 // Check kRAConsentGranted here because it's possible that user dismissed | |
| 132 // the dialog triggered by RequestPermission() and the content setting is | |
| 133 // set to "allow" by server sync. In this case, we should still "ask". | |
| 134 if (content_setting == CONTENT_SETTING_ALLOW && | |
| 135 !profile()->GetPrefs()->GetBoolean(prefs::kRAConsentGranted)) { | |
| 136 content_setting = CONTENT_SETTING_ASK; | |
| 137 } | |
| 138 #elif defined(OS_ANDROID) | |
| 139 // When kDisableInfobarForProtectedMediaIdentifier is enabled, do not "ask" | 123 // When kDisableInfobarForProtectedMediaIdentifier is enabled, do not "ask" |
| 140 // the user and always "allow". | 124 // the user and always "allow". |
| 141 if (content_setting == CONTENT_SETTING_ASK && | 125 if (content_setting == CONTENT_SETTING_ASK && |
| 142 base::CommandLine::ForCurrentProcess()->HasSwitch( | 126 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 143 switches::kDisableInfobarForProtectedMediaIdentifier)) { | 127 switches::kDisableInfobarForProtectedMediaIdentifier)) { |
| 144 content_setting = CONTENT_SETTING_ALLOW; | 128 content_setting = CONTENT_SETTING_ALLOW; |
| 145 } | 129 } |
| 146 #endif | 130 #endif |
| 147 | 131 |
| 148 return content_setting; | 132 return content_setting; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 DVLOG(1) << "Protected media identifier disabled by the user or by device " | 198 DVLOG(1) << "Protected media identifier disabled by the user or by device " |
| 215 "policy."; | 199 "policy."; |
| 216 return false; | 200 return false; |
| 217 } | 201 } |
| 218 #endif | 202 #endif |
| 219 | 203 |
| 220 return true; | 204 return true; |
| 221 } | 205 } |
| 222 | 206 |
| 223 #if defined(OS_CHROMEOS) | 207 #if defined(OS_CHROMEOS) |
| 224 static void RecordRAConsentGranted(content::WebContents* web_contents) { | |
| 225 PrefService* pref_service = | |
| 226 user_prefs::UserPrefs::Get(web_contents->GetBrowserContext()); | |
| 227 if (!pref_service) { | |
| 228 LOG(ERROR) << "Failed to get user prefs."; | |
| 229 return; | |
| 230 } | |
| 231 pref_service->SetBoolean(prefs::kRAConsentGranted, true); | |
| 232 } | |
| 233 | |
| 234 void ProtectedMediaIdentifierPermissionContext:: | 208 void ProtectedMediaIdentifierPermissionContext:: |
| 235 OnPlatformVerificationConsentResponse( | 209 OnPlatformVerificationConsentResponse( |
| 236 content::WebContents* web_contents, | 210 content::WebContents* web_contents, |
| 237 const PermissionRequestID& id, | 211 const PermissionRequestID& id, |
| 238 const GURL& requesting_origin, | 212 const GURL& requesting_origin, |
| 239 const GURL& embedding_origin, | 213 const GURL& embedding_origin, |
| 240 const BrowserPermissionCallback& callback, | 214 const BrowserPermissionCallback& callback, |
| 241 PlatformVerificationDialog::ConsentResponse response) { | 215 PlatformVerificationDialog::ConsentResponse response) { |
| 242 // The request may have been canceled. Drop the callback in that case. | 216 // The request may have been canceled. Drop the callback in that case. |
| 243 PendingRequestMap::iterator request = pending_requests_.find(web_contents); | 217 PendingRequestMap::iterator request = pending_requests_.find(web_contents); |
| 244 if (request == pending_requests_.end()) | 218 if (request == pending_requests_.end()) |
| 245 return; | 219 return; |
| 246 | 220 |
| 247 DCHECK(request->second.second.Equals(id)); | 221 DCHECK(request->second.second.Equals(id)); |
| 248 pending_requests_.erase(request); | 222 pending_requests_.erase(request); |
| 249 | 223 |
| 250 ContentSetting content_setting = CONTENT_SETTING_ASK; | 224 ContentSetting content_setting = CONTENT_SETTING_ASK; |
| 251 bool persist = false; // Whether the ContentSetting should be saved. | 225 bool persist = false; // Whether the ContentSetting should be saved. |
| 252 switch (response) { | 226 switch (response) { |
| 253 case PlatformVerificationDialog::CONSENT_RESPONSE_NONE: | 227 case PlatformVerificationDialog::CONSENT_RESPONSE_NONE: |
| 254 content_setting = CONTENT_SETTING_ASK; | 228 content_setting = CONTENT_SETTING_ASK; |
| 255 persist = false; | 229 persist = false; |
| 256 break; | 230 break; |
| 257 case PlatformVerificationDialog::CONSENT_RESPONSE_ALLOW: | 231 case PlatformVerificationDialog::CONSENT_RESPONSE_ALLOW: |
| 258 VLOG(1) << "Platform verification accepted by user."; | 232 VLOG(1) << "Platform verification accepted by user."; |
| 259 content::RecordAction( | 233 content::RecordAction( |
| 260 base::UserMetricsAction("PlatformVerificationAccepted")); | 234 base::UserMetricsAction("PlatformVerificationAccepted")); |
| 261 RecordRAConsentGranted(web_contents); | |
| 262 content_setting = CONTENT_SETTING_ALLOW; | 235 content_setting = CONTENT_SETTING_ALLOW; |
| 263 persist = true; | 236 persist = true; |
| 264 break; | 237 break; |
| 265 case PlatformVerificationDialog::CONSENT_RESPONSE_DENY: | 238 case PlatformVerificationDialog::CONSENT_RESPONSE_DENY: |
| 266 VLOG(1) << "Platform verification denied by user."; | 239 VLOG(1) << "Platform verification denied by user."; |
| 267 content::RecordAction( | 240 content::RecordAction( |
| 268 base::UserMetricsAction("PlatformVerificationRejected")); | 241 base::UserMetricsAction("PlatformVerificationRejected")); |
| 269 content_setting = CONTENT_SETTING_BLOCK; | 242 content_setting = CONTENT_SETTING_BLOCK; |
| 270 persist = true; | 243 persist = true; |
| 271 break; | 244 break; |
| 272 } | 245 } |
| 273 | 246 |
| 274 NotifyPermissionSet( | 247 NotifyPermissionSet( |
| 275 id, requesting_origin, embedding_origin, callback, | 248 id, requesting_origin, embedding_origin, callback, |
| 276 persist, content_setting); | 249 persist, content_setting); |
| 277 } | 250 } |
| 278 #endif | 251 #endif |
| OLD | NEW |