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

Side by Side Diff: chrome/browser/extensions/extension_service.cc

Issue 345693002: Extensions: Split extensions utility IPC messages into its own file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: disable another test Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/threading/sequenced_worker_pool.h" 16 #include "base/threading/sequenced_worker_pool.h"
17 #include "base/threading/thread_restrictions.h" 17 #include "base/threading/thread_restrictions.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "chrome/browser/browser_process.h" 19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/chrome_notification_types.h" 20 #include "chrome/browser/chrome_notification_types.h"
21 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" 21 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
22 #include "chrome/browser/extensions/component_loader.h" 22 #include "chrome/browser/extensions/component_loader.h"
23 #include "chrome/browser/extensions/crx_installer.h"
24 #include "chrome/browser/extensions/data_deleter.h" 23 #include "chrome/browser/extensions/data_deleter.h"
25 #include "chrome/browser/extensions/extension_assets_manager.h" 24 #include "chrome/browser/extensions/extension_assets_manager.h"
26 #include "chrome/browser/extensions/extension_disabled_ui.h" 25 #include "chrome/browser/extensions/extension_disabled_ui.h"
27 #include "chrome/browser/extensions/extension_error_controller.h" 26 #include "chrome/browser/extensions/extension_error_controller.h"
28 #include "chrome/browser/extensions/extension_install_ui.h" 27 #include "chrome/browser/extensions/extension_install_ui.h"
29 #include "chrome/browser/extensions/extension_special_storage_policy.h" 28 #include "chrome/browser/extensions/extension_special_storage_policy.h"
30 #include "chrome/browser/extensions/extension_sync_service.h" 29 #include "chrome/browser/extensions/extension_sync_service.h"
31 #include "chrome/browser/extensions/extension_util.h" 30 #include "chrome/browser/extensions/extension_util.h"
32 #include "chrome/browser/extensions/external_install_manager.h" 31 #include "chrome/browser/extensions/external_install_manager.h"
33 #include "chrome/browser/extensions/external_provider_impl.h" 32 #include "chrome/browser/extensions/external_provider_impl.h"
34 #include "chrome/browser/extensions/install_verifier.h" 33 #include "chrome/browser/extensions/install_verifier.h"
35 #include "chrome/browser/extensions/installed_loader.h" 34 #include "chrome/browser/extensions/installed_loader.h"
36 #include "chrome/browser/extensions/pending_extension_manager.h" 35 #include "chrome/browser/extensions/pending_extension_manager.h"
37 #include "chrome/browser/extensions/permissions_updater.h" 36 #include "chrome/browser/extensions/permissions_updater.h"
38 #include "chrome/browser/extensions/shared_module_service.h" 37 #include "chrome/browser/extensions/shared_module_service.h"
39 #include "chrome/browser/extensions/unpacked_installer.h" 38 #include "chrome/browser/extensions/unpacked_installer.h"
40 #include "chrome/browser/extensions/updater/extension_cache.h" 39 #include "chrome/browser/extensions/updater/extension_cache.h"
41 #include "chrome/browser/extensions/updater/extension_updater.h"
42 #include "chrome/browser/profiles/profile.h" 40 #include "chrome/browser/profiles/profile.h"
43 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 41 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
44 #include "chrome/browser/ui/webui/favicon_source.h" 42 #include "chrome/browser/ui/webui/favicon_source.h"
45 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" 43 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
46 #include "chrome/browser/ui/webui/theme_source.h" 44 #include "chrome/browser/ui/webui/theme_source.h"
47 #include "chrome/common/chrome_switches.h" 45 #include "chrome/common/chrome_switches.h"
48 #include "chrome/common/crash_keys.h" 46 #include "chrome/common/crash_keys.h"
49 #include "chrome/common/extensions/extension_constants.h" 47 #include "chrome/common/extensions/extension_constants.h"
50 #include "chrome/common/extensions/features/feature_channel.h" 48 #include "chrome/common/extensions/features/feature_channel.h"
51 #include "chrome/common/extensions/manifest_url_handler.h" 49 #include "chrome/common/extensions/manifest_url_handler.h"
(...skipping 21 matching lines...) Expand all
73 #include "extensions/common/one_shot_event.h" 71 #include "extensions/common/one_shot_event.h"
74 #include "extensions/common/permissions/permission_message_provider.h" 72 #include "extensions/common/permissions/permission_message_provider.h"
75 #include "extensions/common/permissions/permissions_data.h" 73 #include "extensions/common/permissions/permissions_data.h"
76 74
77 #if defined(OS_CHROMEOS) 75 #if defined(OS_CHROMEOS)
78 #include "chrome/browser/chromeos/extensions/install_limiter.h" 76 #include "chrome/browser/chromeos/extensions/install_limiter.h"
79 #include "webkit/browser/fileapi/file_system_backend.h" 77 #include "webkit/browser/fileapi/file_system_backend.h"
80 #include "webkit/browser/fileapi/file_system_context.h" 78 #include "webkit/browser/fileapi/file_system_context.h"
81 #endif 79 #endif
82 80
81 // TODO(thestig): Eventually remove the #ifdefs when ExtensionService is no
82 // longer used on mobile.
83 #if defined(ENABLE_EXTENSIONS)
84 #include "chrome/browser/extensions/crx_installer.h"
85 #include "chrome/browser/extensions/updater/extension_updater.h"
86 #endif
87
83 using content::BrowserContext; 88 using content::BrowserContext;
84 using content::BrowserThread; 89 using content::BrowserThread;
85 using content::DevToolsAgentHost; 90 using content::DevToolsAgentHost;
86 using extensions::CrxInstaller; 91 using extensions::CrxInstaller;
87 using extensions::Extension; 92 using extensions::Extension;
88 using extensions::ExtensionIdSet; 93 using extensions::ExtensionIdSet;
89 using extensions::ExtensionInfo; 94 using extensions::ExtensionInfo;
90 using extensions::ExtensionRegistry; 95 using extensions::ExtensionRegistry;
91 using extensions::ExtensionSet; 96 using extensions::ExtensionSet;
92 using extensions::FeatureSwitch; 97 using extensions::FeatureSwitch;
(...skipping 14 matching lines...) Expand all
107 // Histogram values for logging events related to externally installed 112 // Histogram values for logging events related to externally installed
108 // extensions. 113 // extensions.
109 enum ExternalExtensionEvent { 114 enum ExternalExtensionEvent {
110 EXTERNAL_EXTENSION_INSTALLED = 0, 115 EXTERNAL_EXTENSION_INSTALLED = 0,
111 EXTERNAL_EXTENSION_IGNORED, 116 EXTERNAL_EXTENSION_IGNORED,
112 EXTERNAL_EXTENSION_REENABLED, 117 EXTERNAL_EXTENSION_REENABLED,
113 EXTERNAL_EXTENSION_UNINSTALLED, 118 EXTERNAL_EXTENSION_UNINSTALLED,
114 EXTERNAL_EXTENSION_BUCKET_BOUNDARY, 119 EXTERNAL_EXTENSION_BUCKET_BOUNDARY,
115 }; 120 };
116 121
122 #if defined(ENABLE_EXTENSIONS)
117 // Prompt the user this many times before considering an extension acknowledged. 123 // Prompt the user this many times before considering an extension acknowledged.
118 static const int kMaxExtensionAcknowledgePromptCount = 3; 124 const int kMaxExtensionAcknowledgePromptCount = 3;
125 #endif
119 126
120 // Wait this many seconds after an extensions becomes idle before updating it. 127 // Wait this many seconds after an extensions becomes idle before updating it.
121 static const int kUpdateIdleDelay = 5; 128 const int kUpdateIdleDelay = 5;
122 129
123 static bool IsCWSSharedModule(const Extension* extension) { 130 bool IsCWSSharedModule(const Extension* extension) {
124 return extension->from_webstore() && 131 return extension->from_webstore() &&
125 SharedModuleInfo::IsSharedModule(extension); 132 SharedModuleInfo::IsSharedModule(extension);
126 } 133 }
127 134
128 class SharedModuleProvider : public extensions::ManagementPolicy::Provider { 135 class SharedModuleProvider : public extensions::ManagementPolicy::Provider {
129 public: 136 public:
130 SharedModuleProvider() {} 137 SharedModuleProvider() {}
131 virtual ~SharedModuleProvider() {} 138 virtual ~SharedModuleProvider() {}
132 139
133 virtual std::string GetDebugPolicyProviderName() const OVERRIDE { 140 virtual std::string GetDebugPolicyProviderName() const OVERRIDE {
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 pref_change_registrar_.Init(profile->GetPrefs()); 321 pref_change_registrar_.Init(profile->GetPrefs());
315 base::Closure callback = 322 base::Closure callback =
316 base::Bind(&ExtensionService::OnExtensionInstallPrefChanged, 323 base::Bind(&ExtensionService::OnExtensionInstallPrefChanged,
317 base::Unretained(this)); 324 base::Unretained(this));
318 pref_change_registrar_.Add(extensions::pref_names::kInstallAllowList, 325 pref_change_registrar_.Add(extensions::pref_names::kInstallAllowList,
319 callback); 326 callback);
320 pref_change_registrar_.Add(extensions::pref_names::kInstallDenyList, 327 pref_change_registrar_.Add(extensions::pref_names::kInstallDenyList,
321 callback); 328 callback);
322 pref_change_registrar_.Add(extensions::pref_names::kAllowedTypes, callback); 329 pref_change_registrar_.Add(extensions::pref_names::kAllowedTypes, callback);
323 330
331 #if defined(ENABLE_EXTENSIONS)
324 // Set up the ExtensionUpdater 332 // Set up the ExtensionUpdater
325 if (autoupdate_enabled) { 333 if (autoupdate_enabled) {
326 int update_frequency = extensions::kDefaultUpdateFrequencySeconds; 334 int update_frequency = extensions::kDefaultUpdateFrequencySeconds;
327 if (command_line->HasSwitch(switches::kExtensionsUpdateFrequency)) { 335 if (command_line->HasSwitch(switches::kExtensionsUpdateFrequency)) {
328 base::StringToInt(command_line->GetSwitchValueASCII( 336 base::StringToInt(command_line->GetSwitchValueASCII(
329 switches::kExtensionsUpdateFrequency), 337 switches::kExtensionsUpdateFrequency),
330 &update_frequency); 338 &update_frequency);
331 } 339 }
332 updater_.reset(new extensions::ExtensionUpdater( 340 updater_.reset(new extensions::ExtensionUpdater(
333 this, 341 this,
334 extension_prefs, 342 extension_prefs,
335 profile->GetPrefs(), 343 profile->GetPrefs(),
336 profile, 344 profile,
337 update_frequency, 345 update_frequency,
338 extensions::ExtensionCache::GetInstance())); 346 extensions::ExtensionCache::GetInstance()));
339 } 347 }
348 #endif
340 349
341 component_loader_.reset( 350 component_loader_.reset(
342 new extensions::ComponentLoader(this, 351 new extensions::ComponentLoader(this,
343 profile->GetPrefs(), 352 profile->GetPrefs(),
344 g_browser_process->local_state(), 353 g_browser_process->local_state(),
345 profile)); 354 profile));
346 355
347 if (extensions_enabled_) { 356 if (extensions_enabled_) {
348 extensions::ExternalProviderImpl::CreateExternalProviders( 357 extensions::ExternalProviderImpl::CreateExternalProviders(
349 this, profile_, &external_extension_providers_); 358 this, profile_, &external_extension_providers_);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 state == extensions::BLACKLISTED_CWS_POLICY_VIOLATION) 510 state == extensions::BLACKLISTED_CWS_POLICY_VIOLATION)
502 greylist_.Insert(*it); 511 greylist_.Insert(*it);
503 } 512 }
504 } 513 }
505 514
506 bool ExtensionService::UpdateExtension(const std::string& id, 515 bool ExtensionService::UpdateExtension(const std::string& id,
507 const base::FilePath& extension_path, 516 const base::FilePath& extension_path,
508 bool file_ownership_passed, 517 bool file_ownership_passed,
509 CrxInstaller** out_crx_installer) { 518 CrxInstaller** out_crx_installer) {
510 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 519 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
520 #if defined(ENABLE_EXTENSIONS)
511 if (browser_terminating_) { 521 if (browser_terminating_) {
512 LOG(WARNING) << "Skipping UpdateExtension due to browser shutdown"; 522 LOG(WARNING) << "Skipping UpdateExtension due to browser shutdown";
513 // Leak the temp file at extension_path. We don't want to add to the disk 523 // Leak the temp file at extension_path. We don't want to add to the disk
514 // I/O burden at shutdown, we can't rely on the I/O completing anyway, and 524 // I/O burden at shutdown, we can't rely on the I/O completing anyway, and
515 // the file is in the OS temp directory which should be cleaned up for us. 525 // the file is in the OS temp directory which should be cleaned up for us.
516 return false; 526 return false;
517 } 527 }
518 528
519 const extensions::PendingExtensionInfo* pending_extension_info = 529 const extensions::PendingExtensionInfo* pending_extension_info =
520 pending_extension_manager()->GetById(id); 530 pending_extension_manager()->GetById(id);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 installer->set_creation_flags(creation_flags); 599 installer->set_creation_flags(creation_flags);
590 600
591 installer->set_delete_source(file_ownership_passed); 601 installer->set_delete_source(file_ownership_passed);
592 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); 602 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
593 installer->InstallCrx(extension_path); 603 installer->InstallCrx(extension_path);
594 604
595 if (out_crx_installer) 605 if (out_crx_installer)
596 *out_crx_installer = installer.get(); 606 *out_crx_installer = installer.get();
597 607
598 return true; 608 return true;
609 #else
610 return false;
611 #endif
599 } 612 }
600 613
601 void ExtensionService::ReloadExtension( 614 void ExtensionService::ReloadExtension(
602 // "transient" because the process of reloading may cause the reference 615 // "transient" because the process of reloading may cause the reference
603 // to become invalid. Instead, use |extension_id|, a copy. 616 // to become invalid. Instead, use |extension_id|, a copy.
604 const std::string& transient_extension_id) { 617 const std::string& transient_extension_id) {
605 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 618 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
606 619
607 // If the extension is already reloading, don't reload again. 620 // If the extension is already reloading, don't reload again.
608 if (extension_prefs_->GetDisableReasons(transient_extension_id) & 621 if (extension_prefs_->GetDisableReasons(transient_extension_id) &
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 1183
1171 for (size_t i = 0; i < to_unload.size(); ++i) 1184 for (size_t i = 0; i < to_unload.size(); ++i)
1172 UnloadExtension(to_unload[i], UnloadedExtensionInfo::REASON_DISABLE); 1185 UnloadExtension(to_unload[i], UnloadedExtensionInfo::REASON_DISABLE);
1173 1186
1174 for (std::map<std::string, Extension::DisableReason>::const_iterator i = 1187 for (std::map<std::string, Extension::DisableReason>::const_iterator i =
1175 to_disable.begin(); i != to_disable.end(); ++i) 1188 to_disable.begin(); i != to_disable.end(); ++i)
1176 DisableExtension(i->first, i->second); 1189 DisableExtension(i->first, i->second);
1177 } 1190 }
1178 1191
1179 void ExtensionService::CheckForUpdatesSoon() { 1192 void ExtensionService::CheckForUpdatesSoon() {
1193 #if defined(ENABLE_EXTENSIONS)
1180 // This can legitimately happen in unit tests. 1194 // This can legitimately happen in unit tests.
1181 if (!updater_.get()) 1195 if (!updater_.get())
1182 return; 1196 return;
1183 1197
1184 if (AreAllExternalProvidersReady()) { 1198 if (AreAllExternalProvidersReady()) {
1185 updater_->CheckSoon(); 1199 updater_->CheckSoon();
1186 } else { 1200 } else {
1187 // Sync can start updating before all the external providers are ready 1201 // Sync can start updating before all the external providers are ready
1188 // during startup. Start the update as soon as those providers are ready, 1202 // during startup. Start the update as soon as those providers are ready,
1189 // but not before. 1203 // but not before.
1190 update_once_all_providers_are_ready_ = true; 1204 update_once_all_providers_are_ready_ = true;
1191 } 1205 }
1206 #endif
1192 } 1207 }
1193 1208
1194 // Some extensions will autoupdate themselves externally from Chrome. These 1209 // Some extensions will autoupdate themselves externally from Chrome. These
1195 // are typically part of some larger client application package. To support 1210 // are typically part of some larger client application package. To support
1196 // these, the extension will register its location in the the preferences file 1211 // these, the extension will register its location in the the preferences file
1197 // (and also, on Windows, in the registry) and this code will periodically 1212 // (and also, on Windows, in the registry) and this code will periodically
1198 // check that location for a .crx file, which it will then install locally if 1213 // check that location for a .crx file, which it will then install locally if
1199 // a new version is available. 1214 // a new version is available.
1200 // Errors are reported through ExtensionErrorReporter. Succcess is not 1215 // Errors are reported through ExtensionErrorReporter. Succcess is not
1201 // reported. 1216 // reported.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 for (i = external_extension_providers_.begin(); 1254 for (i = external_extension_providers_.begin();
1240 i != external_extension_providers_.end(); ++i) { 1255 i != external_extension_providers_.end(); ++i) {
1241 if (!i->get()->IsReady()) 1256 if (!i->get()->IsReady())
1242 return false; 1257 return false;
1243 } 1258 }
1244 return true; 1259 return true;
1245 } 1260 }
1246 1261
1247 void ExtensionService::OnAllExternalProvidersReady() { 1262 void ExtensionService::OnAllExternalProvidersReady() {
1248 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1263 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1264 #if defined(ENABLE_EXTENSIONS)
1249 base::TimeDelta elapsed = base::Time::Now() - profile_->GetStartTime(); 1265 base::TimeDelta elapsed = base::Time::Now() - profile_->GetStartTime();
1250 UMA_HISTOGRAM_TIMES("Extension.ExternalProvidersReadyAfter", elapsed); 1266 UMA_HISTOGRAM_TIMES("Extension.ExternalProvidersReadyAfter", elapsed);
1251 1267
1252 // Install any pending extensions. 1268 // Install any pending extensions.
1253 if (update_once_all_providers_are_ready_ && updater()) { 1269 if (update_once_all_providers_are_ready_ && updater()) {
1254 update_once_all_providers_are_ready_ = false; 1270 update_once_all_providers_are_ready_ = false;
1255 extensions::ExtensionUpdater::CheckParams params; 1271 extensions::ExtensionUpdater::CheckParams params;
1256 params.callback = external_updates_finished_callback_; 1272 params.callback = external_updates_finished_callback_;
1257 updater()->CheckNow(params); 1273 updater()->CheckNow(params);
1258 } 1274 }
1259 1275
1260 // Uninstall all the unclaimed extensions. 1276 // Uninstall all the unclaimed extensions.
1261 scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> extensions_info( 1277 scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> extensions_info(
1262 extension_prefs_->GetInstalledExtensionsInfo()); 1278 extension_prefs_->GetInstalledExtensionsInfo());
1263 for (size_t i = 0; i < extensions_info->size(); ++i) { 1279 for (size_t i = 0; i < extensions_info->size(); ++i) {
1264 ExtensionInfo* info = extensions_info->at(i).get(); 1280 ExtensionInfo* info = extensions_info->at(i).get();
1265 if (Manifest::IsExternalLocation(info->extension_location)) 1281 if (Manifest::IsExternalLocation(info->extension_location))
1266 CheckExternalUninstall(info->extension_id); 1282 CheckExternalUninstall(info->extension_id);
1267 } 1283 }
1268 1284
1269 error_controller_->ShowErrorIfNeeded(); 1285 error_controller_->ShowErrorIfNeeded();
1270 1286
1271 UpdateExternalExtensionAlert(); 1287 UpdateExternalExtensionAlert();
1288 #endif
1272 } 1289 }
1273 1290
1274 void ExtensionService::AcknowledgeExternalExtension(const std::string& id) { 1291 void ExtensionService::AcknowledgeExternalExtension(const std::string& id) {
1275 extension_prefs_->AcknowledgeExternalExtension(id); 1292 extension_prefs_->AcknowledgeExternalExtension(id);
1276 UpdateExternalExtensionAlert(); 1293 UpdateExternalExtensionAlert();
1277 } 1294 }
1278 1295
1279 bool ExtensionService::IsUnacknowledgedExternalExtension( 1296 bool ExtensionService::IsUnacknowledgedExternalExtension(
1280 const Extension* extension) { 1297 const Extension* extension) {
1281 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled()) 1298 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled())
1282 return false; 1299 return false;
1283 1300
1284 return (Manifest::IsExternalLocation(extension->location()) && 1301 return (Manifest::IsExternalLocation(extension->location()) &&
1285 !extension_prefs_->IsExternalExtensionAcknowledged(extension->id()) && 1302 !extension_prefs_->IsExternalExtensionAcknowledged(extension->id()) &&
1286 !(extension_prefs_->GetDisableReasons(extension->id()) & 1303 !(extension_prefs_->GetDisableReasons(extension->id()) &
1287 Extension::DISABLE_SIDELOAD_WIPEOUT)); 1304 Extension::DISABLE_SIDELOAD_WIPEOUT));
1288 } 1305 }
1289 1306
1290 void ExtensionService::UpdateExternalExtensionAlert() { 1307 void ExtensionService::UpdateExternalExtensionAlert() {
1308 #if defined(ENABLE_EXTENSIONS)
1291 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled()) 1309 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled())
1292 return; 1310 return;
1293 1311
1294 const Extension* extension = NULL; 1312 const Extension* extension = NULL;
1295 const ExtensionSet& disabled_extensions = registry_->disabled_extensions(); 1313 const ExtensionSet& disabled_extensions = registry_->disabled_extensions();
1296 for (ExtensionSet::const_iterator iter = disabled_extensions.begin(); 1314 for (ExtensionSet::const_iterator iter = disabled_extensions.begin();
1297 iter != disabled_extensions.end(); ++iter) { 1315 iter != disabled_extensions.end(); ++iter) {
1298 const Extension* e = iter->get(); 1316 const Extension* e = iter->get();
1299 if (IsUnacknowledgedExternalExtension(e)) { 1317 if (IsUnacknowledgedExternalExtension(e)) {
1300 extension = e; 1318 extension = e;
(...skipping 27 matching lines...) Expand all
1328 } 1346 }
1329 if (is_first_run_) 1347 if (is_first_run_)
1330 extension_prefs_->SetExternalInstallFirstRun(extension->id()); 1348 extension_prefs_->SetExternalInstallFirstRun(extension->id());
1331 // first_run is true if the extension was installed during a first run 1349 // first_run is true if the extension was installed during a first run
1332 // (even if it's post-first run now). 1350 // (even if it's post-first run now).
1333 bool first_run = extension_prefs_->IsExternalInstallFirstRun( 1351 bool first_run = extension_prefs_->IsExternalInstallFirstRun(
1334 extension->id()); 1352 extension->id());
1335 external_install_manager_->AddExternalInstallError(extension, first_run); 1353 external_install_manager_->AddExternalInstallError(extension, first_run);
1336 } 1354 }
1337 } 1355 }
1356 #endif // defined(ENABLE_EXTENSIONS)
1338 } 1357 }
1339 1358
1340 void ExtensionService::UnloadExtension( 1359 void ExtensionService::UnloadExtension(
1341 const std::string& extension_id, 1360 const std::string& extension_id,
1342 UnloadedExtensionInfo::Reason reason) { 1361 UnloadedExtensionInfo::Reason reason) {
1343 // Make sure the extension gets deleted after we return from this function. 1362 // Make sure the extension gets deleted after we return from this function.
1344 int include_mask = 1363 int include_mask =
1345 ExtensionRegistry::EVERYTHING & ~ExtensionRegistry::TERMINATED; 1364 ExtensionRegistry::EVERYTHING & ~ExtensionRegistry::TERMINATED;
1346 scoped_refptr<const Extension> extension( 1365 scoped_refptr<const Extension> extension(
1347 registry_->GetExtensionById(extension_id, include_mask)); 1366 registry_->GetExtensionById(extension_id, include_mask));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 1431
1413 void ExtensionService::SetReadyAndNotifyListeners() { 1432 void ExtensionService::SetReadyAndNotifyListeners() {
1414 ready_->Signal(); 1433 ready_->Signal();
1415 content::NotificationService::current()->Notify( 1434 content::NotificationService::current()->Notify(
1416 chrome::NOTIFICATION_EXTENSIONS_READY, 1435 chrome::NOTIFICATION_EXTENSIONS_READY,
1417 content::Source<Profile>(profile_), 1436 content::Source<Profile>(profile_),
1418 content::NotificationService::NoDetails()); 1437 content::NotificationService::NoDetails());
1419 } 1438 }
1420 1439
1421 void ExtensionService::OnLoadedInstalledExtensions() { 1440 void ExtensionService::OnLoadedInstalledExtensions() {
1441 #if defined(ENABLE_EXTENSIONS)
1422 if (updater_) 1442 if (updater_)
1423 updater_->Start(); 1443 updater_->Start();
1424 1444
1425 OnBlacklistUpdated(); 1445 OnBlacklistUpdated();
1446 #endif
1426 } 1447 }
1427 1448
1428 void ExtensionService::AddExtension(const Extension* extension) { 1449 void ExtensionService::AddExtension(const Extension* extension) {
1429 // TODO(jstritar): We may be able to get rid of this branch by overriding the 1450 // TODO(jstritar): We may be able to get rid of this branch by overriding the
1430 // default extension state to DISABLED when the --disable-extensions flag 1451 // default extension state to DISABLED when the --disable-extensions flag
1431 // is set (http://crbug.com/29067). 1452 // is set (http://crbug.com/29067).
1432 if (!extensions_enabled() && 1453 if (!extensions_enabled() &&
1433 !extension->is_theme() && 1454 !extension->is_theme() &&
1434 extension->location() != Manifest::COMPONENT && 1455 extension->location() != Manifest::COMPONENT &&
1435 !Manifest::IsExternalLocation(extension->location())) { 1456 !Manifest::IsExternalLocation(extension->location())) {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 } 2046 }
2026 2047
2027 bool ExtensionService::OnExternalExtensionFileFound( 2048 bool ExtensionService::OnExternalExtensionFileFound(
2028 const std::string& id, 2049 const std::string& id,
2029 const Version* version, 2050 const Version* version,
2030 const base::FilePath& path, 2051 const base::FilePath& path,
2031 Manifest::Location location, 2052 Manifest::Location location,
2032 int creation_flags, 2053 int creation_flags,
2033 bool mark_acknowledged) { 2054 bool mark_acknowledged) {
2034 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2055 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2056 #if defined(ENABLE_EXTENSIONS)
2035 CHECK(Extension::IdIsValid(id)); 2057 CHECK(Extension::IdIsValid(id));
2036 if (extension_prefs_->IsExternalExtensionUninstalled(id)) 2058 if (extension_prefs_->IsExternalExtensionUninstalled(id))
2037 return false; 2059 return false;
2038 2060
2039 // Before even bothering to unpack, check and see if we already have this 2061 // Before even bothering to unpack, check and see if we already have this
2040 // version. This is important because these extensions are going to get 2062 // version. This is important because these extensions are going to get
2041 // installed on every startup. 2063 // installed on every startup.
2042 const Extension* existing = GetExtensionById(id, true); 2064 const Extension* existing = GetExtensionById(id, true);
2043 2065
2044 if (existing) { 2066 if (existing) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 installer->InstallCrx(path); 2110 installer->InstallCrx(path);
2089 #endif 2111 #endif
2090 2112
2091 // Depending on the source, a new external extension might not need a user 2113 // Depending on the source, a new external extension might not need a user
2092 // notification on installation. For such extensions, mark them acknowledged 2114 // notification on installation. For such extensions, mark them acknowledged
2093 // now to suppress the notification. 2115 // now to suppress the notification.
2094 if (mark_acknowledged) 2116 if (mark_acknowledged)
2095 AcknowledgeExternalExtension(id); 2117 AcknowledgeExternalExtension(id);
2096 2118
2097 return true; 2119 return true;
2120 #else
2121 return false;
2122 #endif // defined(ENABLE_EXTENSIONS)
2098 } 2123 }
2099 2124
2100 void ExtensionService::DidCreateRenderViewForBackgroundPage( 2125 void ExtensionService::DidCreateRenderViewForBackgroundPage(
2101 extensions::ExtensionHost* host) { 2126 extensions::ExtensionHost* host) {
2102 OrphanedDevTools::iterator iter = 2127 OrphanedDevTools::iterator iter =
2103 orphaned_dev_tools_.find(host->extension_id()); 2128 orphaned_dev_tools_.find(host->extension_id());
2104 if (iter == orphaned_dev_tools_.end()) 2129 if (iter == orphaned_dev_tools_.end())
2105 return; 2130 return;
2106 2131
2107 iter->second->ConnectRenderViewHost(host->render_view_host()); 2132 iter->second->ConnectRenderViewHost(host->render_view_host());
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
2456 } 2481 }
2457 2482
2458 void ExtensionService::OnProfileDestructionStarted() { 2483 void ExtensionService::OnProfileDestructionStarted() {
2459 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); 2484 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs();
2460 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); 2485 for (ExtensionIdSet::iterator it = ids_to_unload.begin();
2461 it != ids_to_unload.end(); 2486 it != ids_to_unload.end();
2462 ++it) { 2487 ++it) {
2463 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); 2488 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN);
2464 } 2489 }
2465 } 2490 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_service_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698