From 78e0ae42932363c468cf59b4f752b42fa335cfa3 Mon Sep 17 00:00:00 2001 From: bridiver Date: Fri, 26 Jul 2019 10:54:00 -0700 Subject: [PATCH 1/2] consolidate shields logic fix https://github.com/brave/brave-browser/issues/5416 --- browser/extensions/api/brave_shields_api.cc | 407 +++--- browser/extensions/api/brave_shields_api.h | 128 +- .../api/brave_shields_api_browsertest.cc | 232 +--- .../default_brave_shields_page.js | 4 +- browser/ui/BUILD.gn | 1 + .../settings/default_brave_shields_handler.cc | 134 +- common/extensions/api/brave_shields.json | 325 +++-- .../extension/brave_extension/background.ts | 6 +- .../background/api/shieldsAPI.ts | 137 +- .../constants/resourceIdentifiers.ts | 11 - .../brave_extension/helpers/urlUtils.ts | 6 - .../types/constants/resourceIdentifiers.ts | 15 - .../browser/brave_shields_util.cc | 273 +++- .../browser/brave_shields_util.h | 34 + .../browser/brave_shields_util_unittest.cc | 1197 +++++++++++++++++ components/definitions/chromel.d.ts | 14 +- .../background/api/shieldsAPI_test.ts | 286 +--- .../brave_extension/helpers/urlUtils_test.ts | 12 - components/test/testData.ts | 52 +- test/BUILD.gn | 1 + 20 files changed, 2236 insertions(+), 1039 deletions(-) delete mode 100644 components/brave_extension/extension/brave_extension/constants/resourceIdentifiers.ts delete mode 100644 components/brave_extension/extension/brave_extension/types/constants/resourceIdentifiers.ts create mode 100644 components/brave_shields/browser/brave_shields_util_unittest.cc diff --git a/browser/extensions/api/brave_shields_api.cc b/browser/extensions/api/brave_shields_api.cc index 91f6345d9d4..4b06be89fa7 100644 --- a/browser/extensions/api/brave_shields_api.cc +++ b/browser/extensions/api/brave_shields_api.cc @@ -12,52 +12,29 @@ #include "base/strings/string_number_conversions.h" #include "brave/common/extensions/api/brave_shields.h" #include "brave/common/extensions/extension_constants.h" +#include "brave/components/brave_shields/browser/brave_shields_util.h" #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/extensions/api/content_settings/content_settings_api_constants.h" -#include "chrome/browser/extensions/api/content_settings/content_settings_helpers.h" -#include "chrome/browser/extensions/api/content_settings/content_settings_service.h" -#include "chrome/browser/extensions/api/content_settings/content_settings_store.h" -#include "chrome/browser/extensions/api/preference/preference_api_constants.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/profiles/profile.h" -#include "components/content_settings/core/browser/content_settings_registry.h" -#include "components/content_settings/core/browser/content_settings_utils.h" -#include "components/content_settings/core/browser/host_content_settings_map.h" #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_util.h" using brave_shields::BraveShieldsWebContentsObserver; +using brave_shields::ControlType; +using brave_shields::ControlTypeFromString; +using brave_shields::ControlTypeToString; -namespace Get = extensions::api::brave_shields::ContentSetting::Get; -namespace Set = extensions::api::brave_shields::ContentSetting::Set; -namespace pref_keys = extensions::preference_api_constants; +namespace extensions { +namespace api { namespace { -bool RemoveContentType(base::ListValue* args, - ContentSettingsType* content_type) { - std::string content_type_str; - if (!args->GetString(0, &content_type_str)) - return false; - // We remove the ContentSettingsType parameter since this is added by the - // renderer, and is not part of the JSON schema. - args->Remove(0, nullptr); - *content_type = - extensions::content_settings_helpers::StringToContentSettingsType( - content_type_str); - return *content_type != CONTENT_SETTINGS_TYPE_DEFAULT; -} +const char kInvalidUrlError[] = "Invalid URL."; +const char kInvalidControlTypeError[] = "Invalid ControlType."; } // namespace -namespace extensions { -namespace api { - -BraveShieldsAllowScriptsOnceFunction::~BraveShieldsAllowScriptsOnceFunction() { -} - ExtensionFunction::ResponseAction BraveShieldsAllowScriptsOnceFunction::Run() { std::unique_ptr params( brave_shields::AllowScriptsOnce::Params::Create(*args_)); @@ -66,201 +43,267 @@ ExtensionFunction::ResponseAction BraveShieldsAllowScriptsOnceFunction::Run() { // Get web contents for this tab content::WebContents* contents = nullptr; if (!ExtensionTabUtil::GetTabById( - params->tab_id, - Profile::FromBrowserContext(browser_context()), - include_incognito_information(), - nullptr, - nullptr, - &contents, - nullptr)) { + params->tab_id, Profile::FromBrowserContext(browser_context()), + include_incognito_information(), nullptr, nullptr, &contents, + nullptr)) { return RespondNow(Error(tabs_constants::kTabNotFoundError, base::NumberToString(params->tab_id))); } - BraveShieldsWebContentsObserver::FromWebContents( - contents)->AllowScriptsOnce(params->origins, contents); + BraveShieldsWebContentsObserver::FromWebContents(contents)->AllowScriptsOnce( + params->origins, contents); return RespondNow(NoArguments()); } ExtensionFunction::ResponseAction -BraveShieldsContentSettingGetFunction::Run() { - ContentSettingsType content_type; - EXTENSION_FUNCTION_VALIDATE(RemoveContentType(args_.get(), &content_type)); +BraveShieldsSetBraveShieldsControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetBraveShieldsControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } + + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); + } + + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetBraveShieldsControlType(profile, control_type, url); + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction +BraveShieldsGetBraveShieldsControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetBraveShieldsControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } + + Profile* profile = Profile::FromBrowserContext(browser_context()); + auto type = ::brave_shields::GetBraveShieldsControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); - std::unique_ptr params(Get::Params::Create(*args_)); + return RespondNow(OneArgument(std::move(result))); +} + +ExtensionFunction::ResponseAction BraveShieldsSetAdControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetAdControlType::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); - GURL primary_url(params->details.primary_url); - if (!primary_url.is_valid()) { - return RespondNow(Error(content_settings_api_constants::kInvalidUrlError, - params->details.primary_url)); + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); } - GURL secondary_url(primary_url); - if (params->details.secondary_url.get()) { - secondary_url = GURL(*params->details.secondary_url); - if (!secondary_url.is_valid()) { - return RespondNow(Error(content_settings_api_constants::kInvalidUrlError, - *params->details.secondary_url)); - } + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); } - std::string resource_identifier; - if (params->details.resource_identifier.get()) - resource_identifier = params->details.resource_identifier->id; + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetAdControlType(profile, control_type, url); - bool incognito = false; - if (params->details.incognito.get()) - incognito = *params->details.incognito; - if (incognito && !include_incognito_information()) - return RespondNow(Error(pref_keys::kIncognitoErrorMessage)); + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction BraveShieldsGetAdControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetAdControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } - HostContentSettingsMap* map; Profile* profile = Profile::FromBrowserContext(browser_context()); - if (incognito) { - if (!profile->HasOffTheRecordProfile()) { - // TODO(bauerb): Allow reading incognito content settings - // outside of an incognito session. - return RespondNow( - Error(content_settings_api_constants::kIncognitoSessionOnlyError)); - } - map = HostContentSettingsMapFactory::GetForProfile( - profile->GetOffTheRecordProfile()); - } else { - map = HostContentSettingsMapFactory::GetForProfile(profile); + auto type = ::brave_shields::GetAdControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); + + return RespondNow(OneArgument(std::move(result))); +} + +ExtensionFunction::ResponseAction +BraveShieldsSetCookieControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetCookieControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } + + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); } - ContentSetting setting = map->GetContentSetting( - primary_url, secondary_url, content_type, resource_identifier); + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetCookieControlType(profile, control_type, url); + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction +BraveShieldsGetCookieControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetCookieControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } - std::unique_ptr result(new base::DictionaryValue()); - std::string setting_string = - content_settings::ContentSettingToString(setting); - DCHECK(!setting_string.empty()); - result->SetString(content_settings_api_constants::kContentSettingKey, - setting_string); + Profile* profile = Profile::FromBrowserContext(browser_context()); + auto type = ::brave_shields::GetCookieControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); return RespondNow(OneArgument(std::move(result))); } ExtensionFunction::ResponseAction -BraveShieldsContentSettingSetFunction::Run() { - ContentSettingsType content_type; - EXTENSION_FUNCTION_VALIDATE(RemoveContentType(args_.get(), &content_type)); +BraveShieldsSetFingerprintingControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetFingerprintingControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } - std::unique_ptr params(Set::Params::Create(*args_)); + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); + } + + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetFingerprintingControlType(profile, control_type, url); + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction +BraveShieldsGetFingerprintingControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetFingerprintingControlType::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); - std::string resource_identifier; - if (params->details.resource_identifier.get()) - resource_identifier = params->details.resource_identifier->id; - - std::string setting_str; - EXTENSION_FUNCTION_VALIDATE( - params->details.setting->GetAsString(&setting_str)); - ContentSetting setting; - EXTENSION_FUNCTION_VALIDATE( - content_settings::ContentSettingFromString(setting_str, &setting)); - EXTENSION_FUNCTION_VALIDATE(CONTENT_SETTING_DEFAULT != setting); - EXTENSION_FUNCTION_VALIDATE( - content_settings::ContentSettingsRegistry::GetInstance() - ->Get(content_type) - ->IsSettingValid(setting)); - - std::string primary_error; - ContentSettingsPattern primary_pattern = - content_settings_helpers::ParseExtensionPattern( - params->details.primary_pattern, &primary_error); - if (!primary_pattern.IsValid()) - return RespondNow(Error(primary_error)); - ContentSettingsPattern secondary_pattern = - ContentSettingsPattern::Wildcard(); - if (params->details.secondary_pattern.get()) { - std::string secondary_error; - secondary_pattern = content_settings_helpers::ParseExtensionPattern( - *params->details.secondary_pattern, &secondary_error); - if (!secondary_pattern.IsValid()) - return RespondNow(Error(secondary_error)); + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); } - ExtensionPrefsScope scope = kExtensionPrefsScopeRegular; - bool incognito = false; - if (params->details.scope == - brave_shields::SCOPE_INCOGNITO_SESSION_ONLY) { - scope = kExtensionPrefsScopeIncognitoSessionOnly; - incognito = true; + Profile* profile = Profile::FromBrowserContext(browser_context()); + auto type = ::brave_shields::GetFingerprintingControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); + + return RespondNow(OneArgument(std::move(result))); +} + +ExtensionFunction::ResponseAction +BraveShieldsSetHTTPSEverywhereControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetHTTPSEverywhereControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); } - if (incognito) { - // Regular profiles can't access incognito unless the extension is allowed - // to run in incognito contexts. - if (!browser_context()->IsOffTheRecord() && - !extensions::util::IsIncognitoEnabled(brave_extension_id, - browser_context())) { - return RespondNow(Error(pref_keys::kIncognitoErrorMessage)); - } - } else { - // Incognito profiles can't access regular mode ever, they only exist in - // split mode. - if (browser_context()->IsOffTheRecord()) - return RespondNow( - Error(content_settings_api_constants::kIncognitoContextError)); + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); } - if (scope == kExtensionPrefsScopeIncognitoSessionOnly && - !Profile::FromBrowserContext(browser_context()) - ->HasOffTheRecordProfile()) { - return RespondNow(Error(pref_keys::kIncognitoSessionOnlyErrorMessage)); + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetHTTPSEverywhereControlType(profile, control_type, url); + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction +BraveShieldsGetHTTPSEverywhereControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetHTTPSEverywhereControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); } - HostContentSettingsMap* map; Profile* profile = Profile::FromBrowserContext(browser_context()); - if (incognito) { - if (!profile->HasOffTheRecordProfile()) { - // TODO(bauerb): Allow reading incognito content settings - // outside of an incognito session. - return RespondNow( - Error(content_settings_api_constants::kIncognitoSessionOnlyError)); - } - map = HostContentSettingsMapFactory::GetForProfile( - profile->GetOffTheRecordProfile()); - } else { - map = HostContentSettingsMapFactory::GetForProfile(profile); + auto type = ::brave_shields::GetHTTPSEverywhereControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); + + return RespondNow(OneArgument(std::move(result))); +} + +ExtensionFunction::ResponseAction +BraveShieldsSetNoScriptControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::SetNoScriptControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow setting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); } - if (content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT) { - // TODO(simonhong): Need to check why generating pattern with - // content_settings_helpers::ParseExtensionPattern() causes javascript - // set fail. - // Without this separate handling, shields can't toggle block script setting - // anymore after user changes js permission from page info bubble. - // page info bubble uses SetNarrowestContentSetting() for setting and it - // gets pattern by using GetPatternsForContentSettingsType() same as - // SetContentSettingDefaultScope(). - const GURL primary_url(params->details.primary_pattern); - if (!primary_url.is_valid()) - return RespondNow(Error("Invalid url")); - - map->SetContentSettingDefaultScope( - primary_url, primary_url, content_type, resource_identifier, setting); - } else { - map->SetContentSettingCustomScope( - primary_pattern, secondary_pattern, - content_type, resource_identifier, setting); + auto control_type = ControlTypeFromString(params->control_type); + if (control_type == ControlType::INVALID) { + return RespondNow(Error(kInvalidControlTypeError, params->control_type)); } - // Delete previous settings set by brave extension in extension's - // ContentSettingsStore. Setting default means delete. - scoped_refptr store = - ContentSettingsService::Get(browser_context())->content_settings_store(); - store->SetExtensionContentSetting(brave_extension_id, - primary_pattern, secondary_pattern, - content_type, - resource_identifier, - CONTENT_SETTING_DEFAULT, - scope); + Profile* profile = Profile::FromBrowserContext(browser_context()); + ::brave_shields::SetNoScriptControlType(profile, control_type, url); + return RespondNow(NoArguments()); } +ExtensionFunction::ResponseAction +BraveShieldsGetNoScriptControlTypeFunction::Run() { + std::unique_ptr params( + brave_shields::GetNoScriptControlType::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + const GURL url(params->url); + // we don't allow getting defaults from the extension + if (url.is_empty() || !url.is_valid()) { + return RespondNow(Error(kInvalidUrlError, params->url)); + } + + Profile* profile = Profile::FromBrowserContext(browser_context()); + auto type = ::brave_shields::GetNoScriptControlType(profile, url); + auto result = std::make_unique(ControlTypeToString(type)); + + return RespondNow(OneArgument(std::move(result))); +} + } // namespace api } // namespace extensions diff --git a/browser/extensions/api/brave_shields_api.h b/browser/extensions/api/brave_shields_api.h index f758036ee3c..509ca0ac304 100644 --- a/browser/extensions/api/brave_shields_api.h +++ b/browser/extensions/api/brave_shields_api.h @@ -16,32 +16,142 @@ class BraveShieldsAllowScriptsOnceFunction : public UIThreadExtensionFunction { DECLARE_EXTENSION_FUNCTION("braveShields.allowScriptsOnce", UNKNOWN) protected: - ~BraveShieldsAllowScriptsOnceFunction() override; + ~BraveShieldsAllowScriptsOnceFunction() override {} ResponseAction Run() override; }; -class BraveShieldsContentSettingGetFunction +class BraveShieldsSetBraveShieldsControlTypeFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.get", UNKNOWN) + DECLARE_EXTENSION_FUNCTION("braveShields.setBraveShieldsControlType", UNKNOWN) protected: - ~BraveShieldsContentSettingGetFunction() override {} + ~BraveShieldsSetBraveShieldsControlTypeFunction() override {} - // ExtensionFunction: ResponseAction Run() override; }; -class BraveShieldsContentSettingSetFunction +class BraveShieldsGetBraveShieldsControlTypeFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.set", UNKNOWN) + DECLARE_EXTENSION_FUNCTION("braveShields.getBraveShieldsControlType", UNKNOWN) protected: - ~BraveShieldsContentSettingSetFunction() override {} + ~BraveShieldsGetBraveShieldsControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsSetAdControlTypeFunction : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.setAdControlType", UNKNOWN) + + protected: + ~BraveShieldsSetAdControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsGetAdControlTypeFunction : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.getAdControlType", UNKNOWN) + + protected: + ~BraveShieldsGetAdControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsSetCookieControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.setCookieControlType", UNKNOWN) + + protected: + ~BraveShieldsSetCookieControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsGetCookieControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.getCookieControlType", UNKNOWN) + + protected: + ~BraveShieldsGetCookieControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsSetFingerprintingControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.setFingerprintingControlType", + UNKNOWN) + + protected: + ~BraveShieldsSetFingerprintingControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsGetFingerprintingControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.getFingerprintingControlType", + UNKNOWN) + + protected: + ~BraveShieldsGetFingerprintingControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsSetHTTPSEverywhereControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.setHTTPSEverywhereControlType", + UNKNOWN) + + protected: + ~BraveShieldsSetHTTPSEverywhereControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsGetHTTPSEverywhereControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.getHTTPSEverywhereControlType", + UNKNOWN) + + protected: + ~BraveShieldsGetHTTPSEverywhereControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsSetNoScriptControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.setNoScriptControlType", UNKNOWN) + + protected: + ~BraveShieldsSetNoScriptControlTypeFunction() override {} + + ResponseAction Run() override; +}; + +class BraveShieldsGetNoScriptControlTypeFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("braveShields.getNoScriptControlType", UNKNOWN) + + protected: + ~BraveShieldsGetNoScriptControlTypeFunction() override {} - // ExtensionFunction: ResponseAction Run() override; }; diff --git a/browser/extensions/api/brave_shields_api_browsertest.cc b/browser/extensions/api/brave_shields_api_browsertest.cc index 645bc7ffde9..7f56737a5a7 100644 --- a/browser/extensions/api/brave_shields_api_browsertest.cc +++ b/browser/extensions/api/brave_shields_api_browsertest.cc @@ -20,20 +20,18 @@ #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" -#include "content/public/test/browser_test_utils.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" +#include "content/public/test/browser_test_utils.h" #include "extensions/common/extension_builder.h" #include "net/dns/mock_host_resolver.h" namespace extensions { -using api::BraveShieldsContentSettingGetFunction; -using api::BraveShieldsContentSettingSetFunction; -using extensions::api::BraveShieldsAllowScriptsOnceFunction; using extension_function_test_utils::RunFunctionAndReturnError; using extension_function_test_utils::RunFunctionAndReturnSingleResult; +using extensions::api::BraveShieldsAllowScriptsOnceFunction; class BraveShieldsAPIBrowserTest : public InProcessBrowserTest { public: @@ -57,13 +55,9 @@ class BraveShieldsAPIBrowserTest : public InProcessBrowserTest { return browser()->tab_strip_model()->GetActiveWebContents(); } - scoped_refptr extension() { - return extension_; - } + scoped_refptr extension() { return extension_; } - HostContentSettingsMap* content_settings() const { - return content_settings_; - } + HostContentSettingsMap* content_settings() const { return content_settings_; } void BlockScripts() { content_settings_->SetContentSettingCustomScope( @@ -71,11 +65,10 @@ class BraveShieldsAPIBrowserTest : public InProcessBrowserTest { CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", CONTENT_SETTING_BLOCK); } - bool NavigateToURLUntilLoadStop( - const std::string& origin, const std::string& path) { - ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL(origin, path)); + bool NavigateToURLUntilLoadStop(const std::string& origin, + const std::string& path) { + ui_test_utils::NavigateToURL(browser(), + embedded_test_server()->GetURL(origin, path)); return WaitForLoadStop(active_contents()); } @@ -98,7 +91,7 @@ class BraveShieldsAPIBrowserTest : public InProcessBrowserTest { // reload page with a.com temporarily allowed active_contents()->GetController().Reload(content::ReloadType::NORMAL, - true); + true); } void AllowScriptOriginAndDataURLOnce(const std::string& origin, @@ -133,38 +126,37 @@ IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, AllowScriptsOnce) { EXPECT_TRUE( NavigateToURLUntilLoadStop("a.com", "/load_js_from_origins.html")); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 1u) << - "All script loadings should be blocked."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 1u) + << "All script loadings should be blocked."; AllowScriptOriginOnce("a.com"); EXPECT_TRUE(WaitForLoadStop(active_contents())); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) << - "Scripts from a.com should be temporarily allowed."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) + << "Scripts from a.com should be temporarily allowed."; // reload page again - active_contents()->GetController().Reload(content::ReloadType::NORMAL, - true); + active_contents()->GetController().Reload(content::ReloadType::NORMAL, true); EXPECT_TRUE(WaitForLoadStop(active_contents())); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) << - "Scripts from a.com should be temporarily allowed after reload."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) + << "Scripts from a.com should be temporarily allowed after reload."; // same doc navigation - ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL("a.com", - "/load_js_from_origins.html#foo")); + ui_test_utils::NavigateToURL(browser(), + embedded_test_server()->GetURL( + "a.com", "/load_js_from_origins.html#foo")); EXPECT_TRUE(WaitForLoadStop(active_contents())); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) << - "Scripts from a.com should be temporarily allowed for same doc navigation."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) + << "Scripts from a.com should be temporarily allowed for same doc " + "navigation."; // navigate to a different origin ui_test_utils::NavigateToURL( browser(), embedded_test_server()->GetURL("b.com", "/load_js_from_origins.html")); EXPECT_TRUE(WaitForLoadStop(active_contents())); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 1u) << - "All script loadings should be blocked after navigating away."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 1u) + << "All script loadings should be blocked after navigating away."; } IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, AllowScriptsOnceDataURL) { @@ -192,178 +184,94 @@ IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, AllowScriptsOnceDataURL) { IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, AllowScriptsOnceIframe) { BlockScripts(); - EXPECT_TRUE( - NavigateToURLUntilLoadStop("a.com", "/remote_iframe.html")); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) << - "All script loadings should be blocked."; + EXPECT_TRUE(NavigateToURLUntilLoadStop("a.com", "/remote_iframe.html")); + EXPECT_EQ(active_contents()->GetAllFrames().size(), 2u) + << "All script loadings should be blocked."; AllowScriptOriginOnce("b.com"); EXPECT_TRUE(WaitForLoadStop(active_contents())); - EXPECT_EQ(active_contents()->GetAllFrames().size(), 3u) << - "Scripts from b.com should be temporarily allowed."; + EXPECT_EQ(active_contents()->GetAllFrames().size(), 3u) + << "Scripts from b.com should be temporarily allowed."; } constexpr char kJavascriptSetParams[] = - "[\"javascript\", {\"primaryPattern\": \"https://www.brave.com/*\"," - "\"setting\": \"block\"}]"; -constexpr char kJavascriptGetParams[] = - "[\"javascript\", {\"primaryUrl\": \"https://www.brave.com/*\"}]"; -constexpr char kBraveURLPattern[] = "https://www.brave.com/*"; + "[\"block\", \"https://www.brave.com/\"]"; +constexpr char kJavascriptGetParams[] = "[\"https://www.brave.com/\"]"; const GURL kBraveURL("https://www.brave.com"); // Test javascript content setting works properly via braveShields api. IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, - ContentSettingJavascriptAPI) { + GetNoScriptControlTypeFunction) { // Default content settings for javascript is allow. - scoped_refptr get_function( - new BraveShieldsContentSettingGetFunction()); + scoped_refptr get_function( + new api::BraveShieldsGetNoScriptControlTypeFunction()); get_function->set_extension(extension().get()); std::unique_ptr value; - value.reset(RunFunctionAndReturnSingleResult(get_function.get(), - kJavascriptGetParams, - browser())); - EXPECT_EQ(value->FindKey( - content_settings_api_constants::kContentSettingKey)->GetString(), - std::string("allow")); - - // Block javascript. - scoped_refptr set_function( - new BraveShieldsContentSettingSetFunction()); - set_function->set_extension(extension().get()); - RunFunctionAndReturnSingleResult(set_function.get(), - kJavascriptSetParams, - browser()); - - // Check Block is set. - get_function = base::MakeRefCounted(); - get_function->set_extension(extension().get()); - value.reset(RunFunctionAndReturnSingleResult(get_function.get(), - kJavascriptGetParams, - browser())); - EXPECT_EQ(value->FindKey( - content_settings_api_constants::kContentSettingKey)->GetString(), - std::string("block")); + value.reset(RunFunctionAndReturnSingleResult( + get_function.get(), kJavascriptGetParams, browser())); + EXPECT_EQ(value->GetString(), std::string("allow")); } -// Test previous settings set by extension is deleted when setting is newly -// modifed. IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, - ContentSettingValueFromExtensionDelete) { - // Set javascript content setting via ContentSettingsStore and check this - // settings comes from extension. chrome.contentSettings.javascript.set() - // sets settings into ContentSettingsStore. - std::string primary_error; - ContentSettingsPattern primary_pattern = - content_settings_helpers::ParseExtensionPattern(kBraveURLPattern, - &primary_error); - scoped_refptr store = - ContentSettingsService::Get(browser()->profile())-> - content_settings_store(); - store->SetExtensionContentSetting(brave_extension_id, - primary_pattern, - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_JAVASCRIPT, - std::string(), - CONTENT_SETTING_ALLOW, - kExtensionPrefsScopeRegular); - DCHECK(primary_pattern.IsValid()); - - content_settings::SettingInfo info; - content_settings()->GetWebsiteSetting( - kBraveURL, kBraveURL, - CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string(), &info); - // Check source is extension. - EXPECT_EQ(info.source, - content_settings::SettingSource::SETTING_SOURCE_EXTENSION); - - // Check this value via braveShields api. - scoped_refptr get_function( - new BraveShieldsContentSettingGetFunction()); - get_function->set_extension(extension().get()); - std::unique_ptr value; - value.reset(RunFunctionAndReturnSingleResult(get_function.get(), - kJavascriptGetParams, - browser())); - EXPECT_EQ(value->FindKey( - content_settings_api_constants::kContentSettingKey)->GetString(), - std::string("allow")); - - // Block via shields api. - scoped_refptr set_function( - new BraveShieldsContentSettingSetFunction()); + SetNoScriptControlTypeFunction) { + // Block javascript. + scoped_refptr set_function( + new api::BraveShieldsSetNoScriptControlTypeFunction()); set_function->set_extension(extension().get()); - RunFunctionAndReturnSingleResult(set_function.get(), - kJavascriptSetParams, + RunFunctionAndReturnSingleResult(set_function.get(), kJavascriptSetParams, browser()); // Check Block is set. - get_function = base::MakeRefCounted(); - get_function->set_extension(extension().get()); - value.reset(RunFunctionAndReturnSingleResult(get_function.get(), - kJavascriptGetParams, - browser())); - EXPECT_EQ(value->FindKey( - content_settings_api_constants::kContentSettingKey)->GetString(), - std::string("block")); - - content_settings()->GetWebsiteSetting( - kBraveURL, kBraveURL, - CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string(), &info); - // Check source is user. - EXPECT_EQ(info.source, - content_settings::SettingSource::SETTING_SOURCE_USER); + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->GetContentSetting(kBraveURL, GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(setting, CONTENT_SETTING_BLOCK); } // Checks shields configuration is persisted across the sessions. IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, PRE_ShieldSettingsPersistTest) { - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - SetContentSettingDefaultScope( - kBraveURL, kBraveURL, - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kHTTPUpgradableResources, - CONTENT_SETTING_ALLOW); + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->SetContentSettingDefaultScope( + kBraveURL, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW); ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - GetContentSetting(kBraveURL, kBraveURL, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kHTTPUpgradableResources); + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->GetContentSetting(kBraveURL, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); } -IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, - ShieldSettingsPersistTest) { +IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, ShieldSettingsPersistTest) { ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - GetContentSetting(kBraveURL, kBraveURL, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kHTTPUpgradableResources); + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->GetContentSetting(kBraveURL, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); } // Checks flash configuration isn't persisted across the sessions. -IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, - PRE_FlashPersistTest) { - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - SetContentSettingDefaultScope( - kBraveURL, kBraveURL, - CONTENT_SETTINGS_TYPE_PLUGINS, - std::string(), - CONTENT_SETTING_ALLOW); +IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, PRE_FlashPersistTest) { + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->SetContentSettingDefaultScope(kBraveURL, GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + std::string(), CONTENT_SETTING_ALLOW); ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - GetContentSetting(kBraveURL, kBraveURL, CONTENT_SETTINGS_TYPE_PLUGINS, - std::string()); + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->GetContentSetting(kBraveURL, GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); } -IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, - FlashPersistTest) { +IN_PROC_BROWSER_TEST_F(BraveShieldsAPIBrowserTest, FlashPersistTest) { ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(browser()->profile())-> - GetContentSetting(kBraveURL, kBraveURL, CONTENT_SETTINGS_TYPE_PLUGINS, - std::string()); + HostContentSettingsMapFactory::GetForProfile(browser()->profile()) + ->GetContentSetting(kBraveURL, GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); EXPECT_EQ(setting, CONTENT_SETTING_BLOCK); } diff --git a/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js b/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js index 5f4262979af..06e8ad9be1c 100644 --- a/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js +++ b/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js @@ -18,7 +18,7 @@ Polymer({ type: Array, value: function() { return [ - {value: '3p', name: loadTimeData.getString('block3rdPartyCookies')}, + {value: 'block_third_party', name: loadTimeData.getString('block3rdPartyCookies')}, {value: 'block', name: loadTimeData.getString('blockAllCookies')}, {value: 'allow', name: loadTimeData.getString('allowAllCookies')} ] @@ -30,7 +30,7 @@ Polymer({ type: Array, value: function() { return [ - {value: '3p', name: loadTimeData.getString('block3rdPartyFingerprinting')}, + {value: 'block_third_party', name: loadTimeData.getString('block3rdPartyFingerprinting')}, {value: 'block', name: loadTimeData.getString('blockAllFingerprinting')}, {value: 'allow', name: loadTimeData.getString('allowAllFingerprinting')} ] diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn index dc48a7416c2..af7454ddc7c 100644 --- a/browser/ui/BUILD.gn +++ b/browser/ui/BUILD.gn @@ -147,6 +147,7 @@ source_set("ui") { "//brave/components/brave_new_tab_ui:generated_resources", "//brave/components/brave_rewards/browser", "//brave/components/brave_rewards/resources", + "//brave/components/brave_shields/browser", "//brave/components/brave_welcome_ui:generated_resources", "//chrome/app:command_ids", "//chrome/common", diff --git a/browser/ui/webui/settings/default_brave_shields_handler.cc b/browser/ui/webui/settings/default_brave_shields_handler.cc index 000fc83c9f1..1d9241c6b59 100644 --- a/browser/ui/webui/settings/default_brave_shields_handler.cc +++ b/browser/ui/webui/settings/default_brave_shields_handler.cc @@ -9,14 +9,14 @@ #include "base/bind.h" #include "base/values.h" -#include "brave/common/pref_names.h" -#include "brave/components/brave_shields/common/brave_shield_constants.h" -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "brave/components/brave_shields/browser/brave_shields_util.h" #include "chrome/browser/profiles/profile.h" -#include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/prefs/pref_service.h" #include "content/public/browser/web_ui.h" +using brave_shields::ControlType; +using brave_shields::ControlTypeFromString; +using brave_shields::ControlTypeToString; + void DefaultBraveShieldsHandler::RegisterMessages() { profile_ = Profile::FromWebUI(web_ui()); web_ui()->RegisterMessageCallback( @@ -60,14 +60,12 @@ void DefaultBraveShieldsHandler::GetAdControlType(const base::ListValue* args) { CHECK_EQ(args->GetSize(), 1U); CHECK(profile_); - ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(profile_)->GetContentSetting( - GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kAds); + ControlType setting = brave_shields::GetAdControlType(profile_, GURL()); AllowJavascript(); ResolveJavascriptCallback( args->GetList()[0].Clone(), - base::Value(setting == CONTENT_SETTING_ALLOW)); + base::Value(setting == ControlType::ALLOW)); } void DefaultBraveShieldsHandler::SetAdControlType(const base::ListValue* args) { @@ -76,20 +74,10 @@ void DefaultBraveShieldsHandler::SetAdControlType(const base::ListValue* args) { bool value; args->GetBoolean(0, &value); - HostContentSettingsMapFactory::GetForProfile(profile_)-> - SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kAds, - value ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); - HostContentSettingsMapFactory::GetForProfile(profile_)-> - SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kTrackers, - value ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); + brave_shields::SetAdControlType(profile_, + value ? ControlType::BLOCK + : ControlType::ALLOW, + GURL()); } void DefaultBraveShieldsHandler::GetCookieControlType( @@ -97,26 +85,12 @@ void DefaultBraveShieldsHandler::GetCookieControlType( CHECK_EQ(args->GetSize(), 1U); CHECK(profile_); - ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(profile_)->GetContentSetting( - GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kCookies); - ContentSetting fp_setting = - HostContentSettingsMapFactory::GetForProfile(profile_)->GetContentSetting( - GURL(), GURL("https://firstParty/"), CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kCookies); - - std::string value = "block"; - if (setting == CONTENT_SETTING_ALLOW) { - value = "allow"; - } else if (fp_setting != CONTENT_SETTING_BLOCK) { - value = "3p"; - } + ControlType setting = brave_shields::GetCookieControlType(profile_, GURL()); AllowJavascript(); ResolveJavascriptCallback( args->GetList()[0].Clone(), - base::Value(value)); + base::Value(ControlTypeToString(setting))); } void DefaultBraveShieldsHandler::SetCookieControlType( @@ -126,27 +100,9 @@ void DefaultBraveShieldsHandler::SetCookieControlType( std::string value; args->GetString(0, &value); - auto* map = HostContentSettingsMapFactory::GetForProfile(profile_); - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kReferrers, - value == "allow" ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); - - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kCookies, - value == "allow" ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); - - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::FromString("https://firstParty/*"), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kCookies, - value == "block" ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); + brave_shields::SetCookieControlType(profile_, + ControlTypeFromString(value), + GURL()); } void DefaultBraveShieldsHandler::GetFingerprintingControlType( @@ -154,26 +110,13 @@ void DefaultBraveShieldsHandler::GetFingerprintingControlType( CHECK_EQ(args->GetSize(), 1U); CHECK(profile_); - ContentSetting setting = - HostContentSettingsMapFactory::GetForProfile(profile_)->GetContentSetting( - GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kFingerprinting); - ContentSetting fp_setting = - HostContentSettingsMapFactory::GetForProfile(profile_)->GetContentSetting( - GURL(), GURL("https://firstParty/"), CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kFingerprinting); - - std::string value; - if (setting != fp_setting || setting == CONTENT_SETTING_DEFAULT) { - value = "3p"; - } else { - value = setting == CONTENT_SETTING_ALLOW ? "allow" : "block"; - } + ControlType setting = + brave_shields::GetFingerprintingControlType(profile_, GURL()); AllowJavascript(); ResolveJavascriptCallback( args->GetList()[0].Clone(), - base::Value(value)); + base::Value(ControlTypeToString(setting))); } void DefaultBraveShieldsHandler::SetFingerprintingControlType( @@ -183,20 +126,9 @@ void DefaultBraveShieldsHandler::SetFingerprintingControlType( std::string value; args->GetString(0, &value); - auto* map = HostContentSettingsMapFactory::GetForProfile(profile_); - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kFingerprinting, - value == "allow" ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); - - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::FromString("https://firstParty/*"), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kFingerprinting, - value == "block" ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); + brave_shields::SetFingerprintingControlType(profile_, + ControlTypeFromString(value), + GURL()); } void DefaultBraveShieldsHandler::SetHTTPSEverywhereControlType( @@ -206,13 +138,10 @@ void DefaultBraveShieldsHandler::SetHTTPSEverywhereControlType( bool value; args->GetBoolean(0, &value); - HostContentSettingsMapFactory::GetForProfile(profile_)-> - SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kHTTPUpgradableResources, - value ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); + brave_shields::SetHTTPSEverywhereControlType(profile_, + value ? ControlType::BLOCK + : ControlType::ALLOW, + GURL()); } void DefaultBraveShieldsHandler::SetNoScriptControlType( @@ -222,11 +151,8 @@ void DefaultBraveShieldsHandler::SetNoScriptControlType( bool value; args->GetBoolean(0, &value); - HostContentSettingsMapFactory::GetForProfile(profile_)-> - SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::Wildcard(), - CONTENT_SETTINGS_TYPE_JAVASCRIPT, - "", - value ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); + brave_shields::SetNoScriptControlType(profile_, + value ? ControlType::BLOCK + : ControlType::ALLOW, + GURL()); } diff --git a/common/extensions/api/brave_shields.json b/common/extensions/api/brave_shields.json index b2c0a27964c..f60b6008ac4 100644 --- a/common/extensions/api/brave_shields.json +++ b/common/extensions/api/brave_shields.json @@ -29,176 +29,243 @@ ], "functions": [ { - "name": "allowScriptsOnce", + "name": "setBraveShieldsControlType", "type": "function", - "description": "Allow scripts from a list of origins until next reload", + "description": "Set brave shields control type for a url", "parameters": [ { - "name": "origins", - "type": "array", - "items": {"type": "string"} + "name": "controlType", + "type": "string" }, { - "name": "tabID", - "type": "integer" + "name": "url", + "type": "string" + } + ] + }, + { + "name": "getBraveShieldsControlType", + "type": "function", + "description": "Get brave shields control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" }, { "type": "function", "name": "callback", - "optional": true, - "parameters": [] + "parameters": [ + { + "name": "controlType", + "type": "string" + } + ] } ] - } - ], - "types": [ + }, { - "id": "ResourceIdentifier", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource identifier for the given content type." + "name": "setAdControlType", + "type": "function", + "description": "Set ads control type for a url", + "parameters": [ + { + "name": "controlType", + "type": "string" }, - "description": { - "type": "string", - "optional": true, - "description": "A human readable description of the resource." + { + "name": "url", + "type": "string" } - }, - "description": "The only content type using resource identifiers is $(ref:contentSettings.plugins). For more information, see Resource Identifiers." + ] }, { - "id": "Scope", - "type": "string", - "enum": ["regular", "incognito_session_only"], - "description": "The scope of the ContentSetting. One of
regular: setting for regular profile (which is inherited by the incognito profile if not overridden elsewhere),
incognito_session_only: setting for incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular settings)." + "name": "getAdControlType", + "type": "function", + "description": "Get ads control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" + }, + { + "type": "function", + "name": "callback", + "parameters": [ + { + "name": "controlType", + "type": "string" + } + ] + } + ] }, { - "id": "ContentSetting", - "js_module": "ContentSetting", - "type": "object", - "functions": [ + "name": "setCookieControlType", + "type": "function", + "description": "Set cookie control type for a url", + "parameters": [ + { + "name": "controlType", + "type": "string" + }, + { + "name": "url", + "type": "string" + } + ] + }, + { + "name": "getCookieControlType", + "type": "function", + "description": "Get cookie control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" + }, { - "name": "get", "type": "function", - "description": "Gets the current content setting for a given pair of URLs.", + "name": "callback", "parameters": [ { - "name": "details", - "type": "object", - "properties": { - "primaryUrl": { - "type": "string", - "description": "The primary URL for which the content setting should be retrieved. Note that the meaning of a primary URL depends on the content type." - }, - "secondaryUrl": { - "type": "string", - "description": "The secondary URL for which the content setting should be retrieved. Defaults to the primary URL. Note that the meaning of a secondary URL depends on the content type, and not all content types use secondary URLs.", - "optional": true - }, - "resourceIdentifier": { - "$ref": "ResourceIdentifier", - "optional": true, - "description": "A more specific identifier of the type of content for which the settings should be retrieved." - }, - "incognito": { - "type": "boolean", - "optional": true, - "description": "Whether to check the content settings for an incognito session. (default false)" - } - } - }, - { - "type": "function", - "name": "callback", - "parameters": [ - { - "name": "details", - "type": "object", - "properties": { - "setting": { - "type": "any", - "description": "The content setting. See the description of the individual ContentSetting objects for the possible values." - } - } - } - ] + "name": "controlType", + "type": "string" } ] + } + ] + }, + { + "name": "setFingerprintingControlType", + "type": "function", + "description": "Set fingerprinting control type for a url", + "parameters": [ + { + "name": "controlType", + "type": "string" + }, + { + "name": "url", + "type": "string" + } + ] + }, + { + "name": "getFingerprintingControlType", + "type": "function", + "description": "Get fingerprinting control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" }, { - "name": "set", "type": "function", - "description": "Applies a new content setting rule.", + "name": "callback", "parameters": [ { - "name": "details", - "type": "object", - "properties": { - "primaryPattern": { - "type": "string", - "description": "The pattern for the primary URL. For details on the format of a pattern, see Content Setting Patterns." - }, - "secondaryPattern": { - "type": "string", - "description": "The pattern for the secondary URL. Defaults to matching all URLs. For details on the format of a pattern, see Content Setting Patterns.", - "optional": true - }, - "resourceIdentifier": { - "$ref": "ResourceIdentifier", - "optional": true, - "description": "The resource identifier for the content type." - }, - "setting": { - "type": "any", - "description": "The setting applied by this rule. See the description of the individual ContentSetting objects for the possible values." - }, - "scope": { - "$ref": "Scope", - "optional": true, - "description": "Where to set the setting (default: regular)." - } - } - }, + "name": "controlType", + "type": "string" + } + ] + } + ] + }, + { + "name": "setHTTPSEverywhereControlType", + "type": "function", + "description": "Set httpse control type for a url", + "parameters": [ + { + "name": "controlType", + "type": "string" + }, + { + "name": "url", + "type": "string" + } + ] + }, + { + "name": "getHTTPSEverywhereControlType", + "type": "function", + "description": "Get httpse control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" + }, + { + "type": "function", + "name": "callback", + "parameters": [ { - "type": "function", - "name": "callback", - "optional": true, - "parameters": [] + "name": "controlType", + "type": "string" } ] } ] }, { - "id": "JavascriptContentSetting", - "type": "string", - "enum": ["allow", "block"] + "name": "setNoScriptControlType", + "type": "function", + "description": "Set noscript control type for a url", + "parameters": [ + { + "name": "controlType", + "type": "string" + }, + { + "name": "url", + "type": "string" + } + ] }, { - "id": "PluginsContentSetting", - "type": "string", - "enum": ["allow", "block", "detect_important_content"] - } - ], - "properties": { - "javascript": { - "$ref": "ContentSetting", - "description": "Whether to run JavaScript. One of
allow: Run JavaScript,
block: Don't run JavaScript.
Default is allow.
The primary URL is the URL of the top-level frame. The secondary URL is not used.", - "value": [ - "javascript", - {"$ref":"JavascriptContentSetting"} + "name": "getNoScriptControlType", + "type": "function", + "description": "Get noscript control type for a url", + "parameters": [ + { + "name": "url", + "type": "string" + }, + { + "type": "function", + "name": "callback", + "parameters": [ + { + "name": "controlType", + "type": "string" + } + ] + } ] }, - "plugins": { - "$ref": "ContentSetting", - "description": "Whether to run plugins. One of
allow: Run plugins automatically,
block: Don't run plugins automatically,
detect_important_content: Only run automatically those plugins that are detected as the website's main content.
The primary URL is the URL of the top-level frame. The secondary URL is not used.", - "value": [ - "plugins", - {"$ref":"PluginsContentSetting"} + { + "name": "allowScriptsOnce", + "type": "function", + "description": "Allow scripts from a list of origins until next reload", + "parameters": [ + { + "name": "origins", + "type": "array", + "items": {"type": "string"} + }, + { + "name": "tabID", + "type": "integer" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] + } ] } - } + ] } ] diff --git a/components/brave_extension/extension/brave_extension/background.ts b/components/brave_extension/extension/brave_extension/background.ts index e70b64834d2..35ee4f1de77 100644 --- a/components/brave_extension/extension/brave_extension/background.ts +++ b/components/brave_extension/extension/brave_extension/background.ts @@ -26,14 +26,12 @@ promisifyAll(chrome, [ 'tabs', 'windows' ]) + promisifyAll(chrome.storage, [ 'local' ]) -promisifyAll(chrome.braveShields, [ - 'javascript', - 'plugins' -]) +bluebird.promisifyAll(chrome.braveShields, { promisifier }) require('./background/api') require('./background/events') diff --git a/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts b/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts index 06660df48f8..4f73fec4a32 100644 --- a/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts +++ b/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts @@ -4,8 +4,6 @@ import { ShieldDetails } from '../../types/actions/shieldsPanelActions' import { BlockOptions } from '../../types/other/blockTypes' -import * as resourceIdentifiers from '../../constants/resourceIdentifiers' -import { isHttpOrHttps, hasPortNumber } from '../../helpers/urlUtils' import actions from '../actions/shieldsPanelActions' import * as SettingsPrivate from '../../../../../common/settingsPrivate' @@ -24,31 +22,25 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { const hostname = url.hostname return Promise.all([ - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES } }), - chrome.braveShields.javascript.getAsync({ primaryUrl: origin }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, secondaryUrl: 'https://firstParty/*', resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES } }), - chrome.braveShields.plugins.getAsync({ primaryUrl: origin, secondaryUrl: 'https://firstParty/', resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES } }) + chrome.braveShields.getBraveShieldsControlTypeAsync(tabData.url), + chrome.braveShields.getAdControlTypeAsync(tabData.url), + chrome.braveShields.getHTTPSEverywhereControlTypeAsync(tabData.url), + chrome.braveShields.getNoScriptControlTypeAsync(tabData.url), + chrome.braveShields.getFingerprintingControlTypeAsync(tabData.url), + chrome.braveShields.getCookieControlTypeAsync(tabData.url) ]).then((details) => { - const fingerprinting = details[5].setting !== details[6].setting ? 'block_third_party' : details[5].setting - const cookies = details[7].setting !== details[8].setting ? 'block_third_party' : details[7].setting - const braveShields = isHttpOrHttps(origin) ? details[0].setting : 'block' return { url: url.href, origin, hostname, id: tabData.id, - braveShields, - ads: details[1].setting, - trackers: details[2].setting, - httpUpgradableResources: details[3].setting, - javascript: details[4].setting, - fingerprinting, - cookies + braveShields: details[0], + ads: details[1], + trackers: details[1], + httpUpgradableResources: details[2], + javascript: details[3], + fingerprinting: details[4], + cookies: details[5] } }).catch(() => { return { @@ -66,9 +58,6 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { }) } -const getScope = () => - chrome.extension.inIncognitoContext ? 'incognito_session_only' : 'regular' - /** * Obtains specified tab data * @return a promise with the active tab data @@ -88,15 +77,6 @@ export const requestShieldPanelData = (tabId: number) => actions.shieldsPanelDataUpdated(details) }) -const getPrimaryPatternForOrigin = (origin: string) => { - // When url includes port w/o scheme, chromium parses it as an invalid port - // number. - if (hasPortNumber(origin) && isHttpOrHttps(origin)) { - return origin + '/*' - } - return origin.replace(/^(http|https):\/\//, '*://') + '/*' -} - /** * Changes the brave shields setting at origin to be allowed or blocked. * @param {string} origin the origin of the site to change the setting for @@ -104,12 +84,7 @@ const getPrimaryPatternForOrigin = (origin: string) => { * @return a promise which resolves when the setting is set */ export const setAllowBraveShields = (origin: string, setting: string) => - chrome.braveShields.plugins.setAsync({ - primaryPattern: getPrimaryPatternForOrigin(origin), - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS }, - setting, - scope: getScope() - }) + chrome.braveShields.setBraveShieldsControlTypeAsync(setting, origin) /** * Changes the ads at origin to be allowed or blocked. @@ -119,12 +94,7 @@ export const setAllowBraveShields = (origin: string, setting: string) => * @return a promise which resolves when the setting is set */ export const setAllowAds = (origin: string, setting: string) => - chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS }, - setting, - scope: getScope() - }) + chrome.braveShields.setAdControlTypeAsync(setting, origin) /** * Changes the trackers at origin to be allowed or blocked. @@ -134,12 +104,7 @@ export const setAllowAds = (origin: string, setting: string) => * @return a promise which resolves with the setting is set */ export const setAllowTrackers = (origin: string, setting: string) => - chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS }, - setting, - scope: getScope() - }) + chrome.braveShields.setAdControlTypeAsync(setting, origin) /** * Changes the http upgrdabable resources to be allows as is or blocked. @@ -147,15 +112,8 @@ export const setAllowTrackers = (origin: string, setting: string) => * @param {string} origin the origin of the site to change the setting for * @return a promise which resolves when the setting is set */ -export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOptions) => { - const primaryPattern = getPrimaryPatternForOrigin(origin) - return chrome.braveShields.plugins.setAsync({ - primaryPattern, - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES }, - setting, - scope: getScope() - }) -} +export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOptions) => + chrome.braveShields.setHTTPSEverywhereControlTypeAsync(setting, origin) /** * Changes the Javascript to be on (allow) or off (block) @@ -164,11 +122,7 @@ export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOp * @return a promise which resolves when the setting is set */ export const setAllowJavaScript = (origin: string, setting: string) => - chrome.braveShields.javascript.setAsync({ - primaryPattern: origin + '/*', - setting, - scope: getScope() - }) + chrome.braveShields.setNoScriptControlTypeAsync(setting, origin) /** * Changes the fingerprinting at origin to be allowed or blocked. @@ -176,61 +130,16 @@ export const setAllowJavaScript = (origin: string, setting: string) => * @param {string} origin the origin of the site to change the setting for * @return a promise which resolves with the setting is set */ -export const setAllowFingerprinting = (origin: string, setting: string) => { - const originSetting = setting === 'allow' ? 'allow' : 'block' - const firstPartySetting = setting === 'block' ? 'block' : 'allow' - - const p1 = chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, - setting: originSetting, - scope: getScope() - }) - - const p2 = chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - secondaryPattern: 'https://firstParty/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, - setting: firstPartySetting, - scope: getScope() - }) - - return Promise.all([p1, p2]) -} +export const setAllowFingerprinting = (origin: string, setting: string) => + chrome.braveShields.setFingerprintingControlTypeAsync(setting, origin) /** * Changes the cookie at origin to be allowed or blocked. * @param {string} origin the origin of the site to change the setting for * @return a promise which resolves with the setting is set */ -export const setAllowCookies = (origin: string, setting: string) => { - const originSetting = setting === 'allow' ? 'allow' : 'block' - const firstPartySetting = setting === 'block' ? 'block' : 'allow' - - const p1 = chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_REFERRERS }, - setting: originSetting, - scope: getScope() - }) - - const p2 = chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES }, - setting: originSetting, - scope: getScope() - }) - - const p3 = chrome.braveShields.plugins.setAsync({ - primaryPattern: origin + '/*', - secondaryPattern: 'https://firstParty/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES }, - setting: firstPartySetting, - scope: getScope() - }) - - return Promise.all([p1, p2, p3]) -} +export const setAllowCookies = (origin: string, setting: string) => + chrome.braveShields.setCookieControlTypeAsync(setting, origin) /** * Toggles the input value between allow and block diff --git a/components/brave_extension/extension/brave_extension/constants/resourceIdentifiers.ts b/components/brave_extension/extension/brave_extension/constants/resourceIdentifiers.ts deleted file mode 100644 index a12314b33ac..00000000000 --- a/components/brave_extension/extension/brave_extension/constants/resourceIdentifiers.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this file, -+ * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -export const RESOURCE_IDENTIFIER_ADS = 'ads' -export const RESOURCE_IDENTIFIER_TRACKERS = 'trackers' -export const RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES = 'httpUpgradableResources' -export const RESOURCE_IDENTIFIER_BRAVE_SHIELDS = 'braveShields' -export const RESOURCE_IDENTIFIER_FINGERPRINTING = 'fingerprinting' -export const RESOURCE_IDENTIFIER_COOKIES = 'cookies' -export const RESOURCE_IDENTIFIER_REFERRERS = 'referrers' diff --git a/components/brave_extension/extension/brave_extension/helpers/urlUtils.ts b/components/brave_extension/extension/brave_extension/helpers/urlUtils.ts index d0e73bad342..68ca2080e85 100644 --- a/components/brave_extension/extension/brave_extension/helpers/urlUtils.ts +++ b/components/brave_extension/extension/brave_extension/helpers/urlUtils.ts @@ -2,8 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -import * as urlParser from 'url' - export const isHttpOrHttps = (url?: string) => { if (!url) { return false @@ -11,10 +9,6 @@ export const isHttpOrHttps = (url?: string) => { return /^https?:/i.test(url) } -export const hasPortNumber = (url: string) => { - return typeof urlParser.parse(url).port === 'string' -} - /** * Get the URL origin via Web API * @param {string} url - The URL to get the origin from diff --git a/components/brave_extension/extension/brave_extension/types/constants/resourceIdentifiers.ts b/components/brave_extension/extension/brave_extension/types/constants/resourceIdentifiers.ts deleted file mode 100644 index 11a1a9e5925..00000000000 --- a/components/brave_extension/extension/brave_extension/types/constants/resourceIdentifiers.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this file, -+ * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -import * as types from '../../constants/resourceIdentifiers' - -export type RESOURCE_IDENTIFIER_ADS = typeof types.RESOURCE_IDENTIFIER_ADS -export type RESOURCE_IDENTIFIER_TRACKERS = typeof types.RESOURCE_IDENTIFIER_TRACKERS -export type RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES = typeof types.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES -export type RESOURCE_IDENTIFIER_FINGERPRINTING = typeof types.RESOURCE_IDENTIFIER_FINGERPRINTING -export type RESOURCE_IDENTIFIER_COOKIES = typeof types.RESOURCE_IDENTIFIER_COOKIES diff --git a/components/brave_shields/browser/brave_shields_util.cc b/components/brave_shields/browser/brave_shields_util.cc index 9f6cc0e3c43..364b7c13884 100644 --- a/components/brave_shields/browser/brave_shields_util.cc +++ b/components/brave_shields/browser/brave_shields_util.cc @@ -12,6 +12,7 @@ #include "brave/common/shield_exceptions.h" #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" #include "brave/components/brave_shields/browser/referrer_whitelist_service.h" +#include "brave/components/brave_shields/common/brave_shield_constants.h" #include "brave/components/content_settings/core/browser/content_settings_util.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/profiles/profile_io_data.h" @@ -34,6 +35,262 @@ using net::URLRequest; namespace brave_shields { +namespace { + +ContentSetting GetDefaultAllowFromControlType(ControlType type) { + if (type == ControlType::DEFAULT) + return CONTENT_SETTING_DEFAULT; + + return type == ControlType::BLOCK ? CONTENT_SETTING_BLOCK + : CONTENT_SETTING_ALLOW; +} + +ContentSetting GetDefaultBlockFromControlType(ControlType type) { + if (type == ControlType::DEFAULT) + return CONTENT_SETTING_DEFAULT; + + return type == ControlType::ALLOW ? CONTENT_SETTING_ALLOW + : CONTENT_SETTING_BLOCK; +} + +} // namespace + +ContentSettingsPattern GetPatternFromURL(const GURL& url, + bool scheme_wildcard) { + DCHECK(url.is_empty() ? url.possibly_invalid_spec() == "" : url.is_valid()); + if (url.is_empty() && url.possibly_invalid_spec() == "") + return ContentSettingsPattern::Wildcard(); + + return scheme_wildcard && !url.has_port() + ? ContentSettingsPattern::FromString("*://" + url.host() + "/*") + : ContentSettingsPattern::FromString(url.GetOrigin().spec() + "/*"); +} + +std::string ControlTypeToString(ControlType type) { + switch (type) { + case ControlType::ALLOW: + return "allow"; + case ControlType::BLOCK: + return "block"; + case ControlType::BLOCK_THIRD_PARTY: + return "block_third_party"; + case ControlType::DEFAULT: + return "default"; + default: + NOTREACHED(); + return "invalid"; + } +} + +ControlType ControlTypeFromString(const std::string& string) { + if (string == "allow") { + return ControlType::ALLOW; + } else if (string == "block") { + return ControlType::BLOCK; + } else if (string == "block_third_party") { + return ControlType::BLOCK_THIRD_PARTY; + } else if (string == "default") { + return ControlType::DEFAULT; + } else { + NOTREACHED(); + return ControlType::INVALID; + } +} + +void SetBraveShieldsControlType(Profile* profile, + ControlType type, + const GURL& url) { + DCHECK(type != ControlType::BLOCK_THIRD_PARTY); + + if (url.is_valid() && !url.SchemeIsHTTPOrHTTPS()) + return; + + auto primary_pattern = GetPatternFromURL(url, true); + + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kBraveShields, + GetDefaultAllowFromControlType(type)); +} + +ControlType GetBraveShieldsControlType(Profile* profile, const GURL& url) { + if (url.is_valid() && !url.SchemeIsHTTPOrHTTPS()) + return ControlType::BLOCK; + + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kBraveShields); + + return setting == CONTENT_SETTING_BLOCK ? ControlType::BLOCK + : ControlType::ALLOW; +} + +void SetAdControlType(Profile* profile, ControlType type, const GURL& url) { + DCHECK(type != ControlType::BLOCK_THIRD_PARTY); + auto primary_pattern = GetPatternFromURL(url); + + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope(primary_pattern, + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kAds, + GetDefaultBlockFromControlType(type)); + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope(primary_pattern, + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kTrackers, + GetDefaultBlockFromControlType(type)); +} + +ControlType GetAdControlType(Profile* profile, const GURL& url) { + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kAds); + + return setting == CONTENT_SETTING_ALLOW ? ControlType::ALLOW + : ControlType::BLOCK; +} + +void SetCookieControlType(Profile* profile, ControlType type, const GURL& url) { + auto primary_pattern = GetPatternFromURL(url); + + if (!primary_pattern.IsValid()) + return; + + auto* map = HostContentSettingsMapFactory::GetForProfile(profile); + map->SetContentSettingCustomScope(primary_pattern, + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kReferrers, + GetDefaultBlockFromControlType(type)); + + map->SetContentSettingCustomScope(primary_pattern, + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kCookies, + GetDefaultBlockFromControlType(type)); + + map->SetContentSettingCustomScope( + primary_pattern, + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, kCookies, + GetDefaultAllowFromControlType(type)); +} + +ControlType GetCookieControlType(Profile* profile, const GURL& url) { + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kCookies); + + ContentSetting fp_setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL("https://firstParty/"), CONTENT_SETTINGS_TYPE_PLUGINS, + kCookies); + + if (setting == CONTENT_SETTING_ALLOW) { + return ControlType::ALLOW; + } else if (fp_setting != CONTENT_SETTING_BLOCK) { + return ControlType::BLOCK_THIRD_PARTY; + } else { + return ControlType::BLOCK; + } +} + +void SetFingerprintingControlType(Profile* profile, + ControlType type, + const GURL& url) { + auto primary_pattern = GetPatternFromURL(url); + + if (!primary_pattern.IsValid()) + return; + + auto* map = HostContentSettingsMapFactory::GetForProfile(profile); + map->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kFingerprinting, + GetDefaultBlockFromControlType(type)); + + map->SetContentSettingCustomScope( + primary_pattern, + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, kFingerprinting, + GetDefaultAllowFromControlType(type)); +} + +ControlType GetFingerprintingControlType(Profile* profile, const GURL& url) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile); + + ContentSetting setting = map->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kFingerprinting); + ContentSetting fp_setting = + map->GetContentSetting(url, GURL("https://firstParty/"), + CONTENT_SETTINGS_TYPE_PLUGINS, kFingerprinting); + + if (setting != fp_setting || setting == CONTENT_SETTING_DEFAULT) { + return ControlType::BLOCK_THIRD_PARTY; + } else { + return setting == CONTENT_SETTING_ALLOW ? ControlType::ALLOW + : ControlType::BLOCK; + } +} + +void SetHTTPSEverywhereControlType(Profile* profile, + ControlType type, + const GURL& url) { + DCHECK(type != ControlType::BLOCK_THIRD_PARTY); + auto primary_pattern = GetPatternFromURL(url, true); + + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kHTTPUpgradableResources, + type == ControlType::ALLOW ? CONTENT_SETTING_ALLOW + : CONTENT_SETTING_BLOCK); +} + +ControlType GetHTTPSEverywhereControlType(Profile* profile, const GURL& url) { + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kHTTPUpgradableResources); + + return setting == CONTENT_SETTING_ALLOW ? ControlType::ALLOW + : ControlType::BLOCK; +} + +void SetNoScriptControlType(Profile* profile, + ControlType type, + const GURL& url) { + DCHECK(type != ControlType::BLOCK_THIRD_PARTY); + auto primary_pattern = GetPatternFromURL(url); + + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", + type == ControlType::ALLOW ? CONTENT_SETTING_ALLOW + : CONTENT_SETTING_BLOCK); +} + +ControlType GetNoScriptControlType(Profile* profile, const GURL& url) { + ContentSetting setting = + HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + + return setting == CONTENT_SETTING_ALLOW ? ControlType::ALLOW + : ControlType::BLOCK; +} + bool IsAllowContentSettingFromIO(const net::URLRequest* request, const GURL& primary_url, const GURL& secondary_url, @@ -61,11 +318,8 @@ bool IsAllowContentSettingsForProfile(Profile* profile, DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(profile); return content_settings::IsAllowContentSetting( - HostContentSettingsMapFactory::GetForProfile(profile), - primary_url, - secondary_url, - setting_type, - resource_identifier); + HostContentSettingsMapFactory::GetForProfile(profile), primary_url, + secondary_url, setting_type, resource_identifier); } bool IsAllowContentSettingWithIOData(ProfileIOData* io_data, @@ -78,11 +332,8 @@ bool IsAllowContentSettingWithIOData(ProfileIOData* io_data, resource_identifier, primary_url, secondary_url); } return content_settings::IsAllowContentSetting( - io_data->GetHostContentSettingsMap(), - primary_url, - secondary_url, - setting_type, - resource_identifier); + io_data->GetHostContentSettingsMap(), primary_url, secondary_url, + setting_type, resource_identifier); } void GetRenderFrameInfo(const URLRequest* request, @@ -140,7 +391,7 @@ bool ShouldSetReferrer(bool allow_referrers, // Whitelisted referrers shoud never set the referrer (g_brave_browser_process && g_brave_browser_process->referrer_whitelist_service()->IsWhitelisted( - tab_origin, target_url.GetOrigin()))) { + tab_origin, target_url.GetOrigin()))) { return false; } *output_referrer = Referrer::SanitizeForRequest( diff --git a/components/brave_shields/browser/brave_shields_util.h b/components/brave_shields/browser/brave_shields_util.h index 3a73f10dae6..eab6be22273 100644 --- a/components/brave_shields/browser/brave_shields_util.h +++ b/components/brave_shields/browser/brave_shields_util.h @@ -9,6 +9,7 @@ #include #include +#include "components/content_settings/core/common/content_settings_pattern.h" #include "components/content_settings/core/common/content_settings_types.h" #include "services/network/public/mojom/referrer_policy.mojom.h" @@ -27,6 +28,39 @@ class ProfileIOData; namespace brave_shields { +enum ControlType { ALLOW = 0, BLOCK, BLOCK_THIRD_PARTY, DEFAULT, INVALID }; + +ContentSettingsPattern GetPatternFromURL(const GURL& url, + bool scheme_wildcard = false); +std::string ControlTypeToString(ControlType type); +ControlType ControlTypeFromString(const std::string& string); + +void SetBraveShieldsControlType(Profile* profile, + ControlType type, + const GURL& url); +ControlType GetBraveShieldsControlType(Profile* profile, const GURL& url); + +void SetAdControlType(Profile* profile, ControlType type, const GURL& url); +ControlType GetAdControlType(Profile* profile, const GURL& url); + +void SetCookieControlType(Profile* profile, ControlType type, const GURL& url); +ControlType GetCookieControlType(Profile* profile, const GURL& url); + +void SetFingerprintingControlType(Profile* profile, + ControlType type, + const GURL& url); +ControlType GetFingerprintingControlType(Profile* profile, const GURL& url); + +void SetHTTPSEverywhereControlType(Profile* profile, + ControlType type, + const GURL& url); +ControlType GetHTTPSEverywhereControlType(Profile* profile, const GURL& url); + +void SetNoScriptControlType(Profile* profile, + ControlType type, + const GURL& url); +ControlType GetNoScriptControlType(Profile* profile, const GURL& url); + bool IsAllowContentSettingWithIOData(ProfileIOData* io_data, const GURL& primary_url, const GURL& secondary_url, diff --git a/components/brave_shields/browser/brave_shields_util_unittest.cc b/components/brave_shields/browser/brave_shields_util_unittest.cc new file mode 100644 index 00000000000..6db17035099 --- /dev/null +++ b/components/brave_shields/browser/brave_shields_util_unittest.cc @@ -0,0 +1,1197 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include + +#include "base/macros.h" +#include "brave/components/brave_shields/browser/brave_shields_util.h" +#include "brave/components/brave_shields/common/brave_shield_constants.h" +#include "build/build_config.h" +#include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/test/base/testing_profile.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings_types.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "testing/gtest/include/gtest/gtest.h" + +using brave_shields::ControlType; +using brave_shields::ControlTypeFromString; +using brave_shields::ControlTypeToString; +using brave_shields::GetPatternFromURL; + +class BraveShieldsUtilTest : public testing::Test { + public: + BraveShieldsUtilTest() = default; + ~BraveShieldsUtilTest() override = default; + + void SetUp() override { profile_ = std::make_unique(); } + + TestingProfile* profile() { return profile_.get(); } + + private: + content::TestBrowserThreadBundle test_browser_thread_bundle_; + std::unique_ptr profile_; + + DISALLOW_COPY_AND_ASSIGN(BraveShieldsUtilTest); +}; + +TEST_F(BraveShieldsUtilTest, GetPatternFromURL) { + // wildcard + auto pattern = GetPatternFromURL(GURL()); + EXPECT_EQ(ContentSettingsPattern::Wildcard(), pattern); + + // no scheme wildcard + pattern = GetPatternFromURL(GURL("http://brave.com")); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path1"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path2"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://subdomain.brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave2.com"))); + + pattern = GetPatternFromURL(GURL("http://brave.com/path1")); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path1"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path2"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://subdomain.brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave2.com"))); + + // with scheme wildcard + pattern = GetPatternFromURL(GURL("http://brave.com"), true); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path1"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com/path2"))); + EXPECT_TRUE(pattern.Matches(GURL("https://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://subdomain.brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave2.com"))); + + // with port + pattern = GetPatternFromURL(GURL("http://brave.com:8080")); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080/path1"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080/path2"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com:8080"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://subdomain.brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave2.com"))); + + // with port and scheme wildcard + // scheme wildcard with explicit port is not a valid pattern so this is + // identical to "with port" + pattern = GetPatternFromURL(GURL("http://brave.com:8080"), true); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080/path1"))); + EXPECT_TRUE(pattern.Matches(GURL("http://brave.com:8080/path2"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com:8080"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("https://brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://subdomain.brave.com"))); + EXPECT_FALSE(pattern.Matches(GURL("http://brave2.com:8080"))); +} + +TEST_F(BraveShieldsUtilTest, ControlTypeToString) { + EXPECT_EQ("block", ControlTypeToString(ControlType::BLOCK)); + EXPECT_EQ("allow", ControlTypeToString(ControlType::ALLOW)); + EXPECT_EQ("block_third_party", + ControlTypeToString(ControlType::BLOCK_THIRD_PARTY)); +} + +TEST_F(BraveShieldsUtilTest, ControlTypeFromString) { + EXPECT_EQ(ControlType::BLOCK, ControlTypeFromString("block")); + EXPECT_EQ(ControlType::ALLOW, ControlTypeFromString("allow")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, + ControlTypeFromString("block_third_party")); +} + +/* BRAVE_SHIELDS CONTROL */ +TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // settings should be default + auto setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + /* ALLOW */ + brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetBraveShieldsControlType(profile(), ControlType::BLOCK, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + /* DEFAULT */ + brave_shields::SetBraveShieldsControlType(profile(), ControlType::DEFAULT, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, + GURL("http://brave.com")); + // setting should apply to origin + auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should not apply to default + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_IsNotHttpHttps) { + auto setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("chrome://preferences")); + EXPECT_EQ(ControlType::BLOCK, setting); + brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, + GURL("chrome://preferences")); + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("chrome://preferences")); + EXPECT_EQ(ControlType::BLOCK, setting); + + setting = + brave_shields::GetBraveShieldsControlType(profile(), GURL("about:blank")); + EXPECT_EQ(ControlType::BLOCK, setting); + brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, + GURL("about:blank")); + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("about:blank")); + EXPECT_EQ(ControlType::BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields, CONTENT_SETTING_BLOCK); + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("http://brave.com/*")); + EXPECT_EQ(ControlType::BLOCK, setting); + // https in unchanged + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + // default is unchanged + setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* ALLOW */ + // change default to block + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetBraveShieldsControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + // set override to allow + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kBraveShields, CONTENT_SETTING_ALLOW); + setting = brave_shields::GetBraveShieldsControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + // https in unchanged + setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + // default is unchanged + setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_IsNotHttpHttps) { + auto setting = brave_shields::GetBraveShieldsControlType( + profile(), GURL("chrome://preferences")); + EXPECT_EQ(ControlType::BLOCK, setting); + + setting = + brave_shields::GetBraveShieldsControlType(profile(), GURL("about:blank")); + EXPECT_EQ(ControlType::BLOCK, setting); +} + +/* AD CONTROL */ +TEST_F(BraveShieldsUtilTest, SetAdControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // settings should be default + auto setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + /* ALLOW */ + brave_shields::SetAdControlType(profile(), ControlType::ALLOW, GURL()); + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetAdControlType(profile(), ControlType::BLOCK, GURL()); + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, SetAdControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetAdControlType(profile(), ControlType::ALLOW, + GURL("http://brave.com")); + // setting should apply to origin + auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should not apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + // setting should not apply to default + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kAds); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, GetAdControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope(ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds, CONTENT_SETTING_ALLOW); + setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope(ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds, CONTENT_SETTING_BLOCK); + setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, GetAdControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = + brave_shields::GetAdControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = + brave_shields::GetAdControlType(profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds, CONTENT_SETTING_ALLOW); + setting = + brave_shields::GetAdControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + // https in unchanged + setting = + brave_shields::GetAdControlType(profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + // default is unchanged + setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* BLOCK */ + // change default to allow + map->SetContentSettingCustomScope(ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds, CONTENT_SETTING_ALLOW); + setting = + brave_shields::GetAdControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = + brave_shields::GetAdControlType(profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + // set override to block + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kAds, CONTENT_SETTING_BLOCK); + setting = + brave_shields::GetAdControlType(profile(), GURL("http://brave.com/*")); + EXPECT_EQ(ControlType::BLOCK, setting); + // https in unchanged + setting = + brave_shields::GetAdControlType(profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + // default is unchanged + setting = brave_shields::GetAdControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); +} + +/* COOKIE CONTROL */ +TEST_F(BraveShieldsUtilTest, SetCookieControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // setting should be default to start with + auto setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + /* ALLOW */ + brave_shields::SetCookieControlType(profile(), ControlType::ALLOW, GURL()); + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetCookieControlType(profile(), ControlType::BLOCK, GURL()); + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + /* BLOCK_THIRD_PARTY */ + brave_shields::SetCookieControlType(profile(), ControlType::BLOCK_THIRD_PARTY, + GURL()); + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, SetCookieControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetCookieControlType(profile(), ControlType::ALLOW, + GURL("http://brave.com")); + // override should apply to origin + auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should not apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting( + GURL("https://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + // override should not apply to default + setting = map->GetContentSetting( + GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + // override should not apply to default + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, GetCookieControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_ALLOW); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* BLOCK_THIRD_PARTY */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); +} + +TEST_F(BraveShieldsUtilTest, GetCookieControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies, CONTENT_SETTING_ALLOW); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_ALLOW); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies, CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_BLOCK); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* BLOCK_THIRD_PARTY */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kCookies, CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kCookies, + CONTENT_SETTING_ALLOW); + setting = + brave_shields::GetCookieControlType(profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = brave_shields::GetCookieControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); +} + +/* FINGERPRINTING CONTROL */ +TEST_F(BraveShieldsUtilTest, SetFingerprintingControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // setting should be default to start with + auto setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + /* ALLOW */ + brave_shields::SetFingerprintingControlType(profile(), ControlType::ALLOW, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetFingerprintingControlType(profile(), ControlType::BLOCK, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + /* BLOCK_THIRD_PARTY */ + brave_shields::SetFingerprintingControlType( + profile(), ControlType::BLOCK_THIRD_PARTY, GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should apply to all urls + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, SetFingerprintingControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetFingerprintingControlType(profile(), ControlType::ALLOW, + GURL("http://brave.com")); + // override should apply to origin + auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + setting = map->GetContentSetting( + GURL("http://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should not apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting( + GURL("https://brave.com"), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + // override should not apply to default + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + // override should not apply to default + setting = map->GetContentSetting(GURL(), GURL("https://firstParty"), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, GetFingerprintingControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_ALLOW); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* BLOCK_THIRD_PARTY */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); +} + +TEST_F(BraveShieldsUtilTest, GetFingerprintingControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting, CONTENT_SETTING_ALLOW); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting, CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + + /* BLOCK_THIRD_PARTY */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kFingerprinting, CONTENT_SETTING_BLOCK); + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::FromString("https://firstParty/*"), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kFingerprinting, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetFingerprintingControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); + setting = brave_shields::GetFingerprintingControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK_THIRD_PARTY, setting); +} + +/* HTTPSEVERYWHERE CONTROL */ +TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // settings should be default + auto setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); + + /* ALLOW */ + brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::ALLOW, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::BLOCK, + GURL()); + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::ALLOW, + GURL("http://brave.com")); + // setting should apply to origin + auto setting = map->GetContentSetting( + GURL("http://brave.com"), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should not apply to default + setting = + map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources); + EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); +} + +TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = + brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); +} + +TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = + brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + // https in unchanged + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + // default is unchanged + setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* BLOCK */ + // change default to allow + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + // set override to block + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, + brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_BLOCK); + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("http://brave.com/*")); + EXPECT_EQ(ControlType::BLOCK, setting); + // https in unchanged + setting = brave_shields::GetHTTPSEverywhereControlType( + profile(), GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + // default is unchanged + setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); +} + +/* NOSCRIPT CONTROL */ +TEST_F(BraveShieldsUtilTest, SetNoScriptControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + // settings should be default + auto setting = map->GetContentSetting(GURL(), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + /* BLOCK */ + brave_shields::SetNoScriptControlType(profile(), ControlType::BLOCK, GURL()); + setting = map->GetContentSetting(GURL(), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + /* ALLOW */ + brave_shields::SetNoScriptControlType(profile(), ControlType::ALLOW, GURL()); + setting = map->GetContentSetting(GURL(), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // override should apply to all origins + setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, SetNoScriptControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + brave_shields::SetNoScriptControlType(profile(), ControlType::BLOCK, + GURL("http://brave.com")); + // setting should apply to origin + auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); + + // setting should not apply to different scheme + setting = map->GetContentSetting(GURL("https://brave.com"), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); + + // setting should not apply to default + setting = map->GetContentSetting(GURL(), GURL(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, ""); + EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, GetNoScriptControlType_Default) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", CONTENT_SETTING_BLOCK); + setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + /* ALLOW */ + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", CONTENT_SETTING_ALLOW); + setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); +} + +TEST_F(BraveShieldsUtilTest, GetNoScriptControlType_ForOrigin) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); + + auto setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* BLOCK */ + // set override to block + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", + CONTENT_SETTING_BLOCK); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("http://brave.com/*")); + EXPECT_EQ(ControlType::BLOCK, setting); + // https in unchanged + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("https://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + // default is unchanged + setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::ALLOW, setting); + + /* ALLOW */ + // change default to block + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", CONTENT_SETTING_BLOCK); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); + + map->SetContentSettingCustomScope( + ContentSettingsPattern::FromString("http://brave.com/*"), + ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_JAVASCRIPT, "", + CONTENT_SETTING_ALLOW); + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("http://brave.com")); + EXPECT_EQ(ControlType::ALLOW, setting); + + // https in unchanged + setting = brave_shields::GetNoScriptControlType(profile(), + GURL("https://brave.com")); + EXPECT_EQ(ControlType::BLOCK, setting); + // default is unchanged + setting = brave_shields::GetNoScriptControlType(profile(), GURL()); + EXPECT_EQ(ControlType::BLOCK, setting); +} diff --git a/components/definitions/chromel.d.ts b/components/definitions/chromel.d.ts index b2f783d74fd..19eed062bb7 100644 --- a/components/definitions/chromel.d.ts +++ b/components/definitions/chromel.d.ts @@ -185,8 +185,18 @@ declare namespace chrome.braveShields { } const allowScriptsOnce: any - const javascript: any - const plugins: any + const setBraveShieldsControlTypeAsync: any + const getBraveShieldsControlTypeAsync: any + const setAdControlTypeAsync: any + const getAdControlTypeAsync: any + const setCookieControlTypeAsync: any + const getCookieControlTypeAsync: any + const setFingerprintingControlTypeAsync: any + const getFingerprintingControlTypeAsync: any + const setHTTPSEverywhereControlTypeAsync: any + const getHTTPSEverywhereControlTypeAsync: any + const setNoScriptControlTypeAsync: any + const getNoScriptControlTypeAsync: any type BraveShieldsViewPreferences = { showAdvancedView: boolean diff --git a/components/test/brave_extension/background/api/shieldsAPI_test.ts b/components/test/brave_extension/background/api/shieldsAPI_test.ts index 72282c2d3b8..178948e72db 100644 --- a/components/test/brave_extension/background/api/shieldsAPI_test.ts +++ b/components/test/brave_extension/background/api/shieldsAPI_test.ts @@ -6,7 +6,6 @@ import actions from '../../../../brave_extension/extension/brave_extension/backg import * as shieldsAPI from '../../../../brave_extension/extension/brave_extension/background/api/shieldsAPI' import { activeTabData } from '../../../testData' // import { Tab as TabType } from '../../../types/state/shieldsPannelState' -import * as resourceIdentifiers from '../../../../brave_extension/extension/brave_extension/constants/resourceIdentifiers' describe('Shields API', () => { describe('getShieldSettingsForTabData', () => { @@ -51,75 +50,6 @@ describe('Shields API', () => { console.error(e.toString()) }) }) - - it('returns `block` by default for braveShields', (cb) => { - const tab: chrome.tabs.Tab = { - url: 'https://www.brave.com/charizard/knows/serg', - index: 1, - pinned: false, - highlighted: false, - windowId: 1, - active: true, - incognito: false, - selected: false, - id: 1337 - } - - expect.assertions(1) - shieldsAPI.getShieldSettingsForTabData(tab).then((data) => { - expect(data.braveShields).toBe('block') - cb() - }) - .catch((e: Error) => { - console.error(e.toString()) - }) - }) - - it('returns `block` by default for braveShields when origin is not http or https', (cb) => { - const tab: chrome.tabs.Tab = { - url: 'ftp://www.brave.com/serg/dont/know/pikachu', - index: 1, - pinned: false, - highlighted: false, - windowId: 1, - active: true, - incognito: false, - selected: false, - id: 1337 - } - - expect.assertions(1) - shieldsAPI.getShieldSettingsForTabData(tab).then((data) => { - expect(data.braveShields).toBe('block') - cb() - }) - .catch((e: Error) => { - console.error(e.toString()) - }) - }) - - it('returns `block` by default for braveShields when origin is an about page', (cb) => { - const tab: chrome.tabs.Tab = { - url: 'chrome://welcome', - index: 1, - pinned: false, - highlighted: false, - windowId: 1, - active: true, - incognito: false, - selected: false, - id: 1337 - } - - expect.assertions(1) - shieldsAPI.getShieldSettingsForTabData(tab).then((data) => { - expect(data.braveShields).toBe('block') - cb() - }) - .catch((e: Error) => { - console.error(e.toString()) - }) - }) }) describe('getTabData', () => { @@ -191,265 +121,105 @@ describe('Shields API', () => { describe('setAllowAds', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.plugins, 'setAsync') + spy = jest.spyOn(chrome.braveShields, 'setAdControlTypeAsync') }) afterEach(() => { spy.mockRestore() }) - it('calls chrome.braveShields.plugins with the correct args', () => { + it('calls chrome.braveShields.setAdControlTypeAsync with the correct args', () => { shieldsAPI.setAllowAds('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) }) const arg0 = spy.mock.calls[0][0] - expect.assertions(1) - expect(arg0).toEqual({ - primaryPattern: 'https://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS }, - setting: 'block', - scope: 'incognito_session_only' - }) - }) - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowAds('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - expect.assertions(1) - expect(spy.mock.calls[0].length).toBe(1) - }) - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowAds('https://www.brave.com', 'block') - .then(cb) - .catch((e: Error) => { - console.error(e.toString()) - }) - }) - }) - - describe('setAllowTrackers', () => { - let spy: jest.SpyInstance - beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.plugins, 'setAsync') - }) - afterEach(() => { - spy.mockRestore() - }) - it('calls chrome.braveShields.plugins with the correct args', () => { - shieldsAPI.setAllowTrackers('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - const arg0 = spy.mock.calls[0][0] - expect.assertions(1) - expect(arg0).toEqual({ - primaryPattern: 'https://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS }, - setting: 'block', - scope: 'incognito_session_only' - }) - }) - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowTrackers('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - expect.assertions(1) - expect(spy.mock.calls[0].length).toBe(1) - }) - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowTrackers('https://www.brave.com', 'block') - .then(cb) - .catch((e: Error) => { - console.error(e.toString()) - }) + const arg1 = spy.mock.calls[0][1] + expect.assertions(2) + expect(arg0).toEqual('block') + expect(arg1).toEqual('https://www.brave.com') }) }) describe('setAllowHTTPUpgradableResource', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.plugins, 'setAsync') + spy = jest.spyOn(chrome.braveShields, 'setHTTPSEverywhereControlTypeAsync') }) afterEach(() => { spy.mockRestore() }) - it('calls chrome.braveShields.plugins with the correct args', () => { + it('calls chrome.braveShields.setHTTPSEverywhereControlTypeAsync with the correct args', () => { shieldsAPI.setAllowHTTPUpgradableResources('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) }) const arg0 = spy.mock.calls[0][0] - expect.assertions(1) - expect(arg0).toEqual({ - primaryPattern: '*://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES }, - setting: 'block', - scope: 'incognito_session_only' - }) - }) - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowHTTPUpgradableResources('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - expect.assertions(1) - expect(spy.mock.calls[0].length).toBe(1) - }) - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowHTTPUpgradableResources('https://www.brave.com', 'block') - .then(cb) - .catch((e: Error) => { - console.error(e.toString()) - }) + const arg1 = spy.mock.calls[0][1] + expect.assertions(2) + expect(arg0).toEqual('block') + expect(arg1).toEqual('https://www.brave.com') }) }) describe('setAllowJavaScript', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.javascript, 'setAsync') + spy = jest.spyOn(chrome.braveShields, 'setNoScriptControlTypeAsync') }) afterEach(() => { spy.mockRestore() }) - - it('calls chrome.braveShields.plugins with the correct args', () => { + it('calls chrome.braveShields.setNoScriptControlTypeAsync with the correct args', () => { shieldsAPI.setAllowJavaScript('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) }) const arg0 = spy.mock.calls[0][0] - expect.assertions(1) - expect(arg0).toEqual({ - primaryPattern: 'https://www.brave.com/*', - setting: 'block', - scope: 'incognito_session_only' - }) - }) - - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowJavaScript('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - expect.assertions(1) - expect(spy.mock.calls[0].length).toBe(1) - }) - - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowJavaScript('https://www.brave.com', 'block') - .then(cb) - .catch((e: Error) => { - console.error(e.toString()) - }) + const arg1 = spy.mock.calls[0][1] + expect.assertions(2) + expect(arg0).toEqual('block') + expect(arg1).toEqual('https://www.brave.com') }) }) describe('setAllowFingerprinting', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.plugins, 'setAsync') + spy = jest.spyOn(chrome.braveShields, 'setFingerprintingControlTypeAsync') }) afterEach(() => { spy.mockRestore() }) - it('calls chrome.braveShields.plugins with the correct args', () => { + it('calls chrome.braveShields.setFingerprintingControlTypeAsync with the correct args', () => { shieldsAPI.setAllowFingerprinting('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) }) const arg0 = spy.mock.calls[0][0] + const arg1 = spy.mock.calls[0][1] expect.assertions(2) - expect(arg0).toEqual({ - primaryPattern: 'https://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, - setting: 'block', - scope: 'incognito_session_only' - }) - const arg1 = spy.mock.calls[1][0] - expect(arg1).toEqual({ - primaryPattern: 'https://www.brave.com/*', - secondaryPattern: 'https://firstParty/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, - setting: 'block', - scope: 'incognito_session_only' - }) - }) - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowFingerprinting('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) - expect.assertions(2) - expect(spy.mock.calls[0].length).toBe(1) - expect(spy.mock.calls[1].length).toBe(1) - }) - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowFingerprinting('https://www.brave.com', 'block') - .then(function () { - cb() - }) - .catch((e: Error) => { - console.error(e.toString()) - }) + expect(arg0).toEqual('block') + expect(arg1).toEqual('https://www.brave.com') }) }) describe('setAllowCookies', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields.plugins, 'setAsync') + spy = jest.spyOn(chrome.braveShields, 'setCookieControlTypeAsync') }) afterEach(() => { spy.mockRestore() }) - it('calls chrome.braveShields.plugins with the correct args', () => { + it('calls chrome.braveShields.setCookieControlTypeAsync with the correct args', () => { shieldsAPI.setAllowCookies('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) }) const arg0 = spy.mock.calls[0][0] - expect.assertions(3) - expect(arg0).toEqual({ - primaryPattern: 'https://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_REFERRERS }, - setting: 'block', - scope: 'incognito_session_only' - }) - const arg1 = spy.mock.calls[1][0] - expect(arg1).toEqual({ - primaryPattern: 'https://www.brave.com/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES }, - setting: 'block', - scope: 'incognito_session_only' - }) - const arg2 = spy.mock.calls[2][0] - expect(arg2).toEqual({ - primaryPattern: 'https://www.brave.com/*', - secondaryPattern: 'https://firstParty/*', - resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_COOKIES }, - setting: 'block', - scope: 'incognito_session_only' - }) - }) - it('passes only 1 arg to chrome.braveShields.plugins', () => { - shieldsAPI.setAllowCookies('https://www.brave.com', 'block') - .catch(() => { - expect(true).toBe(false) - }) + const arg1 = spy.mock.calls[0][1] expect.assertions(2) - expect(spy.mock.calls[0].length).toBe(1) - expect(spy.mock.calls[1].length).toBe(1) - }) - it('resolves the returned promise', (cb) => { - shieldsAPI.setAllowCookies('https://www.brave.com', 'block') - .then(() => { - cb() - }) - .catch((e: Error) => { - console.error(e.toString()) - }) + expect(arg0).toEqual('block') + expect(arg1).toEqual('https://www.brave.com') }) }) diff --git a/components/test/brave_extension/helpers/urlUtils_test.ts b/components/test/brave_extension/helpers/urlUtils_test.ts index 313a4a8102d..68318c12649 100644 --- a/components/test/brave_extension/helpers/urlUtils_test.ts +++ b/components/test/brave_extension/helpers/urlUtils_test.ts @@ -4,7 +4,6 @@ import { isHttpOrHttps, - hasPortNumber, getOrigin, getHostname, stripProtocolFromUrl @@ -45,17 +44,6 @@ describe('urlUtils test', () => { expect(isHttpOrHttps(url)).toBe(true) }) }) - describe('hasPortNumber', () => { - it('not a port number if # is located in front of :XXXX', () => { - const url = 'http://brianbondy.com#:8080' - expect(hasPortNumber(url)).toBe(false) - }) - it('port number if # is not existed in front of :XXXX', () => { - const url = 'http://brianbondy.com:8080' - expect(hasPortNumber(url)).toBe(true) - expect(isHttpOrHttps(url)).toBe(true) - }) - }) describe('getOrigin', () => { it('properly gets the origin from an URL', () => { const url = 'https://pokemons-invading-tests-breaking-stuff.com/you-knew-that.js' diff --git a/components/test/testData.ts b/components/test/testData.ts index 37789cc903d..1164de71874 100644 --- a/components/test/testData.ts +++ b/components/test/testData.ts @@ -209,25 +209,41 @@ export const getMockChrome = () => { allowScriptsOnce: function (origins: Array, tabId: number, cb: () => void) { setImmediate(cb) }, - plugins: { - setAsync: function () { - return Promise.resolve() - }, - getAsync: function () { - return Promise.resolve({ - setting: 'block' - }) - } + getBraveShieldsControlTypeAsync: function (url: string) { + return Promise.resolve('block') }, - javascript: { - setAsync: function () { - return Promise.resolve() - }, - getAsync: function () { - return Promise.resolve({ - setting: 'block' - }) - } + getAdControlTypeAsync: function (url: string) { + return Promise.resolve('block') + }, + getCookieControlTypeAsync: function (url: string) { + return Promise.resolve('block') + }, + getFingerprintingControlTypeAsync: function (url: string) { + return Promise.resolve('block') + }, + getHTTPSEverywhereControlTypeAsync: function (url: string) { + return Promise.resolve('block') + }, + getNoScriptControlTypeAsync: function (url: string) { + return Promise.resolve('block') + }, + setBraveShieldsControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) + }, + setAdControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) + }, + setCookieControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) + }, + setFingerprintingControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) + }, + setHTTPSEverywhereControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) + }, + setNoScriptControlTypeAsync: function (url: string, controlType: string) { + return new Promise(() => []) } }, i18n: { diff --git a/test/BUILD.gn b/test/BUILD.gn index 0e84cc85575..7e769cd957b 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -90,6 +90,7 @@ test("brave_unit_tests") { "//brave/common/shield_exceptions_unittest.cc", "//brave/components/assist_ranker/ranker_model_loader_impl_unittest.cc", "//brave/components/brave_shields/browser/ad_block_regional_service_unittest.cc", + "//brave/components/brave_shields/browser/brave_shields_util_unittest.cc", "//brave/components/brave_shields/browser/https_everywhere_recently_used_cache_unittest.cpp", "//brave/components/brave_webtorrent/browser/net/brave_torrent_redirect_network_delegate_helper_unittest.cc", "//brave/components/invalidation/fcm_unittest.cc", From 8eb29bddbfd73df96f894effb437d3e6e5a519ed Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 30 Jul 2019 16:00:15 -0700 Subject: [PATCH 2/2] add callbacks for extension set* methods change brave shields method names for clarity fix https://github.com/brave/brave-browser/issues/5470 --- browser/extensions/api/brave_shields_api.cc | 46 ++-- browser/extensions/api/brave_shields_api.h | 24 +- .../default_brave_shields_browser_proxy.js | 6 +- .../default_brave_shields_page.js | 2 +- .../settings/default_brave_shields_handler.cc | 13 +- .../settings/default_brave_shields_handler.h | 7 +- common/extensions/api/brave_shields.json | 60 ++++- .../extension/brave_extension/background.ts | 2 +- .../background/api/shieldsAPI.ts | 17 +- .../components/advancedView/header.tsx | 9 +- .../browser/brave_shields_util.cc | 69 ++++-- .../browser/brave_shields_util.h | 17 +- .../browser/brave_shields_util_unittest.cc | 231 +++++++++--------- components/definitions/chromel.d.ts | 8 +- .../background/api/shieldsAPI_test.ts | 6 +- components/test/testData.ts | 12 +- 16 files changed, 290 insertions(+), 239 deletions(-) diff --git a/browser/extensions/api/brave_shields_api.cc b/browser/extensions/api/brave_shields_api.cc index 4b06be89fa7..b979bcef50e 100644 --- a/browser/extensions/api/brave_shields_api.cc +++ b/browser/extensions/api/brave_shields_api.cc @@ -56,9 +56,9 @@ ExtensionFunction::ResponseAction BraveShieldsAllowScriptsOnceFunction::Run() { } ExtensionFunction::ResponseAction -BraveShieldsSetBraveShieldsControlTypeFunction::Run() { - std::unique_ptr params( - brave_shields::SetBraveShieldsControlType::Params::Create(*args_)); +BraveShieldsSetBraveShieldsEnabledFunction::Run() { + std::unique_ptr params( + brave_shields::SetBraveShieldsEnabled::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); const GURL url(params->url); @@ -67,21 +67,16 @@ BraveShieldsSetBraveShieldsControlTypeFunction::Run() { return RespondNow(Error(kInvalidUrlError, params->url)); } - auto control_type = ControlTypeFromString(params->control_type); - if (control_type == ControlType::INVALID) { - return RespondNow(Error(kInvalidControlTypeError, params->control_type)); - } - Profile* profile = Profile::FromBrowserContext(browser_context()); - ::brave_shields::SetBraveShieldsControlType(profile, control_type, url); + ::brave_shields::SetBraveShieldsEnabled(profile, params->enabled, url); return RespondNow(NoArguments()); } ExtensionFunction::ResponseAction -BraveShieldsGetBraveShieldsControlTypeFunction::Run() { - std::unique_ptr params( - brave_shields::GetBraveShieldsControlType::Params::Create(*args_)); +BraveShieldsGetBraveShieldsEnabledFunction::Run() { + std::unique_ptr params( + brave_shields::GetBraveShieldsEnabled::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); const GURL url(params->url); @@ -91,8 +86,8 @@ BraveShieldsGetBraveShieldsControlTypeFunction::Run() { } Profile* profile = Profile::FromBrowserContext(browser_context()); - auto type = ::brave_shields::GetBraveShieldsControlType(profile, url); - auto result = std::make_unique(ControlTypeToString(type)); + auto enabled = ::brave_shields::GetBraveShieldsEnabled(profile, url); + auto result = std::make_unique(enabled); return RespondNow(OneArgument(std::move(result))); } @@ -222,9 +217,9 @@ BraveShieldsGetFingerprintingControlTypeFunction::Run() { } ExtensionFunction::ResponseAction -BraveShieldsSetHTTPSEverywhereControlTypeFunction::Run() { - std::unique_ptr params( - brave_shields::SetHTTPSEverywhereControlType::Params::Create(*args_)); +BraveShieldsSetHTTPSEverywhereEnabledFunction::Run() { + std::unique_ptr params( + brave_shields::SetHTTPSEverywhereEnabled::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); const GURL url(params->url); @@ -233,21 +228,16 @@ BraveShieldsSetHTTPSEverywhereControlTypeFunction::Run() { return RespondNow(Error(kInvalidUrlError, params->url)); } - auto control_type = ControlTypeFromString(params->control_type); - if (control_type == ControlType::INVALID) { - return RespondNow(Error(kInvalidControlTypeError, params->control_type)); - } - Profile* profile = Profile::FromBrowserContext(browser_context()); - ::brave_shields::SetHTTPSEverywhereControlType(profile, control_type, url); + ::brave_shields::SetHTTPSEverywhereEnabled(profile, params->enabled, url); return RespondNow(NoArguments()); } ExtensionFunction::ResponseAction -BraveShieldsGetHTTPSEverywhereControlTypeFunction::Run() { - std::unique_ptr params( - brave_shields::GetHTTPSEverywhereControlType::Params::Create(*args_)); +BraveShieldsGetHTTPSEverywhereEnabledFunction::Run() { + std::unique_ptr params( + brave_shields::GetHTTPSEverywhereEnabled::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); const GURL url(params->url); @@ -257,8 +247,8 @@ BraveShieldsGetHTTPSEverywhereControlTypeFunction::Run() { } Profile* profile = Profile::FromBrowserContext(browser_context()); - auto type = ::brave_shields::GetHTTPSEverywhereControlType(profile, url); - auto result = std::make_unique(ControlTypeToString(type)); + auto type = ::brave_shields::GetHTTPSEverywhereEnabled(profile, url); + auto result = std::make_unique(type); return RespondNow(OneArgument(std::move(result))); } diff --git a/browser/extensions/api/brave_shields_api.h b/browser/extensions/api/brave_shields_api.h index 509ca0ac304..59380d2de9e 100644 --- a/browser/extensions/api/brave_shields_api.h +++ b/browser/extensions/api/brave_shields_api.h @@ -21,24 +21,24 @@ class BraveShieldsAllowScriptsOnceFunction : public UIThreadExtensionFunction { ResponseAction Run() override; }; -class BraveShieldsSetBraveShieldsControlTypeFunction +class BraveShieldsSetBraveShieldsEnabledFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.setBraveShieldsControlType", UNKNOWN) + DECLARE_EXTENSION_FUNCTION("braveShields.setBraveShieldsEnabled", UNKNOWN) protected: - ~BraveShieldsSetBraveShieldsControlTypeFunction() override {} + ~BraveShieldsSetBraveShieldsEnabledFunction() override {} ResponseAction Run() override; }; -class BraveShieldsGetBraveShieldsControlTypeFunction +class BraveShieldsGetBraveShieldsEnabledFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.getBraveShieldsControlType", UNKNOWN) + DECLARE_EXTENSION_FUNCTION("braveShields.getBraveShieldsEnabled", UNKNOWN) protected: - ~BraveShieldsGetBraveShieldsControlTypeFunction() override {} + ~BraveShieldsGetBraveShieldsEnabledFunction() override {} ResponseAction Run() override; }; @@ -109,26 +109,26 @@ class BraveShieldsGetFingerprintingControlTypeFunction ResponseAction Run() override; }; -class BraveShieldsSetHTTPSEverywhereControlTypeFunction +class BraveShieldsSetHTTPSEverywhereEnabledFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.setHTTPSEverywhereControlType", + DECLARE_EXTENSION_FUNCTION("braveShields.setHTTPSEverywhereEnabled", UNKNOWN) protected: - ~BraveShieldsSetHTTPSEverywhereControlTypeFunction() override {} + ~BraveShieldsSetHTTPSEverywhereEnabledFunction() override {} ResponseAction Run() override; }; -class BraveShieldsGetHTTPSEverywhereControlTypeFunction +class BraveShieldsGetHTTPSEverywhereEnabledFunction : public UIThreadExtensionFunction { public: - DECLARE_EXTENSION_FUNCTION("braveShields.getHTTPSEverywhereControlType", + DECLARE_EXTENSION_FUNCTION("braveShields.getHTTPSEverywhereEnabled", UNKNOWN) protected: - ~BraveShieldsGetHTTPSEverywhereControlTypeFunction() override {} + ~BraveShieldsGetHTTPSEverywhereEnabledFunction() override {} ResponseAction Run() override; }; diff --git a/browser/resources/settings/default_brave_shields_page/default_brave_shields_browser_proxy.js b/browser/resources/settings/default_brave_shields_page/default_brave_shields_browser_proxy.js index f4635c7bb49..77e1a38027c 100644 --- a/browser/resources/settings/default_brave_shields_page/default_brave_shields_browser_proxy.js +++ b/browser/resources/settings/default_brave_shields_page/default_brave_shields_browser_proxy.js @@ -35,7 +35,7 @@ cr.define('settings', function() { /** * @param {string} value name. */ - setHTTPSEverywhereControlType(value) {} + setHTTPSEverywhereEnabled(value) {} /** * @param {string} value name. @@ -78,8 +78,8 @@ cr.define('settings', function() { } /** @override */ - setHTTPSEverywhereControlType(value) { - chrome.send('setHTTPSEverywhereControlType', [value]); + setHTTPSEverywhereEnabled(value) { + chrome.send('setHTTPSEverywhereEnabled', [value]); } /** @override */ diff --git a/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js b/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js index 06e8ad9be1c..dbb3924e689 100644 --- a/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js +++ b/browser/resources/settings/default_brave_shields_page/default_brave_shields_page.js @@ -85,7 +85,7 @@ Polymer({ this.browserProxy_.setFingerprintingControlType(this.$.fingerprintingControlType.value); }, onHTTPSEverywhereControlChange_: function() { - this.browserProxy_.setHTTPSEverywhereControlType(this.$.httpsEverywhereControlType.checked); + this.browserProxy_.setHTTPSEverywhereEnabled(this.$.httpsEverywhereControlType.checked); }, onNoScriptControlChange_: function() { this.browserProxy_.setNoScriptControlType(this.$.noScriptControlType.checked); diff --git a/browser/ui/webui/settings/default_brave_shields_handler.cc b/browser/ui/webui/settings/default_brave_shields_handler.cc index 1d9241c6b59..22ab715b4b5 100644 --- a/browser/ui/webui/settings/default_brave_shields_handler.cc +++ b/browser/ui/webui/settings/default_brave_shields_handler.cc @@ -46,9 +46,9 @@ void DefaultBraveShieldsHandler::RegisterMessages() { &DefaultBraveShieldsHandler::SetFingerprintingControlType, base::Unretained(this))); web_ui()->RegisterMessageCallback( - "setHTTPSEverywhereControlType", + "setHTTPSEverywhereEnabled", base::BindRepeating( - &DefaultBraveShieldsHandler::SetHTTPSEverywhereControlType, + &DefaultBraveShieldsHandler::SetHTTPSEverywhereEnabled, base::Unretained(this))); web_ui()->RegisterMessageCallback( "setNoScriptControlType", @@ -131,17 +131,16 @@ void DefaultBraveShieldsHandler::SetFingerprintingControlType( GURL()); } -void DefaultBraveShieldsHandler::SetHTTPSEverywhereControlType( +void DefaultBraveShieldsHandler::SetHTTPSEverywhereEnabled( const base::ListValue* args) { CHECK_EQ(args->GetSize(), 1U); CHECK(profile_); bool value; args->GetBoolean(0, &value); - brave_shields::SetHTTPSEverywhereControlType(profile_, - value ? ControlType::BLOCK - : ControlType::ALLOW, - GURL()); + brave_shields::SetHTTPSEverywhereEnabled(profile_, + value, + GURL()); } void DefaultBraveShieldsHandler::SetNoScriptControlType( diff --git a/browser/ui/webui/settings/default_brave_shields_handler.h b/browser/ui/webui/settings/default_brave_shields_handler.h index a2711cc5119..37955d80a24 100644 --- a/browser/ui/webui/settings/default_brave_shields_handler.h +++ b/browser/ui/webui/settings/default_brave_shields_handler.h @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -26,8 +27,8 @@ class DefaultBraveShieldsHandler : public settings::SettingsPageUIHandler { void GetCookieControlType(const base::ListValue* args); void SetFingerprintingControlType(const base::ListValue* args); void GetFingerprintingControlType(const base::ListValue* args); - void SetHTTPSEverywhereControlType(const base::ListValue* args); - void GetHTTPSEverywhereControlType(const base::ListValue* args); + void SetHTTPSEverywhereEnabled(const base::ListValue* args); + void GetHTTPSEverywhereEnabled(const base::ListValue* args); void SetNoScriptControlType(const base::ListValue* args); void GetNoScriptControlType(const base::ListValue* args); diff --git a/common/extensions/api/brave_shields.json b/common/extensions/api/brave_shields.json index f60b6008ac4..e52b041cfd4 100644 --- a/common/extensions/api/brave_shields.json +++ b/common/extensions/api/brave_shields.json @@ -29,22 +29,28 @@ ], "functions": [ { - "name": "setBraveShieldsControlType", + "name": "setBraveShieldsEnabled", "type": "function", "description": "Set brave shields control type for a url", "parameters": [ { - "name": "controlType", - "type": "string" + "name": "enabled", + "type": "boolean" }, { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, { - "name": "getBraveShieldsControlType", + "name": "getBraveShieldsEnabled", "type": "function", "description": "Get brave shields control type for a url", "parameters": [ @@ -57,8 +63,8 @@ "name": "callback", "parameters": [ { - "name": "controlType", - "type": "string" + "name": "enabled", + "type": "boolean" } ] } @@ -76,6 +82,12 @@ { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, @@ -112,6 +124,12 @@ { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, @@ -148,6 +166,12 @@ { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, @@ -173,22 +197,28 @@ ] }, { - "name": "setHTTPSEverywhereControlType", + "name": "setHTTPSEverywhereEnabled", "type": "function", "description": "Set httpse control type for a url", "parameters": [ { - "name": "controlType", - "type": "string" + "name": "enabled", + "type": "boolean" }, { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, { - "name": "getHTTPSEverywhereControlType", + "name": "getHTTPSEverywhereEnabled", "type": "function", "description": "Get httpse control type for a url", "parameters": [ @@ -201,8 +231,8 @@ "name": "callback", "parameters": [ { - "name": "controlType", - "type": "string" + "name": "enabled", + "type": "boolean" } ] } @@ -220,6 +250,12 @@ { "name": "url", "type": "string" + }, + { + "type": "function", + "name": "callback", + "optional": true, + "parameters": [] } ] }, diff --git a/components/brave_extension/extension/brave_extension/background.ts b/components/brave_extension/extension/brave_extension/background.ts index 35ee4f1de77..d7cb83657df 100644 --- a/components/brave_extension/extension/brave_extension/background.ts +++ b/components/brave_extension/extension/brave_extension/background.ts @@ -7,7 +7,7 @@ global.Promise = bluebird function promisifier (method: any) { // return a function - return function promisified (...args: string[]) { + return function promisified (...args: any[]) { // which returns a promise return new Promise((resolve: any) => { args.push(resolve) diff --git a/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts b/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts index 4f73fec4a32..c8b0be4a8fe 100644 --- a/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts +++ b/components/brave_extension/extension/brave_extension/background/api/shieldsAPI.ts @@ -22,9 +22,9 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { const hostname = url.hostname return Promise.all([ - chrome.braveShields.getBraveShieldsControlTypeAsync(tabData.url), + chrome.braveShields.getBraveShieldsEnabledAsync(tabData.url), chrome.braveShields.getAdControlTypeAsync(tabData.url), - chrome.braveShields.getHTTPSEverywhereControlTypeAsync(tabData.url), + chrome.braveShields.getHTTPSEverywhereEnabledAsync(tabData.url), chrome.braveShields.getNoScriptControlTypeAsync(tabData.url), chrome.braveShields.getFingerprintingControlTypeAsync(tabData.url), chrome.braveShields.getCookieControlTypeAsync(tabData.url) @@ -34,10 +34,10 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { origin, hostname, id: tabData.id, - braveShields: details[0], + braveShields: details[0] ? 'allow' : 'block', ads: details[1], trackers: details[1], - httpUpgradableResources: details[2], + httpUpgradableResources: details[2] ? 'block' : 'allow', javascript: details[3], fingerprinting: details[4], cookies: details[5] @@ -84,7 +84,7 @@ export const requestShieldPanelData = (tabId: number) => * @return a promise which resolves when the setting is set */ export const setAllowBraveShields = (origin: string, setting: string) => - chrome.braveShields.setBraveShieldsControlTypeAsync(setting, origin) + chrome.braveShields.setBraveShieldsEnabledAsync(setting === 'allow' ? true : false, origin) /** * Changes the ads at origin to be allowed or blocked. @@ -103,8 +103,9 @@ export const setAllowAds = (origin: string, setting: string) => * @param {string} setting 'allow' or 'block' * @return a promise which resolves with the setting is set */ -export const setAllowTrackers = (origin: string, setting: string) => - chrome.braveShields.setAdControlTypeAsync(setting, origin) +export const setAllowTrackers = (origin: string, setting: string) => { + return chrome.braveShields.setAdControlTypeAsync(setting, origin) +} /** * Changes the http upgrdabable resources to be allows as is or blocked. @@ -113,7 +114,7 @@ export const setAllowTrackers = (origin: string, setting: string) => * @return a promise which resolves when the setting is set */ export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOptions) => - chrome.braveShields.setHTTPSEverywhereControlTypeAsync(setting, origin) + chrome.braveShields.setHTTPSEverywhereEnabledAsync(setting === 'allow' ? false : true, origin) /** * Changes the Javascript to be on (allow) or off (block) diff --git a/components/brave_extension/extension/brave_extension/components/advancedView/header.tsx b/components/brave_extension/extension/brave_extension/components/advancedView/header.tsx index 4c1194278b0..4f0ba5d17fe 100644 --- a/components/brave_extension/extension/brave_extension/components/advancedView/header.tsx +++ b/components/brave_extension/extension/brave_extension/components/advancedView/header.tsx @@ -28,8 +28,7 @@ import { import { getLocale } from '../../background/api/localeAPI' import { blockedResourcesSize, - getTotalBlockedSizeStrings, - getToggleStateViaEventTarget + getTotalBlockedSizeStrings } from '../../helpers/shieldsUtils' // Types @@ -71,8 +70,8 @@ export default class Header extends React.PureComponent { return getTotalBlockedSizeStrings(this.blockedItemsSize, httpsUpgrades) } - onToggleShields = (event: React.ChangeEvent) => { - const shieldsOption: BlockOptions = getToggleStateViaEventTarget(event) + onToggleShieldsMain = (event: React.ChangeEvent) => { + const shieldsOption: BlockOptions = event.target.checked ? 'allow' : 'block' this.props.shieldsToggled(shieldsOption) } @@ -91,7 +90,7 @@ export default class Header extends React.PureComponent { {enabled ? {getLocale('enabledMessage')} : null} - + diff --git a/components/brave_shields/browser/brave_shields_util.cc b/components/brave_shields/browser/brave_shields_util.cc index 364b7c13884..9cc76fec838 100644 --- a/components/brave_shields/browser/brave_shields_util.cc +++ b/components/brave_shields/browser/brave_shields_util.cc @@ -97,11 +97,27 @@ ControlType ControlTypeFromString(const std::string& string) { } } -void SetBraveShieldsControlType(Profile* profile, - ControlType type, - const GURL& url) { - DCHECK(type != ControlType::BLOCK_THIRD_PARTY); +void SetBraveShieldsEnabled(Profile* profile, + bool enable, + const GURL& url) { + if (url.is_valid() && !url.SchemeIsHTTPOrHTTPS()) + return; + + auto primary_pattern = GetPatternFromURL(url, true); + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kBraveShields, + // this is 'allow_brave_shields' so 'enable' == 'allow' + enable ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); +} + +void ResetBraveShieldsEnabled(Profile* profile, + const GURL& url) { if (url.is_valid() && !url.SchemeIsHTTPOrHTTPS()) return; @@ -114,27 +130,28 @@ void SetBraveShieldsControlType(Profile* profile, ->SetContentSettingCustomScope( primary_pattern, ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, kBraveShields, - GetDefaultAllowFromControlType(type)); + CONTENT_SETTING_DEFAULT); } -ControlType GetBraveShieldsControlType(Profile* profile, const GURL& url) { +bool GetBraveShieldsEnabled(Profile* profile, const GURL& url) { if (url.is_valid() && !url.SchemeIsHTTPOrHTTPS()) - return ControlType::BLOCK; + return false; ContentSetting setting = HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kBraveShields); - return setting == CONTENT_SETTING_BLOCK ? ControlType::BLOCK - : ControlType::ALLOW; + // see EnableBraveShields - allow and default == true + return setting == CONTENT_SETTING_BLOCK ? false : true; } void SetAdControlType(Profile* profile, ControlType type, const GURL& url) { DCHECK(type != ControlType::BLOCK_THIRD_PARTY); auto primary_pattern = GetPatternFromURL(url); - if (!primary_pattern.IsValid()) + if (!primary_pattern.IsValid()) { return; + } HostContentSettingsMapFactory::GetForProfile(profile) ->SetContentSettingCustomScope(primary_pattern, @@ -239,10 +256,9 @@ ControlType GetFingerprintingControlType(Profile* profile, const GURL& url) { } } -void SetHTTPSEverywhereControlType(Profile* profile, - ControlType type, - const GURL& url) { - DCHECK(type != ControlType::BLOCK_THIRD_PARTY); +void SetHTTPSEverywhereEnabled(Profile* profile, + bool enable, + const GURL& url) { auto primary_pattern = GetPatternFromURL(url, true); if (!primary_pattern.IsValid()) @@ -252,17 +268,32 @@ void SetHTTPSEverywhereControlType(Profile* profile, ->SetContentSettingCustomScope( primary_pattern, ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, kHTTPUpgradableResources, - type == ControlType::ALLOW ? CONTENT_SETTING_ALLOW - : CONTENT_SETTING_BLOCK); + // this is 'allow_http_upgradeable_resources' so enabling + // httpse will set the value to 'BLOCK' + enable ? CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW); } -ControlType GetHTTPSEverywhereControlType(Profile* profile, const GURL& url) { +void ResetHTTPSEverywhereEnabled(Profile* profile, + bool enable, + const GURL& url) { + auto primary_pattern = GetPatternFromURL(url, true); + + if (!primary_pattern.IsValid()) + return; + + HostContentSettingsMapFactory::GetForProfile(profile) + ->SetContentSettingCustomScope( + primary_pattern, ContentSettingsPattern::Wildcard(), + CONTENT_SETTINGS_TYPE_PLUGINS, kHTTPUpgradableResources, + CONTENT_SETTING_DEFAULT); +} + +bool GetHTTPSEverywhereEnabled(Profile* profile, const GURL& url) { ContentSetting setting = HostContentSettingsMapFactory::GetForProfile(profile)->GetContentSetting( url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kHTTPUpgradableResources); - return setting == CONTENT_SETTING_ALLOW ? ControlType::ALLOW - : ControlType::BLOCK; + return setting == CONTENT_SETTING_ALLOW ? false : true; } void SetNoScriptControlType(Profile* profile, diff --git a/components/brave_shields/browser/brave_shields_util.h b/components/brave_shields/browser/brave_shields_util.h index eab6be22273..ad54c83a463 100644 --- a/components/brave_shields/browser/brave_shields_util.h +++ b/components/brave_shields/browser/brave_shields_util.h @@ -35,10 +35,10 @@ ContentSettingsPattern GetPatternFromURL(const GURL& url, std::string ControlTypeToString(ControlType type); ControlType ControlTypeFromString(const std::string& string); -void SetBraveShieldsControlType(Profile* profile, - ControlType type, - const GURL& url); -ControlType GetBraveShieldsControlType(Profile* profile, const GURL& url); +void SetBraveShieldsEnabled(Profile* profile, bool enable, const GURL& url); +// reset to the default value +void ResetBraveShieldsEnabled(Profile* profile, const GURL& url); +bool GetBraveShieldsEnabled(Profile* profile, const GURL& url); void SetAdControlType(Profile* profile, ControlType type, const GURL& url); ControlType GetAdControlType(Profile* profile, const GURL& url); @@ -51,10 +51,11 @@ void SetFingerprintingControlType(Profile* profile, const GURL& url); ControlType GetFingerprintingControlType(Profile* profile, const GURL& url); -void SetHTTPSEverywhereControlType(Profile* profile, - ControlType type, - const GURL& url); -ControlType GetHTTPSEverywhereControlType(Profile* profile, const GURL& url); +void SetHTTPSEverywhereEnabled(Profile* profile, bool enable, const GURL& url); +// reset to the default value +void SetHTTPSEverywhereEnabled(Profile* profile, bool enable, const GURL& url); +void ResetHTTPSEverywhereEnabled(Profile* profile, const GURL& url); +bool GetHTTPSEverywhereEnabled(Profile* profile, const GURL& url); void SetNoScriptControlType(Profile* profile, ControlType type, diff --git a/components/brave_shields/browser/brave_shields_util_unittest.cc b/components/brave_shields/browser/brave_shields_util_unittest.cc index 6db17035099..c808f54dde8 100644 --- a/components/brave_shields/browser/brave_shields_util_unittest.cc +++ b/components/brave_shields/browser/brave_shields_util_unittest.cc @@ -108,7 +108,7 @@ TEST_F(BraveShieldsUtilTest, ControlTypeFromString) { } /* BRAVE_SHIELDS CONTROL */ -TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { +TEST_F(BraveShieldsUtilTest, SetBraveShieldsEnabled_Default) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); // settings should be default auto setting = @@ -120,9 +120,8 @@ TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { brave_shields::kBraveShields); EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); - /* ALLOW */ - brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, - GURL()); + /* enabled */ + brave_shields::SetBraveShieldsEnabled(profile(), true, GURL()); setting = map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields); @@ -134,9 +133,8 @@ TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { brave_shields::kBraveShields); EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); - /* BLOCK */ - brave_shields::SetBraveShieldsControlType(profile(), ControlType::BLOCK, - GURL()); + /* disabled */ + brave_shields::SetBraveShieldsEnabled(profile(), false, GURL()); setting = map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields); @@ -149,8 +147,7 @@ TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); /* DEFAULT */ - brave_shields::SetBraveShieldsControlType(profile(), ControlType::DEFAULT, - GURL()); + brave_shields::ResetBraveShieldsEnabled(profile(), GURL()); setting = map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields); @@ -163,11 +160,11 @@ TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_Default) { EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); } -TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_ForOrigin) { +TEST_F(BraveShieldsUtilTest, SetBraveShieldsEnabled_ForOrigin) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, - GURL("http://brave.com")); + brave_shields::SetBraveShieldsEnabled(profile(), true, + GURL("http://brave.com")); // setting should apply to origin auto setting = map->GetContentSetting(GURL("http://brave.com"), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, @@ -187,76 +184,76 @@ TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_ForOrigin) { EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); } -TEST_F(BraveShieldsUtilTest, SetBraveShieldsControlType_IsNotHttpHttps) { - auto setting = brave_shields::GetBraveShieldsControlType( +TEST_F(BraveShieldsUtilTest, SetBraveShieldsEnabled_IsNotHttpHttps) { + auto setting = brave_shields::GetBraveShieldsEnabled( profile(), GURL("chrome://preferences")); - EXPECT_EQ(ControlType::BLOCK, setting); - brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, - GURL("chrome://preferences")); - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("chrome://preferences")); - EXPECT_EQ(ControlType::BLOCK, setting); + EXPECT_EQ(false, setting); + brave_shields::SetBraveShieldsEnabled(profile(), ControlType::ALLOW, + GURL("chrome://preferences")); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("chrome://preferences")); + EXPECT_EQ(false, setting); setting = - brave_shields::GetBraveShieldsControlType(profile(), GURL("about:blank")); - EXPECT_EQ(ControlType::BLOCK, setting); - brave_shields::SetBraveShieldsControlType(profile(), ControlType::ALLOW, - GURL("about:blank")); - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("about:blank")); - EXPECT_EQ(ControlType::BLOCK, setting); + brave_shields::GetBraveShieldsEnabled(profile(), GURL("about:blank")); + EXPECT_EQ(false, setting); + brave_shields::SetBraveShieldsEnabled(profile(), ControlType::ALLOW, + GURL("about:blank")); + setting = + brave_shields::GetBraveShieldsEnabled(profile(), GURL("about:blank")); + EXPECT_EQ(false, setting); } -TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_Default) { +TEST_F(BraveShieldsUtilTest, GetBraveShieldsEnabled_Default) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - auto setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); + auto setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); /* BLOCK */ map->SetContentSettingCustomScope( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, CONTENT_SETTING_BLOCK); - setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(false, setting); /* ALLOW */ map->SetContentSettingCustomScope( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, CONTENT_SETTING_ALLOW); - setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); } -TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_ForOrigin) { +TEST_F(BraveShieldsUtilTest, GetBraveShieldsEnabled_ForOrigin) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - auto setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); - setting = brave_shields::GetBraveShieldsControlType(profile(), - GURL("http://brave.com")); - EXPECT_EQ(ControlType::ALLOW, setting); - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::ALLOW, setting); + auto setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("http://brave.com")); + EXPECT_EQ(true, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(true, setting); /* BLOCK */ map->SetContentSettingCustomScope( ContentSettingsPattern::FromString("http://brave.com/*"), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, CONTENT_SETTING_BLOCK); - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("http://brave.com/*")); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("http://brave.com/*")); + EXPECT_EQ(false, setting); // https in unchanged - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(true, setting); // default is unchanged - setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); /* ALLOW */ // change default to block @@ -264,41 +261,41 @@ TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_ForOrigin) { ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, CONTENT_SETTING_BLOCK); - setting = brave_shields::GetBraveShieldsControlType(profile(), - GURL("http://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); - setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("http://brave.com")); + EXPECT_EQ(false, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(false, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(false, setting); // set override to allow map->SetContentSettingCustomScope( ContentSettingsPattern::FromString("http://brave.com/*"), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kBraveShields, CONTENT_SETTING_ALLOW); - setting = brave_shields::GetBraveShieldsControlType(profile(), - GURL("http://brave.com")); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("http://brave.com")); + EXPECT_EQ(true, setting); // https in unchanged - setting = brave_shields::GetBraveShieldsControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(false, setting); // default is unchanged - setting = brave_shields::GetBraveShieldsControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetBraveShieldsEnabled(profile(), GURL()); + EXPECT_EQ(false, setting); } -TEST_F(BraveShieldsUtilTest, GetBraveShieldsControlType_IsNotHttpHttps) { - auto setting = brave_shields::GetBraveShieldsControlType( +TEST_F(BraveShieldsUtilTest, GetBraveShieldsEnabled_IsNotHttpHttps) { + auto setting = brave_shields::GetBraveShieldsEnabled( profile(), GURL("chrome://preferences")); - EXPECT_EQ(ControlType::BLOCK, setting); + EXPECT_EQ(false, setting); setting = - brave_shields::GetBraveShieldsControlType(profile(), GURL("about:blank")); - EXPECT_EQ(ControlType::BLOCK, setting); + brave_shields::GetBraveShieldsEnabled(profile(), GURL("about:blank")); + EXPECT_EQ(false, setting); } /* AD CONTROL */ @@ -909,7 +906,7 @@ TEST_F(BraveShieldsUtilTest, GetFingerprintingControlType_ForOrigin) { } /* HTTPSEVERYWHERE CONTROL */ -TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_Default) { +TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereEnabled_Default) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); // settings should be default auto setting = @@ -921,9 +918,8 @@ TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_Default) { brave_shields::kHTTPUpgradableResources); EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); - /* ALLOW */ - brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::ALLOW, - GURL()); + /* disabled */ + brave_shields::SetHTTPSEverywhereEnabled(profile(), false, GURL()); setting = map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources); @@ -935,9 +931,8 @@ TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_Default) { brave_shields::kHTTPUpgradableResources); EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); - /* BLOCK */ - brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::BLOCK, - GURL()); + /* enabled */ + brave_shields::SetHTTPSEverywhereEnabled(profile(), true, GURL()); setting = map->GetContentSetting(GURL(), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources); @@ -950,11 +945,11 @@ TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_Default) { EXPECT_EQ(CONTENT_SETTING_BLOCK, setting); } -TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_ForOrigin) { +TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereEnabled_ForOrigin) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - brave_shields::SetHTTPSEverywhereControlType(profile(), ControlType::ALLOW, - GURL("http://brave.com")); + brave_shields::SetHTTPSEverywhereEnabled(profile(), false, + GURL("http://brave.com")); // setting should apply to origin auto setting = map->GetContentSetting( GURL("http://brave.com"), GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, @@ -974,59 +969,57 @@ TEST_F(BraveShieldsUtilTest, SetHTTPSEverywhereControlType_ForOrigin) { EXPECT_EQ(CONTENT_SETTING_DEFAULT, setting); } -TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_Default) { +TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereEnabled_Default) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - auto setting = - brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + auto setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); /* ALLOW */ map->SetContentSettingCustomScope( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW); - setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(false, setting); /* BLOCK */ map->SetContentSettingCustomScope( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_BLOCK); - setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); } -TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_ForOrigin) { +TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereEnabled_ForOrigin) { auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - auto setting = - brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("http://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); + auto setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("http://brave.com")); + EXPECT_EQ(true, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(true, setting); /* ALLOW */ map->SetContentSettingCustomScope( ContentSettingsPattern::FromString("http://brave.com/*"), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW); - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("http://brave.com")); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("http://brave.com")); EXPECT_EQ(ControlType::ALLOW, setting); // https in unchanged - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(true, setting); // default is unchanged - setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::BLOCK, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(true, setting); /* BLOCK */ // change default to allow @@ -1034,13 +1027,13 @@ TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_ForOrigin) { ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW); - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("http://brave.com")); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("http://brave.com")); EXPECT_EQ(ControlType::ALLOW, setting); - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("https://brave.com")); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("https://brave.com")); EXPECT_EQ(ControlType::ALLOW, setting); - setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); EXPECT_EQ(ControlType::ALLOW, setting); // set override to block @@ -1048,16 +1041,16 @@ TEST_F(BraveShieldsUtilTest, GetHTTPSEverywhereControlType_ForOrigin) { ContentSettingsPattern::FromString("http://brave.com/*"), ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS, brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_BLOCK); - setting = brave_shields::GetHTTPSEverywhereControlType( + setting = brave_shields::GetHTTPSEverywhereEnabled( profile(), GURL("http://brave.com/*")); - EXPECT_EQ(ControlType::BLOCK, setting); + EXPECT_EQ(true, setting); // https in unchanged - setting = brave_shields::GetHTTPSEverywhereControlType( - profile(), GURL("https://brave.com")); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), + GURL("https://brave.com")); + EXPECT_EQ(false, setting); // default is unchanged - setting = brave_shields::GetHTTPSEverywhereControlType(profile(), GURL()); - EXPECT_EQ(ControlType::ALLOW, setting); + setting = brave_shields::GetHTTPSEverywhereEnabled(profile(), GURL()); + EXPECT_EQ(false, setting); } /* NOSCRIPT CONTROL */ diff --git a/components/definitions/chromel.d.ts b/components/definitions/chromel.d.ts index 19eed062bb7..35522dcfdd4 100644 --- a/components/definitions/chromel.d.ts +++ b/components/definitions/chromel.d.ts @@ -185,16 +185,16 @@ declare namespace chrome.braveShields { } const allowScriptsOnce: any - const setBraveShieldsControlTypeAsync: any - const getBraveShieldsControlTypeAsync: any + const setBraveShieldsEnabledAsync: any + const getBraveShieldsEnabledAsync: any const setAdControlTypeAsync: any const getAdControlTypeAsync: any const setCookieControlTypeAsync: any const getCookieControlTypeAsync: any const setFingerprintingControlTypeAsync: any const getFingerprintingControlTypeAsync: any - const setHTTPSEverywhereControlTypeAsync: any - const getHTTPSEverywhereControlTypeAsync: any + const setHTTPSEverywhereEnabledAsync: any + const getHTTPSEverywhereEnabledAsync: any const setNoScriptControlTypeAsync: any const getNoScriptControlTypeAsync: any diff --git a/components/test/brave_extension/background/api/shieldsAPI_test.ts b/components/test/brave_extension/background/api/shieldsAPI_test.ts index 178948e72db..0617eac5aa7 100644 --- a/components/test/brave_extension/background/api/shieldsAPI_test.ts +++ b/components/test/brave_extension/background/api/shieldsAPI_test.ts @@ -142,12 +142,12 @@ describe('Shields API', () => { describe('setAllowHTTPUpgradableResource', () => { let spy: jest.SpyInstance beforeEach(() => { - spy = jest.spyOn(chrome.braveShields, 'setHTTPSEverywhereControlTypeAsync') + spy = jest.spyOn(chrome.braveShields, 'setHTTPSEverywhereEnabledAsync') }) afterEach(() => { spy.mockRestore() }) - it('calls chrome.braveShields.setHTTPSEverywhereControlTypeAsync with the correct args', () => { + it('calls chrome.braveShields.setHTTPSEverywhereEnabledAsync with the correct args', () => { shieldsAPI.setAllowHTTPUpgradableResources('https://www.brave.com', 'block') .catch(() => { expect(true).toBe(false) @@ -155,7 +155,7 @@ describe('Shields API', () => { const arg0 = spy.mock.calls[0][0] const arg1 = spy.mock.calls[0][1] expect.assertions(2) - expect(arg0).toEqual('block') + expect(arg0).toEqual(true) expect(arg1).toEqual('https://www.brave.com') }) }) diff --git a/components/test/testData.ts b/components/test/testData.ts index 1164de71874..f22a95cf725 100644 --- a/components/test/testData.ts +++ b/components/test/testData.ts @@ -209,8 +209,8 @@ export const getMockChrome = () => { allowScriptsOnce: function (origins: Array, tabId: number, cb: () => void) { setImmediate(cb) }, - getBraveShieldsControlTypeAsync: function (url: string) { - return Promise.resolve('block') + getBraveShieldsEnabledAsync: function (url: string) { + return Promise.resolve(false) }, getAdControlTypeAsync: function (url: string) { return Promise.resolve('block') @@ -221,13 +221,13 @@ export const getMockChrome = () => { getFingerprintingControlTypeAsync: function (url: string) { return Promise.resolve('block') }, - getHTTPSEverywhereControlTypeAsync: function (url: string) { - return Promise.resolve('block') + getHTTPSEverywhereEnabledAsync: function (url: string) { + return Promise.resolve(true) }, getNoScriptControlTypeAsync: function (url: string) { return Promise.resolve('block') }, - setBraveShieldsControlTypeAsync: function (url: string, controlType: string) { + setBraveShieldsEnabledAsync: function (url: string, enabled: boolean) { return new Promise(() => []) }, setAdControlTypeAsync: function (url: string, controlType: string) { @@ -239,7 +239,7 @@ export const getMockChrome = () => { setFingerprintingControlTypeAsync: function (url: string, controlType: string) { return new Promise(() => []) }, - setHTTPSEverywhereControlTypeAsync: function (url: string, controlType: string) { + setHTTPSEverywhereEnabledAsync: function (url: string, enabled: boolean) { return new Promise(() => []) }, setNoScriptControlTypeAsync: function (url: string, controlType: string) {