diff --git a/app/generated_resources.grd b/app/generated_resources.grd index 012e7dabbee..d59540d856b 100644 --- a/app/generated_resources.grd +++ b/app/generated_resources.grd @@ -15,7 +15,9 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> Brave Payments - + + $1 (extension ID "$2abacabadabacabaeabacabadabacabaf") is not allowed in Brave. Please see about:extensions to install extensions. + Close Chrome diff --git a/browser/extensions/BUILD.gn b/browser/extensions/BUILD.gn index 28aa1489691..0fd2f0a2e13 100644 --- a/browser/extensions/BUILD.gn +++ b/browser/extensions/BUILD.gn @@ -10,6 +10,8 @@ source_set("extensions") { "brave_component_extension_resource_manager.h", "brave_component_loader.cc", "brave_component_loader.h", + "brave_extension_management.cc", + "brave_extension_management.h", ] deps = [ "//brave/browser/resources:brave_extension_grit", diff --git a/browser/extensions/brave_extension_management.cc b/browser/extensions/brave_extension_management.cc new file mode 100644 index 00000000000..ad5f98d6152 --- /dev/null +++ b/browser/extensions/brave_extension_management.cc @@ -0,0 +1,22 @@ +/* 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_management.h" + +#include "brave/extensions/browser/brave_extension_provider.h" + +namespace extensions { + +BraveExtensionManagement::BraveExtensionManagement( + PrefService* pref_service, + bool is_signin_profile) + : ExtensionManagement(pref_service, is_signin_profile) { + providers_.push_back( + std::make_unique()); +} + +BraveExtensionManagement::~BraveExtensionManagement() { +} + +} // namespace extensions diff --git a/browser/extensions/brave_extension_management.h b/browser/extensions/brave_extension_management.h new file mode 100644 index 00000000000..3d33ff46e98 --- /dev/null +++ b/browser/extensions/brave_extension_management.h @@ -0,0 +1,21 @@ +/* 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_EXTENSION_MANAGEMENT_H_ +#define BRAVE_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_H_ + +#include "chrome/browser/extensions/extension_management.h" + +namespace extensions { + +class BraveExtensionManagement : public ExtensionManagement { + public: + BraveExtensionManagement(PrefService* pref_service, bool is_signin_profile); + ~BraveExtensionManagement() override; + DISALLOW_COPY_AND_ASSIGN(BraveExtensionManagement); +}; + +} // namespace extensions + +#endif // BRAVE_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_H_ diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index 8ddae52cea5..ff3f0f8274c 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn @@ -3,6 +3,8 @@ source_set("extensions") { sources = [ "browser/brave_extension_prefs.cc", "browser/brave_extension_prefs.h", + "browser/brave_extension_provider.cc", + "browser/brave_extension_provider.h", ] public_deps = [ diff --git a/extensions/browser/brave_extension_provider.cc b/extensions/browser/brave_extension_provider.cc new file mode 100644 index 00000000000..b70903b7606 --- /dev/null +++ b/extensions/browser/brave_extension_provider.cc @@ -0,0 +1,134 @@ +/* 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/extensions/browser/brave_extension_provider.h" + +#include +#include +#include + +#include "base/strings/utf_string_conversions.h" +#include "brave/grit/generated_resources.h" +#include "ui/base/l10n/l10n_util.h" + +namespace { + +const char* brave_extension_id = "mnojpmjdmbbfmejpflffifhffcmidifd"; + +bool IsWhitelisted(const std::string& id) { + static std::vector whitelist({ + // Brave + brave_extension_id, + // CryptoTokenExtension + "kmendfapggjehodndflmmgagdbamhnfd", + // Cloud Print + "mfehgcgbbipciphmccgaenjidiccnmng", + // Chromium PDF Viewer + "mhjfbmdgcfjbbpaeojofohoefgiehjai", + // Web Store + "ahfgeienlihckogmohjhadlkjgocpleb", + // Grammarly for Chrome + "kbfnbcaeplbcioakkpcpgfkobkghlhen", + // Brave Ad Block Updater + "cffkpbalmllkdoenhmdmpbkajipdjfam", + // Brave Tracking Protection Updater + "afalakplffnnnlkncjhbmahjfjhmlkal", + // Brave HTTPS Everywhere Updater + "oofiananboodjbbmdelgdommihjbkfag", + // Test ID: Brave Ad Block Updater + "naccapggpomhlhoifnlebfoocegenbol", + // Test ID: Brave Tracking Protection Updater + "eclbkhjphkhalklhipiicaldjbnhdfkc", + // Test ID: Brave HTTPS Everywhere Updater + "bhlmpjhncoojbkemjkeppfahkglffilp", + // 1Password + "aomjjhallfgjeglblehebfpbcfeobpgk", + // Dashlane + "fdjamakpfbbddfjaooikfcpapjohcfmg", + // LastPass + "hdokiejnpimakedhajhdlcegeplioahd", + // Pocket + "niloccemoadcdkdjlinkgdfekeahmflj", + // Enpass + "kmcfomidfpdkfieipokbalgegidffkal", + // Vimium + "dbepggeogbaibhgnhhndojpepiihcmeb", + // bitwarden + "nngceckbapebfimnlniiiahkandclblb", + // Honey + "bmnlcjabgnpnenekpadlanbbkooimhnj", + // Pinterest + "gpdjojdkbbmdfjfahjcgigfpmkopogic", + // MetaMask + "nkbihfbeogaeaoehlefnkodbefgpgknn", + // Reddit Enhancement Suite + "kbmfpngjjgdllneeigpgjifpgocmfgmb", + // BetterTTV + "ajopnjidmegmdimjlfnijceegpefgped", + }); + return std::find(whitelist.begin(), whitelist.end(), id) != whitelist.end(); +} + +} // namespace + +namespace extensions { + +BraveExtensionProvider::BraveExtensionProvider() { +} + +BraveExtensionProvider::~BraveExtensionProvider() { +} + +std::string BraveExtensionProvider::GetDebugPolicyProviderName() const { +#if defined(NDEBUG) + NOTREACHED(); + return std::string(); +#else + return "Brave Extension Provider"; +#endif +} + +bool BraveExtensionProvider::UserMayLoad(const Extension* extension, + base::string16* error) const { + if (!IsWhitelisted(extension->id())) { + if (error) { + *error = + l10n_util::GetStringFUTF16(IDS_EXTENSION_CANT_INSTALL_ON_BRAVE, + base::UTF8ToUTF16(extension->name()), + base::UTF8ToUTF16(extension->id())); + } +#if defined(NDEBUG) + LOG(ERROR) << "Extension will not install " + << " ID: " << base::UTF8ToUTF16(extension->id()) << ", " + << " Name: " << base::UTF8ToUTF16(extension->name()); +#endif + return false; + } + return true; +} + +bool BraveExtensionProvider::UserMayModifySettings( + const Extension* extension, + base::string16* error) const { + return true; +} + +bool BraveExtensionProvider::MustRemainEnabled(const Extension* extension, + base::string16* error) const { + return false; +} + +bool BraveExtensionProvider::MustRemainDisabled( + const Extension* extension, + disable_reason::DisableReason* reason, + base::string16* error) const { + return extension->id() == brave_extension_id; +} + +bool BraveExtensionProvider::MustRemainInstalled(const Extension* extension, + base::string16* error) const { + return extension->id() == brave_extension_id; +} + +} // namespace extensions diff --git a/extensions/browser/brave_extension_provider.h b/extensions/browser/brave_extension_provider.h new file mode 100644 index 00000000000..c8e6bc948a1 --- /dev/null +++ b/extensions/browser/brave_extension_provider.h @@ -0,0 +1,34 @@ +/* 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_EXTENSIONS_BROWSER_MANAGEMENT_POLICY_H_ +#define BRAVE_EXTENSIONS_BROWSER_MANAGEMENT_POLICY_H_ + +#include "extensions/browser/management_policy.h" + +namespace extensions { + +class BraveExtensionProvider : public ManagementPolicy::Provider { + public: + BraveExtensionProvider(); + ~BraveExtensionProvider() override; + std::string GetDebugPolicyProviderName() const override; + bool UserMayLoad(const Extension* extension, + base::string16* error) const override; + bool UserMayModifySettings(const Extension* extension, + base::string16* error) const override; + bool MustRemainEnabled(const Extension* extension, + base::string16* error) const override; + bool MustRemainDisabled(const Extension* extension, + disable_reason::DisableReason* reason, + base::string16* error) const override; + bool MustRemainInstalled(const Extension* extension, + base::string16* error) const override; + private: + DISALLOW_COPY_AND_ASSIGN(BraveExtensionProvider); +}; + +} // namespace extensions + +#endif diff --git a/patches/chrome-browser-extensions-extension_management.cc.patch b/patches/chrome-browser-extensions-extension_management.cc.patch new file mode 100644 index 00000000000..65f76ec6f2f --- /dev/null +++ b/patches/chrome-browser-extensions-extension_management.cc.patch @@ -0,0 +1,21 @@ +diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc +index bc6fe02652cd98591180d3e3e5d794941abfb615..c0e7448bff844680c093d455153872b2cc38e9d6 100644 +--- a/chrome/browser/extensions/extension_management.cc ++++ b/chrome/browser/extensions/extension_management.cc +@@ -15,6 +15,7 @@ + #include "base/strings/string_util.h" + #include "base/trace_event/trace_event.h" + #include "base/version.h" ++#include "brave/browser/extensions/brave_extension_management.h" + #include "chrome/browser/extensions/extension_management_constants.h" + #include "chrome/browser/extensions/extension_management_internal.h" + #include "chrome/browser/extensions/external_policy_loader.h" +@@ -551,7 +552,7 @@ KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor( + #if defined(OS_CHROMEOS) + is_signin_profile = chromeos::ProfileHelper::IsSigninProfile(profile); + #endif +- return new ExtensionManagement(profile->GetPrefs(), is_signin_profile); ++ return new BraveExtensionManagement(profile->GetPrefs(), is_signin_profile); + } + + content::BrowserContext* ExtensionManagementFactory::GetBrowserContextToUse( diff --git a/patches/chrome-browser-extensions-extension_management.h.patch b/patches/chrome-browser-extensions-extension_management.h.patch new file mode 100644 index 00000000000..8b0ce8c8e35 --- /dev/null +++ b/patches/chrome-browser-extensions-extension_management.h.patch @@ -0,0 +1,12 @@ +diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h +index d7ffea9a5b7592821ef626326fbb7161173ae517..a6ca3e41d7d68329e8900480cf20032111509c81 100644 +--- a/chrome/browser/extensions/extension_management.h ++++ b/chrome/browser/extensions/extension_management.h +@@ -163,6 +163,7 @@ class ExtensionManagement : public KeyedService { + std::string* required_version) const; + + private: ++ friend class BraveExtensionManagement; + using SettingsIdMap = + std::unordered_map>;