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-----