Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3099)

Unified Diff: chrome/browser/extensions/extensions_service.cc

Issue 132003: Disable extensions besides externally installed ones and themes. (Closed)
Patch Set: Fix ui test bustage Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extensions_service.cc
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index a9f81cab2d77570808c546f1ab7c842405528f43..7960664fbe73bc1307685d2810662330f3db79ec 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -216,22 +216,26 @@ ExtensionsService::ExtensionsService(Profile* profile,
: extension_prefs_(new ExtensionPrefs(profile->GetPrefs())),
backend_loop_(backend_loop),
install_directory_(profile->GetPath().AppendASCII(kInstallDirectoryName)),
- extensions_enabled_(
- CommandLine::ForCurrentProcess()->
- HasSwitch(switches::kEnableExtensions)),
+ extensions_enabled_(false),
show_extensions_prompts_(true),
ready_(false) {
// We pass ownership of this object to the Backend.
DictionaryValue* extensions = extension_prefs_->CopyCurrentExtensions();
backend_ = new ExtensionsServiceBackend(
install_directory_, g_browser_process->resource_dispatcher_host(),
- frontend_loop, extensions);
+ frontend_loop, extensions, extensions_enabled());
}
ExtensionsService::~ExtensionsService() {
UnloadAllExtensions();
}
+void ExtensionsService::SetExtensionsEnabled(bool enabled) {
+ extensions_enabled_ = true;
+ backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(),
+ &ExtensionsServiceBackend::set_extensions_enabled, enabled));
+}
+
void ExtensionsService::Init() {
DCHECK(extensions_.size() == 0);
@@ -354,13 +358,14 @@ void ExtensionsService::OnLoadedInstalledExtensions() {
void ExtensionsService::OnExtensionsLoaded(ExtensionList* new_extensions) {
scoped_ptr<ExtensionList> cleanup(new_extensions);
- // Filter out any extensions we don't want to enable. Themes are always
- // enabled, but other extensions are only loaded if --enable-extensions is
- // present.
+ // Filter out any extensions that shouldn't be loaded. Themes are always
+ // loaded, but other extensions are only loaded if the extensions system is
+ // enabled.
ExtensionList enabled_extensions;
for (ExtensionList::iterator iter = new_extensions->begin();
iter != new_extensions->end(); ++iter) {
- if (extensions_enabled() || (*iter)->IsTheme()) {
+ if (extensions_enabled() || (*iter)->IsTheme() ||
+ (*iter)->location() == Extension::EXTERNAL_REGISTRY) {
Extension* old = GetExtensionById((*iter)->id());
if (old) {
if ((*iter)->version()->CompareTo(*(old->version())) > 0) {
@@ -451,12 +456,14 @@ void ExtensionsService::SetProviderForTesting(
ExtensionsServiceBackend::ExtensionsServiceBackend(
const FilePath& install_directory, ResourceDispatcherHost* rdh,
- MessageLoop* frontend_loop, DictionaryValue* extension_prefs)
+ MessageLoop* frontend_loop, DictionaryValue* extension_prefs,
+ bool extensions_enabled)
: frontend_(NULL),
install_directory_(install_directory),
resource_dispatcher_host_(rdh),
alert_on_error_(false),
- frontend_loop_(frontend_loop) {
+ frontend_loop_(frontend_loop),
+ extensions_enabled_(false) {
external_extension_providers_[Extension::EXTERNAL_PREF] =
linked_ptr<ExternalExtensionProvider>(
new ExternalPrefExtensionProvider(extension_prefs));
@@ -956,28 +963,22 @@ void ExtensionsServiceBackend::OnExtensionUnpacked(
return;
}
- if (!frontend_->extensions_enabled() && !extension.IsTheme()) {
-#if defined(OS_WIN)
- if (frontend_->show_extensions_prompts()) {
- win_util::MessageBox(GetForegroundWindow(),
- L"Extensions are not enabled. Add --enable-extensions to the "
- L"command-line to enable extensions.\n\n"
- L"This is a temporary message and it will be removed when extensions "
- L"UI is finalized.",
- l10n_util::GetString(IDS_PRODUCT_NAME).c_str(), MB_OK);
- }
-#endif
+ Extension::Location location = Extension::INTERNAL;
+ LookupExternalExtension(extension.id(), NULL, &location);
+
+ // We currently only allow themes and registry-installed extensions to be
+ // installed.
+ if (!extensions_enabled_ &&
+ !extension.IsTheme() &&
+ location != Extension::EXTERNAL_REGISTRY) {
ReportExtensionInstallError(extension_path,
- "Extensions are not enabled.");
+ "Extensions are not enabled (yet!)");
return;
}
- Extension::Location location = Extension::INTERNAL;
- LookupExternalExtension(extension.id(), NULL, &location);
#if defined(OS_WIN)
- bool from_external = Extension::IsExternalLocation(location);
-
- if (!extension.IsTheme() && !from_external &&
+ if (!extension.IsTheme() &&
+ !Extension::IsExternalLocation(location) &&
frontend_->show_extensions_prompts() &&
win_util::MessageBox(GetForegroundWindow(),
L"Are you sure you want to install this extension?\n\n"
« no previous file with comments | « chrome/browser/extensions/extensions_service.h ('k') | chrome/browser/extensions/extensions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698