Add pref for external extensions blocking
Bug: 944625
Change-Id: Ifa032c85938406b87d24edf4c06ec738905a7978
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1783400
Commit-Queue: Dominique Fauteux-Chapleau <[email protected]>
Reviewed-by: Devlin <[email protected]>
Cr-Commit-Position: refs/heads/master@{#706441}
diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
index 253a1785f..27a1398 100644
--- a/chrome/browser/extensions/external_provider_impl.cc
+++ b/chrome/browser/extensions/external_provider_impl.cc
@@ -44,6 +44,7 @@
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/external_install_info.h"
#include "extensions/browser/external_provider_interface.h"
+#include "extensions/browser/pref_names.h"
#include "extensions/common/extension.h"
#include "extensions/common/manifest.h"
#include "ui/base/l10n/l10n_util.h"
@@ -711,7 +712,6 @@
#else
check_admin_permissions_on_mac = ExternalPrefLoader::NONE;
#endif
-
#if !defined(OS_WIN)
int bundled_extension_creation_flags = Extension::NO_FLAGS;
#endif
@@ -760,45 +760,49 @@
chromeos::DemoSession::Get()->SetExtensionsExternalLoader(loader);
provider_list->push_back(std::move(demo_apps_provider));
}
-#elif defined(OS_LINUX)
- provider_list->push_back(std::make_unique<ExternalProviderImpl>(
- service,
- base::MakeRefCounted<ExternalPrefLoader>(
- chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
- ExternalPrefLoader::USE_USER_TYPE_PROFILE_FILTER, profile),
- profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
- bundled_extension_creation_flags));
#endif
-
- if (!profile->IsLegacySupervised()) {
-#if defined(OS_WIN)
- auto registry_provider = std::make_unique<ExternalProviderImpl>(
- service, new ExternalRegistryLoader, profile,
- Manifest::EXTERNAL_REGISTRY, Manifest::EXTERNAL_PREF_DOWNLOAD,
- Extension::NO_FLAGS);
- registry_provider->set_allow_updates(true);
- provider_list->push_back(std::move(registry_provider));
-#else
+ if (!profile->GetPrefs()->GetBoolean(pref_names::kBlockExternalExtensions)) {
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
provider_list->push_back(std::make_unique<ExternalProviderImpl>(
service,
base::MakeRefCounted<ExternalPrefLoader>(
- chrome::DIR_EXTERNAL_EXTENSIONS, check_admin_permissions_on_mac,
- nullptr),
+ chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
+ ExternalPrefLoader::USE_USER_TYPE_PROFILE_FILTER, profile),
profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
bundled_extension_creation_flags));
+#endif
+ if (!profile->IsLegacySupervised()) {
+#if defined(OS_WIN)
+ auto registry_provider = std::make_unique<ExternalProviderImpl>(
+ service, new ExternalRegistryLoader, profile,
+ Manifest::EXTERNAL_REGISTRY, Manifest::EXTERNAL_PREF_DOWNLOAD,
+ Extension::NO_FLAGS);
+ registry_provider->set_allow_updates(true);
+ provider_list->push_back(std::move(registry_provider));
+#else
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
+ chrome::DIR_EXTERNAL_EXTENSIONS, check_admin_permissions_on_mac,
+ nullptr),
+ profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
+ bundled_extension_creation_flags));
- // Define a per-user source of external extensions.
+ // Define a per-user source of external extensions.
#if defined(OS_MACOSX) || (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING))
- provider_list->push_back(std::make_unique<ExternalProviderImpl>(
- service,
- base::MakeRefCounted<ExternalPrefLoader>(
- chrome::DIR_USER_EXTERNAL_EXTENSIONS, ExternalPrefLoader::NONE,
- nullptr),
- profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
- Extension::NO_FLAGS));
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
+ chrome::DIR_USER_EXTERNAL_EXTENSIONS, ExternalPrefLoader::NONE,
+ nullptr),
+ profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
+ Extension::NO_FLAGS));
#endif
#endif
+ }
+ }
+ if (!profile->IsLegacySupervised()) {
#if !defined(OS_CHROMEOS)
// The default apps are installed as INTERNAL but use the external
// extension installer codeflow.