Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: chrome/browser/permissions/permission_manager.cc

Issue 2579593002: Change MediaPermission not to use PermissionContext directly (Closed)
Patch Set: Just PM Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/permissions/permission_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 ContentSetting GetContentSettingForConstantPermission(PermissionType type) { 149 ContentSetting GetContentSettingForConstantPermission(PermissionType type) {
150 DCHECK(IsConstantPermission(type)); 150 DCHECK(IsConstantPermission(type));
151 switch (type) { 151 switch (type) {
152 case PermissionType::MIDI: 152 case PermissionType::MIDI:
153 return CONTENT_SETTING_ALLOW; 153 return CONTENT_SETTING_ALLOW;
154 default: 154 default:
155 return CONTENT_SETTING_DEFAULT; 155 return CONTENT_SETTING_DEFAULT;
156 } 156 }
157 } 157 }
158 158
159 PermissionStatus GetPermissionStatusForConstantPermission(PermissionType type) {
160 return ContentSettingToPermissionStatus(
161 GetContentSettingForConstantPermission(type));
162 }
163
164 } // anonymous namespace 159 } // anonymous namespace
165 160
166 class PermissionManager::PendingRequest { 161 class PermissionManager::PendingRequest {
167 public: 162 public:
168 PendingRequest(content::RenderFrameHost* render_frame_host, 163 PendingRequest(content::RenderFrameHost* render_frame_host,
169 const std::vector<PermissionType> permissions, 164 const std::vector<PermissionType> permissions,
170 const base::Callback< 165 const base::Callback<
171 void(const std::vector<PermissionStatus>&)>& callback) 166 void(const std::vector<PermissionStatus>&)>& callback)
172 : render_process_id_(render_frame_host->GetProcess()->GetID()), 167 : render_process_id_(render_frame_host->GetProcess()->GetID()),
173 render_frame_id_(render_frame_host->GetRoutingID()), 168 render_frame_id_(render_frame_host->GetRoutingID()),
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 382
388 context->ResetPermission(requesting_origin.GetOrigin(), 383 context->ResetPermission(requesting_origin.GetOrigin(),
389 embedding_origin.GetOrigin()); 384 embedding_origin.GetOrigin());
390 } 385 }
391 386
392 PermissionStatus PermissionManager::GetPermissionStatus( 387 PermissionStatus PermissionManager::GetPermissionStatus(
393 PermissionType permission, 388 PermissionType permission,
394 const GURL& requesting_origin, 389 const GURL& requesting_origin,
395 const GURL& embedding_origin) { 390 const GURL& embedding_origin) {
396 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 391 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
397 if (IsConstantPermission(permission)) 392 return ContentSettingToPermissionStatus(GetPermissionStatusInternal(
398 return GetPermissionStatusForConstantPermission(permission); 393 permission, requesting_origin, embedding_origin));
399
400 PermissionContextBase* context = GetPermissionContext(permission);
401 if (!context)
402 return PermissionStatus::DENIED;
403
404 return ContentSettingToPermissionStatus(context->GetPermissionStatus(
405 requesting_origin.GetOrigin(), embedding_origin.GetOrigin()));
406 } 394 }
407 395
408 void PermissionManager::RegisterPermissionUsage(PermissionType permission, 396 void PermissionManager::RegisterPermissionUsage(PermissionType permission,
409 const GURL& requesting_origin, 397 const GURL& requesting_origin,
410 const GURL& embedding_origin) { 398 const GURL& embedding_origin) {
411 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 399 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
412 // This is required because constant permissions don't have a 400 // This is required because constant permissions don't have a
413 // ContentSettingsType. 401 // ContentSettingsType.
414 if (IsConstantPermission(permission)) 402 if (IsConstantPermission(permission))
415 return; 403 return;
(...skipping 12 matching lines...) Expand all
428 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 416 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
429 if (subscriptions_.IsEmpty()) 417 if (subscriptions_.IsEmpty())
430 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); 418 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this);
431 419
432 auto subscription = base::MakeUnique<Subscription>(); 420 auto subscription = base::MakeUnique<Subscription>();
433 subscription->permission = permission; 421 subscription->permission = permission;
434 subscription->requesting_origin = requesting_origin; 422 subscription->requesting_origin = requesting_origin;
435 subscription->embedding_origin = embedding_origin; 423 subscription->embedding_origin = embedding_origin;
436 subscription->callback = callback; 424 subscription->callback = callback;
437 425
438 if (IsConstantPermission(permission)) { 426 subscription->current_value = GetPermissionStatusInternal(
439 subscription->current_value = GetContentSettingForConstantPermission( 427 permission, requesting_origin, embedding_origin);
440 permission);
441 } else {
442 subscription->current_value =
443 GetPermissionContext(permission)
444 ->GetPermissionStatus(subscription->requesting_origin,
445 subscription->embedding_origin);
446 }
447 428
448 return subscriptions_.Add(std::move(subscription)); 429 return subscriptions_.Add(std::move(subscription));
449 } 430 }
450 431
451 void PermissionManager::UnsubscribePermissionStatusChange(int subscription_id) { 432 void PermissionManager::UnsubscribePermissionStatusChange(int subscription_id) {
452 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 433 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
453 // Whether |subscription_id| is known will be checked by the Remove() call. 434 // Whether |subscription_id| is known will be checked by the Remove() call.
454 subscriptions_.Remove(subscription_id); 435 subscriptions_.Remove(subscription_id);
455 436
456 if (subscriptions_.IsEmpty()) 437 if (subscriptions_.IsEmpty())
457 HostContentSettingsMapFactory::GetForProfile(profile_) 438 HostContentSettingsMapFactory::GetForProfile(profile_)
458 ->RemoveObserver(this); 439 ->RemoveObserver(this);
459 } 440 }
460 441
442 bool PermissionManager::IsPermissionKillSwitchOn(
443 content::PermissionType permission) {
444 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
445 return GetPermissionContext(permission)->IsPermissionKillSwitchOn();
446 }
447
461 void PermissionManager::OnContentSettingChanged( 448 void PermissionManager::OnContentSettingChanged(
462 const ContentSettingsPattern& primary_pattern, 449 const ContentSettingsPattern& primary_pattern,
463 const ContentSettingsPattern& secondary_pattern, 450 const ContentSettingsPattern& secondary_pattern,
464 ContentSettingsType content_type, 451 ContentSettingsType content_type,
465 std::string resource_identifier) { 452 std::string resource_identifier) {
466 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 453 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
467 std::list<base::Closure> callbacks; 454 std::list<base::Closure> callbacks;
468 455
469 for (SubscriptionsMap::iterator iter(&subscriptions_); 456 for (SubscriptionsMap::iterator iter(&subscriptions_);
470 !iter.IsAtEnd(); iter.Advance()) { 457 !iter.IsAtEnd(); iter.Advance()) {
471 Subscription* subscription = iter.GetCurrentValue(); 458 Subscription* subscription = iter.GetCurrentValue();
472 if (IsConstantPermission(subscription->permission)) 459 if (IsConstantPermission(subscription->permission))
473 continue; 460 continue;
474 if (PermissionTypeToContentSetting(subscription->permission) != 461 if (PermissionTypeToContentSetting(subscription->permission) !=
475 content_type) { 462 content_type) {
476 continue; 463 continue;
477 } 464 }
478 465
479 if (primary_pattern.IsValid() && 466 if (primary_pattern.IsValid() &&
480 !primary_pattern.Matches(subscription->requesting_origin)) 467 !primary_pattern.Matches(subscription->requesting_origin))
481 continue; 468 continue;
482 if (secondary_pattern.IsValid() && 469 if (secondary_pattern.IsValid() &&
483 !secondary_pattern.Matches(subscription->embedding_origin)) 470 !secondary_pattern.Matches(subscription->embedding_origin))
484 continue; 471 continue;
485 472
486 ContentSetting new_value = 473 ContentSetting new_value = GetPermissionStatusInternal(
487 GetPermissionContext(subscription->permission) 474 subscription->permission, subscription->requesting_origin,
488 ->GetPermissionStatus(subscription->requesting_origin, 475 subscription->embedding_origin);
489 subscription->embedding_origin);
490 if (subscription->current_value == new_value) 476 if (subscription->current_value == new_value)
491 continue; 477 continue;
492 478
493 subscription->current_value = new_value; 479 subscription->current_value = new_value;
494 480
495 // Add the callback to |callbacks| which will be run after the loop to 481 // Add the callback to |callbacks| which will be run after the loop to
496 // prevent re-entrance issues. 482 // prevent re-entrance issues.
497 callbacks.push_back( 483 callbacks.push_back(
498 base::Bind(subscription->callback, 484 base::Bind(subscription->callback,
499 ContentSettingToPermissionStatus(new_value))); 485 ContentSettingToPermissionStatus(new_value)));
500 } 486 }
501 487
502 for (const auto& callback : callbacks) 488 for (const auto& callback : callbacks)
503 callback.Run(); 489 callback.Run();
504 } 490 }
491
492 ContentSetting PermissionManager::GetPermissionStatusInternal(
493 PermissionType permission,
494 const GURL& requesting_origin,
495 const GURL& embedding_origin) {
496 if (IsConstantPermission(permission))
497 return GetContentSettingForConstantPermission(permission);
498
499 PermissionContextBase* context = GetPermissionContext(permission);
500 return context->GetPermissionStatus(requesting_origin.GetOrigin(),
501 embedding_origin.GetOrigin());
502 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/permission_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698