From d07cb3eb3266b66ea4660dfe2609489a7777e1b0 Mon Sep 17 00:00:00 2001 From: "Brian R. Bondy" Date: Wed, 5 Sep 2018 11:56:36 -0400 Subject: [PATCH] Revert "Revert "Allow all extensions, warn for unvetted, 1 component updater only now"" This reverts commit 61f822d20338bf67c2dc9ba9f470dfeda493a7be. --- app/brave_generated_resources.grd | 4 + app/brave_main_delegate.cc | 4 +- browser/brave_browser_process_impl.cc | 24 ++---- browser/brave_browser_process_impl.h | 10 --- .../brave_component_updater_configurator.cc | 33 ++------- .../brave_component_updater_configurator.h | 3 +- browser/extensions/BUILD.gn | 2 + .../brave_extension_install_prompt.cc | 29 ++++++++ .../brave_extension_install_prompt.h | 20 +++++ .../extensions/brave_extension_provider.cc | 31 ++++---- browser/extensions/brave_extension_provider.h | 1 + browser/net/BUILD.gn | 2 + ...static_redirect_network_delegate_helper.cc | 45 +++++++++++ ..._static_redirect_network_delegate_helper.h | 27 +++++++ ...direct_network_delegate_helper_unittest.cc | 74 +++++++++++++++++++ browser/net/brave_profile_network_delegate.cc | 12 +-- ...static_redirect_network_delegate_helper.cc | 2 - ...direct_network_delegate_helper_unittest.cc | 21 ++++++ browser/net/brave_system_network_delegate.cc | 5 +- ...e_widevine_content_setting_bubble_model.cc | 2 +- .../widevine_cdm_component_installer.cc | 2 +- common/network_constants.cc | 4 +- ...tensions-extension_install_prompt.cc.patch | 21 ++++++ ...xtensions-extension_install_prompt.h.patch | 30 ++++++++ ...ns-browser-updater-update_service.cc.patch | 13 ++++ test/BUILD.gn | 1 + test/data/should-be-blocked-extension.pem | 28 +++++++ 27 files changed, 369 insertions(+), 81 deletions(-) create mode 100644 browser/extensions/brave_extension_install_prompt.cc create mode 100644 browser/extensions/brave_extension_install_prompt.h create mode 100644 browser/net/brave_common_static_redirect_network_delegate_helper.cc create mode 100644 browser/net/brave_common_static_redirect_network_delegate_helper.h create mode 100644 browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc create mode 100644 patches/chrome-browser-extensions-extension_install_prompt.cc.patch create mode 100644 patches/chrome-browser-extensions-extension_install_prompt.h.patch create mode 100644 patches/extensions-browser-updater-update_service.cc.patch create mode 100644 test/data/should-be-blocked-extension.pem diff --git a/app/brave_generated_resources.grd b/app/brave_generated_resources.grd index 88cafbcb262..22ce37e2487 100644 --- a/app/brave_generated_resources.grd +++ b/app/brave_generated_resources.grd @@ -138,6 +138,10 @@ By installing this extension, you are agreeing to the Google Widevine Terms of U Continue blocking autoplay + + + NOT A RECOMMENDED BRAVE EXTENSION! Add "$1Gmail Checker"? + Brave colors diff --git a/app/brave_main_delegate.cc b/app/brave_main_delegate.cc index 744eb345601..3c97c2acacd 100644 --- a/app/brave_main_delegate.cc +++ b/app/brave_main_delegate.cc @@ -21,6 +21,7 @@ #include "chrome/common/chrome_paths_internal.h" #include "chrome/common/chrome_switches.h" #include "components/password_manager/core/common/password_manager_features.h" +#include "extensions/common/extension_features.h" #include "ui/base/ui_base_features.h" #if !defined(CHROME_MULTIPLE_DLL_BROWSER) @@ -119,7 +120,8 @@ bool BraveMainDelegate::BasicStartupComplete(int* exit_code) { std::stringstream enabled_features; enabled_features << features::kEnableEmojiContextMenu.name << "," << features::kDesktopPWAWindowing.name - << "," << password_manager::features::kFillOnAccountSelect.name; + << "," << password_manager::features::kFillOnAccountSelect.name + << "," << extensions::features::kNewExtensionUpdaterService.name; command_line.AppendSwitchASCII(switches::kEnableFeatures, enabled_features.str()); return ChromeMainDelegate::BasicStartupComplete(exit_code); diff --git a/browser/brave_browser_process_impl.cc b/browser/brave_browser_process_impl.cc index 552c1fefa66..714440c4f21 100644 --- a/browser/brave_browser_process_impl.cc +++ b/browser/brave_browser_process_impl.cc @@ -43,11 +43,9 @@ BraveBrowserProcessImpl::BraveBrowserProcessImpl() } component_updater::ComponentUpdateService* -BraveBrowserProcessImpl::component_updater( - std::unique_ptr &component_updater, - bool use_brave_server) { - if (component_updater) - return component_updater.get(); +BraveBrowserProcessImpl::component_updater() { + if (component_updater_) + return component_updater_.get(); if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) return nullptr; @@ -64,23 +62,13 @@ BraveBrowserProcessImpl::component_updater( if (!scheduler) scheduler = std::make_unique(); - component_updater = component_updater::ComponentUpdateServiceFactory( + component_updater_ = component_updater::ComponentUpdateServiceFactory( component_updater::MakeBraveComponentUpdaterConfigurator( base::CommandLine::ForCurrentProcess(), - g_browser_process->local_state(), use_brave_server), + g_browser_process->local_state()), std::move(scheduler)); - return component_updater.get(); -} - -component_updater::ComponentUpdateService* -BraveBrowserProcessImpl::component_updater() { - return component_updater(component_updater_, true); -} - -component_updater::ComponentUpdateService* -BraveBrowserProcessImpl::google_component_updater() { - return component_updater(google_component_updater_, false); + return component_updater_.get(); } brave_shields::AdBlockService* diff --git a/browser/brave_browser_process_impl.h b/browser/brave_browser_process_impl.h index 5c93cb120cc..1cf687c83bd 100644 --- a/browser/brave_browser_process_impl.h +++ b/browser/brave_browser_process_impl.h @@ -31,7 +31,6 @@ class BraveBrowserProcessImpl : public BrowserProcessImpl { // BrowserProcess implementation. component_updater::ComponentUpdateService* component_updater() override; - component_updater::ComponentUpdateService* google_component_updater(); brave_shields::AdBlockService* ad_block_service(); brave_shields::AdBlockRegionalService* ad_block_regional_service(); @@ -49,15 +48,6 @@ class BraveBrowserProcessImpl : public BrowserProcessImpl { https_everywhere_service_; std::unique_ptr brave_stats_updater_; std::unique_ptr tor_client_updater_; - - component_updater::ComponentUpdateService* component_updater( - std::unique_ptr&, - bool use_brave_server); - std::unique_ptr - google_component_updater_; - std::unique_ptr - brave_component_updater_; - std::unique_ptr profile_creation_monitor_; DISALLOW_COPY_AND_ASSIGN(BraveBrowserProcessImpl); diff --git a/browser/component_updater/brave_component_updater_configurator.cc b/browser/component_updater/brave_component_updater_configurator.cc index 536f05e46df..077a0040686 100644 --- a/browser/component_updater/brave_component_updater_configurator.cc +++ b/browser/component_updater/brave_component_updater_configurator.cc @@ -12,7 +12,6 @@ #include "base/strings/sys_string_conversions.h" #include "base/version.h" -#include "brave/common/network_constants.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/net/system_network_context_manager.h" @@ -39,8 +38,7 @@ namespace { class BraveConfigurator : public update_client::Configurator { public: BraveConfigurator(const base::CommandLine* cmdline, - PrefService* pref_service, - bool use_brave_server); + PrefService* pref_service); // update_client::Configurator overrides. int InitialDelay() const override; @@ -75,7 +73,6 @@ class BraveConfigurator : public update_client::Configurator { ConfiguratorImpl configurator_impl_; PrefService* pref_service_; // This member is not owned by this class. - bool use_brave_server_; ~BraveConfigurator() override {} }; @@ -85,22 +82,14 @@ class BraveConfigurator : public update_client::Configurator { // a custom message signing protocol and it does not depend on using HTTPS. BraveConfigurator::BraveConfigurator( const base::CommandLine* cmdline, - PrefService* pref_service, - bool use_brave_server) + PrefService* pref_service) : configurator_impl_(ComponentUpdaterCommandLineConfigPolicy(cmdline), false), - pref_service_(pref_service), - use_brave_server_(use_brave_server) { + pref_service_(pref_service) { DCHECK(pref_service_); } int BraveConfigurator::InitialDelay() const { - if (use_brave_server_) { - return configurator_impl_.InitialDelay(); - } - // This just makes it so as soon as the Google component update - // is used it checks for Widevine, which is currently the only - // place we use it. - return 10; + return configurator_impl_.InitialDelay(); } int BraveConfigurator::NextCheckDelay() const { @@ -116,10 +105,6 @@ int BraveConfigurator::UpdateDelay() const { } std::vector BraveConfigurator::UpdateUrl() const { - if (use_brave_server_) { - return std::vector - {GURL(kBraveUpdatesExtensionsEndpoint)}; - } return configurator_impl_.UpdateUrl(); } @@ -190,10 +175,7 @@ bool BraveConfigurator::EnabledBackgroundDownloader() const { } bool BraveConfigurator::EnabledCupSigning() const { - if (use_brave_server_) { - return false; - } - return configurator_impl_.EnabledCupSigning(); + return false; } PrefService* BraveConfigurator::GetPrefService() const { @@ -228,9 +210,8 @@ void RegisterPrefsForBraveComponentUpdaterConfigurator( scoped_refptr MakeBraveComponentUpdaterConfigurator( const base::CommandLine* cmdline, - PrefService* pref_service, - bool use_brave_server) { - return base::MakeRefCounted(cmdline, pref_service, use_brave_server); + PrefService* pref_service) { + return base::MakeRefCounted(cmdline, pref_service); } } // namespace component_updater diff --git a/browser/component_updater/brave_component_updater_configurator.h b/browser/component_updater/brave_component_updater_configurator.h index 36bcd5469fa..14c1c38fa76 100644 --- a/browser/component_updater/brave_component_updater_configurator.h +++ b/browser/component_updater/brave_component_updater_configurator.h @@ -31,8 +31,7 @@ void RegisterPrefsForBraveComponentUpdaterConfigurator( scoped_refptr MakeBraveComponentUpdaterConfigurator( const base::CommandLine* cmdline, - PrefService* pref_service, - bool use_brave_server); + PrefService* pref_service); } // namespace component_updater diff --git a/browser/extensions/BUILD.gn b/browser/extensions/BUILD.gn index ccb4f97a984..cf9dcbd124d 100644 --- a/browser/extensions/BUILD.gn +++ b/browser/extensions/BUILD.gn @@ -12,6 +12,8 @@ source_set("extensions") { "brave_component_extension_resource_manager.h", "brave_component_loader.cc", "brave_component_loader.h", + "brave_extension_install_prompt.cc", + "brave_extension_install_prompt.h", "brave_extension_management.cc", "brave_extension_management.h", "brave_extension_provider.cc", diff --git a/browser/extensions/brave_extension_install_prompt.cc b/browser/extensions/brave_extension_install_prompt.cc new file mode 100644 index 00000000000..254cae395ea --- /dev/null +++ b/browser/extensions/brave_extension_install_prompt.cc @@ -0,0 +1,29 @@ +/* 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 "brave/browser/extensions/brave_extension_install_prompt.h" + +#include "base/strings/utf_string_conversions.h" +#include "brave/browser/extensions/brave_extension_provider.h" +#include "brave/grit/brave_generated_resources.h" +#include "extensions/common/extension_id.h" +#include "ui/base/l10n/l10n_util.h" + +BravePrompt::BravePrompt(ExtensionInstallPrompt::PromptType type) : + ExtensionInstallPrompt::Prompt(type) { +} + +BravePrompt::~BravePrompt() { +} + +base::string16 BravePrompt::GetDialogTitle() const { + if (!extensions::BraveExtensionProvider::IsVetted(extension())) { + if (type_ == ExtensionInstallPrompt::INSTALL_PROMPT || + type_ == ExtensionInstallPrompt::INLINE_INSTALL_PROMPT) { + return l10n_util::GetStringFUTF16(IDS_UNVETTED_EXTENSION_INSTALL_PROMPT_TITLE, + base::UTF8ToUTF16(extension_->name())); + } + } + return ExtensionInstallPrompt::Prompt::GetDialogTitle(); +} diff --git a/browser/extensions/brave_extension_install_prompt.h b/browser/extensions/brave_extension_install_prompt.h new file mode 100644 index 00000000000..fd3586d1d27 --- /dev/null +++ b/browser/extensions/brave_extension_install_prompt.h @@ -0,0 +1,20 @@ +/* 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/. */ + +#ifndef BRAVE_BROWSER_EXTENSIONS_BRAVE_EXTENSION_INSTALL_PROMPT_H_ +#define BRAVE_BROWSER_EXTENSIONS_BRAVE_EXTENSION_INSTALL_PROMPT_H_ + +#include "chrome/browser/extensions/extension_install_prompt.h" + +class BravePrompt : public ExtensionInstallPrompt::Prompt { + public: + explicit BravePrompt(ExtensionInstallPrompt::PromptType type); + ~BravePrompt() override; + + base::string16 GetDialogTitle() const override; + + DISALLOW_COPY_AND_ASSIGN(BravePrompt); +}; + +#endif // BRAVE_BROWSER_EXTENSIONS_BRAVE_EXTENSION_INSTALL_PROMPT_H_ diff --git a/browser/extensions/brave_extension_provider.cc b/browser/extensions/brave_extension_provider.cc index 561140721ef..8dfb1d5b780 100644 --- a/browser/extensions/brave_extension_provider.cc +++ b/browser/extensions/brave_extension_provider.cc @@ -15,12 +15,21 @@ namespace { -bool IsWhitelisted(const extensions::Extension* extension) { - // Allow PWAs to run - if (extension->GetType() == extensions::Manifest::TYPE_HOSTED_APP) { - return true; - } - static std::vector whitelist({ +bool IsBlacklisted(const extensions::Extension* extension) { + // This is a hardcoded list of extensions to block. + // Typically instead you can just use the brave/go-updater to list + // a blacklisted extension that you want to block for existing clients. + // mlklomjnahgiddgfdgjhibinlfibfffc is used for tests, it corresponds to + // brave/test/data/should-be-blocked-extension + return extension->id() == "mlklomjnahgiddgfdgjhibinlfibfffc"; +} + +} // namespace + +namespace extensions { + +bool BraveExtensionProvider::IsVetted(const Extension* extension) { + static std::vector vetted_extensions({ brave_extension_id, brave_webtorrent_extension_id, pdfjs_extension_id, @@ -83,14 +92,10 @@ bool IsWhitelisted(const extensions::Extension* extension) { // Test ID: Brave Tor Client Updater "ngicbhhaldfdgmjhilmnleppfpmkgbbk" }); - return std::find(whitelist.begin(), whitelist.end(), - extension->id()) != whitelist.end(); + return std::find(vetted_extensions.begin(), vetted_extensions.end(), + extension->id()) != vetted_extensions.end(); } -} // namespace - -namespace extensions { - BraveExtensionProvider::BraveExtensionProvider() { } @@ -108,7 +113,7 @@ std::string BraveExtensionProvider::GetDebugPolicyProviderName() const { bool BraveExtensionProvider::UserMayLoad(const Extension* extension, base::string16* error) const { - if (!IsWhitelisted(extension)) { + if (IsBlacklisted(extension)) { if (error) { *error = l10n_util::GetStringFUTF16(IDS_EXTENSION_CANT_INSTALL_ON_BRAVE, diff --git a/browser/extensions/brave_extension_provider.h b/browser/extensions/brave_extension_provider.h index 3462af299a6..755a0a4ded7 100644 --- a/browser/extensions/brave_extension_provider.h +++ b/browser/extensions/brave_extension_provider.h @@ -18,6 +18,7 @@ class BraveExtensionProvider : public ManagementPolicy::Provider { base::string16* error) const override; bool MustRemainInstalled(const Extension* extension, base::string16* error) const override; + static bool IsVetted(const extensions::Extension* extension); private: DISALLOW_COPY_AND_ASSIGN(BraveExtensionProvider); }; diff --git a/browser/net/BUILD.gn b/browser/net/BUILD.gn index 24ad22efdac..536a7412a33 100644 --- a/browser/net/BUILD.gn +++ b/browser/net/BUILD.gn @@ -3,6 +3,8 @@ import("//build/config/features.gni") source_set("net") { configs += [ "//brave/build/geolocation" ] sources = [ + "brave_common_static_redirect_network_delegate_helper.cc", + "brave_common_static_redirect_network_delegate_helper.h", "brave_network_delegate_base.cc", "brave_network_delegate_base.h", "brave_httpse_network_delegate_helper.cc", diff --git a/browser/net/brave_common_static_redirect_network_delegate_helper.cc b/browser/net/brave_common_static_redirect_network_delegate_helper.cc new file mode 100644 index 00000000000..6d9620e7705 --- /dev/null +++ b/browser/net/brave_common_static_redirect_network_delegate_helper.cc @@ -0,0 +1,45 @@ +/* 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 "brave/browser/net/brave_common_static_redirect_network_delegate_helper.h" + +#include "brave/common/network_constants.h" +#include "components/component_updater/component_updater_url_constants.h" +#include "extensions/common/extension_urls.h" +#include "extensions/common/url_pattern.h" +#include "net/url_request/url_request.h" + + +namespace brave { + +// Update server checks happen from the profile context for admin policy installed extensions. +// Update server checks happen from the system context for normal update operations. +bool IsUpdaterURL(const GURL& gurl) { + static std::vector updater_patterns({ + URLPattern(URLPattern::SCHEME_HTTPS, std::string(component_updater::kUpdaterDefaultUrl) + "*"), + URLPattern(URLPattern::SCHEME_HTTP, std::string(component_updater::kUpdaterFallbackUrl) + "*"), + URLPattern(URLPattern::SCHEME_HTTPS, std::string(extension_urls::kChromeWebstoreUpdateURL) + "*") + }); + bool braveRedirect = gurl.query().find("braveRedirect=true") != std::string::npos; + return std::any_of(updater_patterns.begin(), updater_patterns.end(), + [&gurl, braveRedirect](URLPattern pattern) { + return !braveRedirect && pattern.MatchesURL(gurl); + }); +} + +int OnBeforeURLRequest_CommonStaticRedirectWork( + net::URLRequest* request, + GURL* new_url, + const ResponseCallback& next_callback, + std::shared_ptr ctx) { + GURL::Replacements replacements; + if (IsUpdaterURL(request->url())) { + replacements.SetQueryStr(request->url().query_piece()); + *new_url = GURL(kBraveUpdatesExtensionsEndpoint).ReplaceComponents(replacements); + return net::OK; + } + return net::OK; +} + +} // namespace brave diff --git a/browser/net/brave_common_static_redirect_network_delegate_helper.h b/browser/net/brave_common_static_redirect_network_delegate_helper.h new file mode 100644 index 00000000000..d230369fb43 --- /dev/null +++ b/browser/net/brave_common_static_redirect_network_delegate_helper.h @@ -0,0 +1,27 @@ +/* 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/. */ + +#ifndef BRAVE_BROWSER_NET_BRAVE_COMMON_STATIC_REDIRECT_NETWORK_DELEGATE_H_ +#define BRAVE_BROWSER_NET_BRAVE_COMMON_STATIC_REDIRECT_NETWORK_DELEGATE_H_ + +#include "chrome/browser/net/chrome_network_delegate.h" +#include "brave/browser/net/url_context.h" + +struct BraveRequestInfo; + +namespace net { +class URLRequest; +} + +namespace brave { + +int OnBeforeURLRequest_CommonStaticRedirectWork( + net::URLRequest* request, + GURL* new_url, + const ResponseCallback& next_callback, + std::shared_ptr ctx); + +} // namespace brave + +#endif // BRAVE_BROWSER_NET_BRAVE_COMMON_STATIC_REDIRECT_NETWORK_DELEGATE_H_ diff --git a/browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc b/browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc new file mode 100644 index 00000000000..e4713bccaf4 --- /dev/null +++ b/browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc @@ -0,0 +1,74 @@ +/* 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 "brave/browser/net/brave_common_static_redirect_network_delegate_helper.h" + +#include "brave/browser/net/url_context.h" +#include "brave/common/network_constants.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "components/component_updater/component_updater_url_constants.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/url_request_test_util.h" +#include "url/gurl.h" +#include "url/url_constants.h" + + +namespace { + +class BraveCommonStaticRedirectNetworkDelegateHelperTest: public testing::Test { + public: + BraveCommonStaticRedirectNetworkDelegateHelperTest() + : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), + context_(new net::TestURLRequestContext(true)) { + } + ~BraveCommonStaticRedirectNetworkDelegateHelperTest() override {} + void SetUp() override { + context_->Init(); + } + net::TestURLRequestContext* context() { return context_.get(); } + + private: + content::TestBrowserThreadBundle thread_bundle_; + std::unique_ptr context_; +}; + +TEST_F(BraveCommonStaticRedirectNetworkDelegateHelperTest, ModifyComponentUpdaterURL) { + net::TestDelegate test_delegate; + std::string query_string("?foo=bar"); + GURL url(std::string(component_updater::kUpdaterDefaultUrl) + query_string); + std::unique_ptr request = + context()->CreateRequest(url, net::IDLE, &test_delegate, + TRAFFIC_ANNOTATION_FOR_TESTS); + std::shared_ptr + before_url_context(new brave::BraveRequestInfo()); + brave::ResponseCallback callback; + GURL new_url; + GURL expected_url(std::string(kBraveUpdatesExtensionsEndpoint + query_string)); + int ret = + OnBeforeURLRequest_CommonStaticRedirectWork(request.get(), &new_url, callback, + before_url_context); + EXPECT_EQ(new_url, expected_url); + EXPECT_EQ(ret, net::OK); +} + +TEST_F(BraveCommonStaticRedirectNetworkDelegateHelperTest, NoModifyComponentUpdaterURL) { + net::TestDelegate test_delegate; + std::string query_string("?braveRedirect=true"); + GURL url(std::string(component_updater::kUpdaterDefaultUrl) + query_string); + std::unique_ptr request = + context()->CreateRequest(url, net::IDLE, &test_delegate, + TRAFFIC_ANNOTATION_FOR_TESTS); + std::shared_ptr + before_url_context(new brave::BraveRequestInfo()); + brave::ResponseCallback callback; + GURL new_url; + GURL expected_url; + int ret = + OnBeforeURLRequest_CommonStaticRedirectWork(request.get(), &new_url, callback, + before_url_context); + EXPECT_EQ(new_url, expected_url); + EXPECT_EQ(ret, net::OK); +} + +} // namespace diff --git a/browser/net/brave_profile_network_delegate.cc b/browser/net/brave_profile_network_delegate.cc index dc56648a71f..284c348c4c7 100644 --- a/browser/net/brave_profile_network_delegate.cc +++ b/browser/net/brave_profile_network_delegate.cc @@ -4,6 +4,7 @@ #include "brave/browser/net/brave_profile_network_delegate.h" +#include "brave/browser/net/brave_common_static_redirect_network_delegate_helper.h" #include "brave/browser/net/brave_httpse_network_delegate_helper.h" #include "brave/browser/net/brave_site_hacks_network_delegate_helper.h" #include "brave/components/brave_rewards/browser/buildflags/buildflags.h" @@ -21,8 +22,11 @@ BraveProfileNetworkDelegate::BraveProfileNetworkDelegate( before_url_request_callbacks_.push_back(callback); callback = - base::Bind( - brave::OnBeforeURLRequest_HttpsePreFileWork); + base::Bind(brave::OnBeforeURLRequest_HttpsePreFileWork); + before_url_request_callbacks_.push_back(callback); + + callback = + base::Bind(brave::OnBeforeURLRequest_CommonStaticRedirectWork); before_url_request_callbacks_.push_back(callback); #if BUILDFLAG(BRAVE_REWARDS_ENABLED) @@ -31,10 +35,8 @@ BraveProfileNetworkDelegate::BraveProfileNetworkDelegate( #endif brave::OnBeforeStartTransactionCallback start_transactions_callback = - base::Bind( - brave::OnBeforeStartTransaction_SiteHacksWork); + base::Bind(brave::OnBeforeStartTransaction_SiteHacksWork); before_start_transaction_callbacks_.push_back(start_transactions_callback); - } BraveProfileNetworkDelegate::~BraveProfileNetworkDelegate() { diff --git a/browser/net/brave_static_redirect_network_delegate_helper.cc b/browser/net/brave_static_redirect_network_delegate_helper.cc index bbc8679508b..3b53c959da6 100644 --- a/browser/net/brave_static_redirect_network_delegate_helper.cc +++ b/browser/net/brave_static_redirect_network_delegate_helper.cc @@ -5,11 +5,9 @@ #include "brave/browser/net/brave_static_redirect_network_delegate_helper.h" #include "brave/common/network_constants.h" -#include "components/component_updater/component_updater_url_constants.h" #include "extensions/common/url_pattern.h" #include "net/url_request/url_request.h" - namespace brave { int OnBeforeURLRequest_StaticRedirectWork( diff --git a/browser/net/brave_static_redirect_network_delegate_helper_unittest.cc b/browser/net/brave_static_redirect_network_delegate_helper_unittest.cc index bc13f55f1f1..3a3bd1aa431 100644 --- a/browser/net/brave_static_redirect_network_delegate_helper_unittest.cc +++ b/browser/net/brave_static_redirect_network_delegate_helper_unittest.cc @@ -110,4 +110,25 @@ TEST_F(BraveStaticRedirectNetworkDelegateHelperTest, ModifySafeBrowsingURLV5) { EXPECT_EQ(ret, net::OK); } + +TEST_F(BraveStaticRedirectNetworkDelegateHelperTest, ModifyComponentUpdaterURL) { + net::TestDelegate test_delegate; + std::string query_string("?foo=bar"); + GURL url(std::string(component_updater::kUpdaterDefaultUrl) + query_string); + std::unique_ptr request = + context()->CreateRequest(url, net::IDLE, &test_delegate, + TRAFFIC_ANNOTATION_FOR_TESTS); + std::shared_ptr + before_url_context(new brave::BraveRequestInfo()); + brave::ResponseCallback callback; + GURL new_url; + GURL expected_url(std::string(kBraveUpdatesExtensionsEndpoint + query_string)); + int ret = + OnBeforeURLRequest_StaticRedirectWork(request.get(), &new_url, callback, + before_url_context); + EXPECT_EQ(new_url, expected_url); + EXPECT_EQ(ret, net::OK); +} + + } // namespace diff --git a/browser/net/brave_system_network_delegate.cc b/browser/net/brave_system_network_delegate.cc index 3afbffedcab..d8027cc55e9 100644 --- a/browser/net/brave_system_network_delegate.cc +++ b/browser/net/brave_system_network_delegate.cc @@ -4,9 +4,9 @@ #include "brave/browser/net/brave_system_network_delegate.h" +#include "brave/browser/net/brave_common_static_redirect_network_delegate_helper.h" #include "brave/browser/net/brave_static_redirect_network_delegate_helper.h" - BraveSystemNetworkDelegate::BraveSystemNetworkDelegate( extensions::EventRouterForwarder* event_router) : BraveNetworkDelegateBase(event_router) { @@ -14,6 +14,9 @@ BraveSystemNetworkDelegate::BraveSystemNetworkDelegate( base::Bind( brave::OnBeforeURLRequest_StaticRedirectWork); before_url_request_callbacks_.push_back(callback); + callback = base::Bind( + brave::OnBeforeURLRequest_CommonStaticRedirectWork); + before_url_request_callbacks_.push_back(callback); } BraveSystemNetworkDelegate::~BraveSystemNetworkDelegate() { diff --git a/browser/ui/content_settings/brave_widevine_content_setting_bubble_model.cc b/browser/ui/content_settings/brave_widevine_content_setting_bubble_model.cc index 476e983f2d9..67124982dfa 100644 --- a/browser/ui/content_settings/brave_widevine_content_setting_bubble_model.cc +++ b/browser/ui/content_settings/brave_widevine_content_setting_bubble_model.cc @@ -52,7 +52,7 @@ void BraveWidevineContentSettingPluginBubbleModel::RunPluginsOnPage() { PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); prefs->SetBoolean(kWidevineOptedIn, true); - RegisterWidevineCdmComponent(g_brave_browser_process->google_component_updater()); + RegisterWidevineCdmComponent(g_brave_browser_process->component_updater()); ChromeSubresourceFilterClient::FromWebContents(web_contents()) ->OnReloadRequested(); } diff --git a/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc b/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc index f7ca7a5229d..1fce8fd177f 100644 --- a/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc +++ b/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc @@ -21,7 +21,7 @@ void RegisterWidevineCdmComponent(ComponentUpdateService* cus) { prefs->GetBoolean(kWidevineOptedIn); if (widevine_opted_in) { RegisterWidevineCdmComponent_ChromiumImpl( - g_brave_browser_process->google_component_updater()); + g_brave_browser_process->component_updater()); } } diff --git a/common/network_constants.cc b/common/network_constants.cc index c1cd3e0baf8..0d97b8465d3 100644 --- a/common/network_constants.cc +++ b/common/network_constants.cc @@ -1,6 +1,8 @@ #include "brave/common/network_constants.h" -const char kBraveUpdatesExtensionsEndpoint[] = "https://laptop-updates.brave.com/extensions"; +const char kBraveUpdatesExtensionsEndpoint[] = "https://go-updater.brave.com/extensions"; +// For debgugging: +// const char kBraveUpdatesExtensionsEndpoint[] = "http://localhost:8192/extensions"; const char kEmptyDataURI[] = "data:application/javascript;base64,MA=="; const char kJSDataURLPrefix[] = "data:application/javascript;base64,"; diff --git a/patches/chrome-browser-extensions-extension_install_prompt.cc.patch b/patches/chrome-browser-extensions-extension_install_prompt.cc.patch new file mode 100644 index 00000000000..25860a70ff2 --- /dev/null +++ b/patches/chrome-browser-extensions-extension_install_prompt.cc.patch @@ -0,0 +1,21 @@ +diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc +index e30137f3c244cfeb22bacd36eb059913f9fd4c04..35e9433e15919bb5158e4b2e3a65e28b18cdb6db 100644 +--- a/chrome/browser/extensions/extension_install_prompt.cc ++++ b/chrome/browser/extensions/extension_install_prompt.cc +@@ -13,6 +13,7 @@ + #include "base/strings/string_util.h" + #include "base/strings/utf_string_conversions.h" + #include "base/threading/thread_task_runner_handle.h" ++#include "brave/browser/extensions/brave_extension_install_prompt.h" + #include "chrome/browser/extensions/extension_install_prompt_show_params.h" + #include "chrome/browser/extensions/extension_util.h" + #include "chrome/browser/extensions/permissions_updater.h" +@@ -546,7 +547,7 @@ void ExtensionInstallPrompt::ShowDialog( + const SkBitmap* icon, + const ShowDialogCallback& show_dialog_callback) { + ShowDialog(done_callback, extension, icon, +- std::make_unique(INSTALL_PROMPT), show_dialog_callback); ++ std::make_unique(INSTALL_PROMPT), show_dialog_callback); + } + + void ExtensionInstallPrompt::ShowDialog( diff --git a/patches/chrome-browser-extensions-extension_install_prompt.h.patch b/patches/chrome-browser-extensions-extension_install_prompt.h.patch new file mode 100644 index 00000000000..9579f5c9df1 --- /dev/null +++ b/patches/chrome-browser-extensions-extension_install_prompt.h.patch @@ -0,0 +1,30 @@ +diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h +index db454db003ec58d6a0f23f6e6c70a1f106350907..77c6350e77412d5a61adab52511548a00b7018c1 100644 +--- a/chrome/browser/extensions/extension_install_prompt.h ++++ b/chrome/browser/extensions/extension_install_prompt.h +@@ -86,7 +86,7 @@ class ExtensionInstallPrompt { + class Prompt { + public: + explicit Prompt(PromptType type); +- ~Prompt(); ++ virtual ~Prompt(); + + void AddPermissions(const extensions::PermissionMessages& permissions); + void SetIsShowingDetails(DetailsType type, +@@ -100,7 +100,7 @@ class ExtensionInstallPrompt { + PromptType type() const { return type_; } + + // Getters for UI element labels. +- base::string16 GetDialogTitle() const; ++ virtual base::string16 GetDialogTitle() const; + int GetDialogButtons() const; + // Returns the empty string when there should be no "accept" button. + base::string16 GetAcceptButtonLabel() const; +@@ -165,6 +165,7 @@ class ExtensionInstallPrompt { + + private: + friend class base::RefCountedThreadSafe; ++ friend class BravePrompt; + + struct InstallPromptPermissions { + InstallPromptPermissions(); diff --git a/patches/extensions-browser-updater-update_service.cc.patch b/patches/extensions-browser-updater-update_service.cc.patch new file mode 100644 index 00000000000..a9966bd91db --- /dev/null +++ b/patches/extensions-browser-updater-update_service.cc.patch @@ -0,0 +1,13 @@ +diff --git a/extensions/browser/updater/update_service.cc b/extensions/browser/updater/update_service.cc +index 93dda0f45fe1d3f44f229ff4fe5fc0ff6a02ab6c..865b867cde2234777a78c3b914f68123cfb681ee 100644 +--- a/extensions/browser/updater/update_service.cc ++++ b/extensions/browser/updater/update_service.cc +@@ -32,7 +32,7 @@ namespace extensions { + namespace { + + // 98% of update checks have 22 or less extensions. +-constexpr size_t kMaxExtensionsPerUpdate = 22; ++constexpr size_t kMaxExtensionsPerUpdate = 1; + + void SendUninstallPingCompleteCallback(update_client::Error error) {} + diff --git a/test/BUILD.gn b/test/BUILD.gn index e11a3dbfcc9..3dec69b59dd 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -31,6 +31,7 @@ test("brave_unit_tests") { "//brave/browser/autoplay/autoplay_permission_context_unittest.cc", "//brave/browser/brave_resources_util_unittest.cc", "//brave/browser/brave_stats_updater_unittest.cc", + "//brave/browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc", "//brave/browser/net/brave_site_hacks_network_delegate_helper_unittest.cc", "//brave/browser/net/brave_static_redirect_network_delegate_helper_unittest.cc", "//brave/chromium_src/chrome/browser/signin/account_consistency_disabled_unittest.cc", diff --git a/test/data/should-be-blocked-extension.pem b/test/data/should-be-blocked-extension.pem new file mode 100644 index 00000000000..ed07fb090f5 --- /dev/null +++ b/test/data/should-be-blocked-extension.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzVwjhTBA7xISD +NxJ03pMGhuVVl3U1FAD0T8/85uEEF1R5ugI8H/MruN77vSqqsslhSez/WmOobRdj ++fLOWOixxcdcvXG0fCme4NcE1ArI0qKjOksKakv5wt1LIXZEmwOchL+Tn5nIC32z +al7UhBFHTbtPDFAmAAD3BPANRODAITSQk/+aG2Mf2topab2wK6IzKOjcil4HLRcw +Zse+3/AD9Ek2RNtcpjKeMVKFNyWXnDyZHGFSWLYSQKXiFu8hU9iFyxvLD/I2Wbhr +QJPlKh7WS78J3Hzb81H8TdDuAxQKfvSj3iwXVLmrbxzXzxOUebkRGMDPRLwvDd/Y +0YwXsnFpAgMBAAECggEACQNkCxytSS+ygDy9lPmVtpODhaZ3ycvgU2cKezmoT/IT +OQ3v7FEnwcgIDuteMFeNdvIF8vx6Oz4GWaw3d4bw5PRddWwBAbLmzZkbvV6hzx+E +9IKqwFKA0IPqZsr+/Go1B4IFddgk3LC1J9X9/5zGmIiP1CR4h7xi0AdjwCr4x7cd +5ei6M86g64tACWD+iWH5vc5TEq5zmrCrGD1hsujV0s9kzUhwsSSpI37UFT0qJRlz +O/D32b9dcnbP6hU6Bb+POHkFM3Bd91cL/xgDTOvVV6jJlikMPFw9lPk6jB+2MnEc +r897WF2tIMKsVVF7Bz5SFk/C+8RqjfLrGA0UE2gCzQKBgQDpARrdffQlhQtra2Kl +Xd2w4hQoncTn2vnX92aaIdR4NKosdahZpF7lgScelUwZGCvDfH+yRYaIf5kjno1b +q6fzx3vdVA9B4X17aP90IWucuiRX22PkruOtKkCjZ/HiFoKzgypRUEWGbUsrXojh +es4HxZ/Cmpr9F7NWd08JpL14JQKBgQDFChdAfzlt+U7kWLajjWR0Bl1ff8PnhUTZ +N+oXFww6JQo3ICcloY5WaJvKlBazBKYsVHWu28LVAFwMnmxm/BFJGcVPpRFUMbp/ +9MnE7lhrBt3+eSv8sskJeXtAWBfkqkKzRRpIB26HIVIVf71bX4kyXOnrw4GY0rn1 +KmQNPne+9QKBgQC4C01jIrgUYtCwWrQiltAjhZASvPvpf8fVVO/QU2R2RnMchxsh +I3ppoeh6eccQE02OLerXr58idldKEVTq0d3p6unl2x3qFeh98GPHIRbVRxqp4vs2 +iQYBo9xGtjYTNWCr1rE4ZUVldzLm4NcR82SGMw2MM36052GarMbbgSq/mQKBgQCT +AfRXKpSueFNkCsw5OkS4TAdeOPTwx32WkyEUGR4GQ5xbhKGwcdjAn0uc2OAWsGFK +sbkbvNqgEKScxZYbP/WllJSh14YWSwPac8gWJb3SHE2EjuNCpiFX8EsEtrUc5erd +1bDGDMVqDHIxmByvD5hM+wWL4VHPs2kKgZYkS3cMAQKBgHtcOT7nXmwteU16Wm1M +S58BdPKpDV+vAUGriVxsGPeCFEALBTTqzCuAKwoYt6bQdN9mZl6bMmXMvMJkRoJA +3nEeAg3SE4mjB/fjpt7FEJ0vgKKn+FiJZL2uuoJQJjXVT/fvabMPsCeaNDoDxQfX +4za/FZKQ1vRtG3eR9K2X2Pn0 +-----END PRIVATE KEY-----