OLD | NEW |
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 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 using extensions::SharedModuleService; | 105 using extensions::SharedModuleService; |
106 using extensions::UnloadedExtensionInfo; | 106 using extensions::UnloadedExtensionInfo; |
107 | 107 |
108 namespace errors = extensions::manifest_errors; | 108 namespace errors = extensions::manifest_errors; |
109 | 109 |
110 namespace { | 110 namespace { |
111 | 111 |
112 // Wait this many seconds after an extensions becomes idle before updating it. | 112 // Wait this many seconds after an extensions becomes idle before updating it. |
113 const int kUpdateIdleDelay = 5; | 113 const int kUpdateIdleDelay = 5; |
114 | 114 |
115 bool IsCWSSharedModule(const Extension* extension) { | |
116 return extension->from_webstore() && | |
117 SharedModuleInfo::IsSharedModule(extension); | |
118 } | |
119 | |
120 class SharedModuleProvider : public extensions::ManagementPolicy::Provider { | |
121 public: | |
122 SharedModuleProvider() {} | |
123 virtual ~SharedModuleProvider() {} | |
124 | |
125 virtual std::string GetDebugPolicyProviderName() const OVERRIDE { | |
126 return "SharedModuleProvider"; | |
127 } | |
128 | |
129 virtual bool UserMayModifySettings(const Extension* extension, | |
130 base::string16* error) const OVERRIDE { | |
131 return !IsCWSSharedModule(extension); | |
132 } | |
133 | |
134 virtual bool MustRemainEnabled(const Extension* extension, | |
135 base::string16* error) const OVERRIDE { | |
136 return IsCWSSharedModule(extension); | |
137 } | |
138 | |
139 private: | |
140 DISALLOW_COPY_AND_ASSIGN(SharedModuleProvider); | |
141 }; | |
142 | |
143 } // namespace | 115 } // namespace |
144 | 116 |
145 // ExtensionService. | 117 // ExtensionService. |
146 | 118 |
147 void ExtensionService::CheckExternalUninstall(const std::string& id) { | 119 void ExtensionService::CheckExternalUninstall(const std::string& id) { |
148 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 120 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
149 | 121 |
150 // Check if the providers know about this extension. | 122 // Check if the providers know about this extension. |
151 extensions::ProviderCollection::const_iterator i; | 123 extensions::ProviderCollection::const_iterator i; |
152 for (i = external_extension_providers_.begin(); | 124 for (i = external_extension_providers_.begin(); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 error_controller_.reset( | 320 error_controller_.reset( |
349 new extensions::ExtensionErrorController(profile_, is_first_run_)); | 321 new extensions::ExtensionErrorController(profile_, is_first_run_)); |
350 external_install_manager_.reset( | 322 external_install_manager_.reset( |
351 new extensions::ExternalInstallManager(profile_, is_first_run_)); | 323 new extensions::ExternalInstallManager(profile_, is_first_run_)); |
352 | 324 |
353 #if defined(ENABLE_EXTENSIONS) | 325 #if defined(ENABLE_EXTENSIONS) |
354 extension_action_storage_manager_.reset( | 326 extension_action_storage_manager_.reset( |
355 new extensions::ExtensionActionStorageManager(profile_)); | 327 new extensions::ExtensionActionStorageManager(profile_)); |
356 #endif | 328 #endif |
357 | 329 |
358 shared_module_policy_provider_.reset(new SharedModuleProvider); | |
359 | |
360 // How long is the path to the Extensions directory? | 330 // How long is the path to the Extensions directory? |
361 UMA_HISTOGRAM_CUSTOM_COUNTS("Extensions.ExtensionRootPathLength", | 331 UMA_HISTOGRAM_CUSTOM_COUNTS("Extensions.ExtensionRootPathLength", |
362 install_directory_.value().length(), 0, 500, 100); | 332 install_directory_.value().length(), 0, 500, 100); |
363 } | 333 } |
364 | 334 |
365 const ExtensionSet* ExtensionService::extensions() const { | 335 const ExtensionSet* ExtensionService::extensions() const { |
366 return ®istry_->enabled_extensions(); | 336 return ®istry_->enabled_extensions(); |
367 } | 337 } |
368 | 338 |
369 extensions::PendingExtensionManager* | 339 extensions::PendingExtensionManager* |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 extension_prefs_->GetAllDelayedInstallInfo()); | 435 extension_prefs_->GetAllDelayedInstallInfo()); |
466 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateOnLoad", | 436 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateOnLoad", |
467 delayed_info2->size() - delayed_info->size()); | 437 delayed_info2->size() - delayed_info->size()); |
468 | 438 |
469 SetReadyAndNotifyListeners(); | 439 SetReadyAndNotifyListeners(); |
470 | 440 |
471 // TODO(erikkay) this should probably be deferred to a future point | 441 // TODO(erikkay) this should probably be deferred to a future point |
472 // rather than running immediately at startup. | 442 // rather than running immediately at startup. |
473 CheckForExternalUpdates(); | 443 CheckForExternalUpdates(); |
474 | 444 |
475 system_->management_policy()->RegisterProvider( | |
476 shared_module_policy_provider_.get()); | |
477 | |
478 LoadGreylistFromPrefs(); | 445 LoadGreylistFromPrefs(); |
479 } | 446 } |
480 | 447 |
481 UMA_HISTOGRAM_TIMES("Extensions.ExtensionServiceInitTime", | 448 UMA_HISTOGRAM_TIMES("Extensions.ExtensionServiceInitTime", |
482 base::Time::Now() - begin_time); | 449 base::Time::Now() - begin_time); |
483 } | 450 } |
484 | 451 |
485 void ExtensionService::LoadGreylistFromPrefs() { | 452 void ExtensionService::LoadGreylistFromPrefs() { |
486 scoped_ptr<ExtensionSet> all_extensions = | 453 scoped_ptr<ExtensionSet> all_extensions = |
487 registry_->GenerateInstalledExtensionsSet(); | 454 registry_->GenerateInstalledExtensionsSet(); |
(...skipping 1858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2346 } | 2313 } |
2347 | 2314 |
2348 void ExtensionService::OnProfileDestructionStarted() { | 2315 void ExtensionService::OnProfileDestructionStarted() { |
2349 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); | 2316 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); |
2350 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); | 2317 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); |
2351 it != ids_to_unload.end(); | 2318 it != ids_to_unload.end(); |
2352 ++it) { | 2319 ++it) { |
2353 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); | 2320 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); |
2354 } | 2321 } |
2355 } | 2322 } |
OLD | NEW |