| Index: chrome/browser/permissions/permission_context_base.cc
|
| diff --git a/chrome/browser/permissions/permission_context_base.cc b/chrome/browser/permissions/permission_context_base.cc
|
| index 761b489994bc1507925059216dd6746781d0402b..9367f916e36b9187b62e1ca90669e045e7e1ea1f 100644
|
| --- a/chrome/browser/permissions/permission_context_base.cc
|
| +++ b/chrome/browser/permissions/permission_context_base.cc
|
| @@ -9,10 +9,12 @@
|
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
|
| #include "chrome/browser/permissions/permission_context_uma_util.h"
|
| #include "chrome/browser/permissions/permission_request_id.h"
|
| +#include "chrome/browser/permissions/permission_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "components/content_settings/core/browser/host_content_settings_map.h"
|
| #include "components/content_settings/core/browser/website_settings_registry.h"
|
| +#include "components/variations/variations_associated_data.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/origin_util.h"
|
| @@ -24,6 +26,13 @@
|
| #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
|
| #endif
|
|
|
| +// static
|
| +const char PermissionContextBase::kPermissionsKillSwitchFieldStudy[] =
|
| + "PermissionsKillSwitch";
|
| +// static
|
| +const char PermissionContextBase::kPermissionsKillSwitchBlockedValue[] =
|
| + "blocked";
|
| +
|
| PermissionContextBase::PermissionContextBase(
|
| Profile* profile,
|
| const ContentSettingsType permission_type)
|
| @@ -48,6 +57,15 @@ void PermissionContextBase::RequestPermission(
|
| const BrowserPermissionCallback& callback) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| + // First check if this permission has been disabled.
|
| + if (IsPermissionKillSwitchOn()) {
|
| + // The kill switch is enabled for this permission; Block all requests.
|
| + NotifyPermissionSet(id, requesting_frame.GetOrigin(),
|
| + web_contents->GetLastCommittedURL().GetOrigin(), callback,
|
| + false /* persist */, CONTENT_SETTING_BLOCK);
|
| + return;
|
| + }
|
| +
|
| DecidePermission(web_contents,
|
| id,
|
| requesting_frame.GetOrigin(),
|
| @@ -59,6 +77,11 @@ void PermissionContextBase::RequestPermission(
|
| ContentSetting PermissionContextBase::GetPermissionStatus(
|
| const GURL& requesting_origin,
|
| const GURL& embedding_origin) const {
|
| +
|
| + // If the permission has been disabled through Finch, block all requests.
|
| + if (IsPermissionKillSwitchOn())
|
| + return CONTENT_SETTING_BLOCK;
|
| +
|
| if (IsRestrictedToSecureOrigins() &&
|
| !content::IsOriginSecure(requesting_origin)) {
|
| return CONTENT_SETTING_BLOCK;
|
| @@ -262,3 +285,11 @@ void PermissionContextBase::UpdateContentSetting(
|
| ContentSettingsPattern::FromURLNoWildcard(embedding_origin),
|
| permission_type_, std::string(), content_setting);
|
| }
|
| +
|
| +bool PermissionContextBase::IsPermissionKillSwitchOn() const {
|
| + const std::string param =
|
| + variations::GetVariationParamValue(kPermissionsKillSwitchFieldStudy,
|
| + PermissionUtil::GetPermissionString(permission_type_));
|
| +
|
| + return param == kPermissionsKillSwitchBlockedValue;
|
| +}
|
|
|