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

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

Issue 10692168: Moved ExternalExtensionLoaders/Providers into extensions namespace (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 #include "chrome/browser/extensions/extension_managed_mode_api.h" 50 #include "chrome/browser/extensions/extension_managed_mode_api.h"
51 #include "chrome/browser/extensions/extension_management_api.h" 51 #include "chrome/browser/extensions/extension_management_api.h"
52 #include "chrome/browser/extensions/extension_preference_api.h" 52 #include "chrome/browser/extensions/extension_preference_api.h"
53 #include "chrome/browser/extensions/extension_process_manager.h" 53 #include "chrome/browser/extensions/extension_process_manager.h"
54 #include "chrome/browser/extensions/extension_processes_api.h" 54 #include "chrome/browser/extensions/extension_processes_api.h"
55 #include "chrome/browser/extensions/extension_sorting.h" 55 #include "chrome/browser/extensions/extension_sorting.h"
56 #include "chrome/browser/extensions/extension_special_storage_policy.h" 56 #include "chrome/browser/extensions/extension_special_storage_policy.h"
57 #include "chrome/browser/extensions/extension_sync_data.h" 57 #include "chrome/browser/extensions/extension_sync_data.h"
58 #include "chrome/browser/extensions/extension_system.h" 58 #include "chrome/browser/extensions/extension_system.h"
59 #include "chrome/browser/extensions/extension_web_ui.h" 59 #include "chrome/browser/extensions/extension_web_ui.h"
60 #include "chrome/browser/extensions/external_extension_provider_impl.h" 60 #include "chrome/browser/extensions/external_provider_impl.h"
61 #include "chrome/browser/extensions/external_extension_provider_interface.h" 61 #include "chrome/browser/extensions/external_provider_interface.h"
62 #include "chrome/browser/extensions/installed_loader.h" 62 #include "chrome/browser/extensions/installed_loader.h"
63 #include "chrome/browser/extensions/pending_extension_manager.h" 63 #include "chrome/browser/extensions/pending_extension_manager.h"
64 #include "chrome/browser/extensions/permissions_updater.h" 64 #include "chrome/browser/extensions/permissions_updater.h"
65 #include "chrome/browser/extensions/settings/settings_frontend.h" 65 #include "chrome/browser/extensions/settings/settings_frontend.h"
66 #include "chrome/browser/extensions/unpacked_installer.h" 66 #include "chrome/browser/extensions/unpacked_installer.h"
67 #include "chrome/browser/extensions/updater/extension_updater.h" 67 #include "chrome/browser/extensions/updater/extension_updater.h"
68 #include "chrome/browser/history/history_extension_api.h" 68 #include "chrome/browser/history/history_extension_api.h"
69 #include "chrome/browser/net/chrome_url_request_context.h" 69 #include "chrome/browser/net/chrome_url_request_context.h"
70 #include "chrome/browser/prefs/pref_service.h" 70 #include "chrome/browser/prefs/pref_service.h"
71 #include "chrome/browser/profiles/profile.h" 71 #include "chrome/browser/profiles/profile.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 const char* ExtensionService::kSyncAppSettingsDirectoryName = 191 const char* ExtensionService::kSyncAppSettingsDirectoryName =
192 "Sync App Settings"; 192 "Sync App Settings";
193 const char* ExtensionService::kSyncExtensionSettingsDirectoryName = 193 const char* ExtensionService::kSyncExtensionSettingsDirectoryName =
194 "Sync Extension Settings"; 194 "Sync Extension Settings";
195 const char* ExtensionService::kStateStoreName = "Extension State"; 195 const char* ExtensionService::kStateStoreName = "Extension State";
196 196
197 void ExtensionService::CheckExternalUninstall(const std::string& id) { 197 void ExtensionService::CheckExternalUninstall(const std::string& id) {
198 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 198 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
199 199
200 // Check if the providers know about this extension. 200 // Check if the providers know about this extension.
201 ProviderCollection::const_iterator i; 201 extensions::ProviderCollection::const_iterator i;
202 for (i = external_extension_providers_.begin(); 202 for (i = external_extension_providers_.begin();
203 i != external_extension_providers_.end(); ++i) { 203 i != external_extension_providers_.end(); ++i) {
204 DCHECK(i->get()->IsReady()); 204 DCHECK(i->get()->IsReady());
205 if (i->get()->HasExtension(id)) 205 if (i->get()->HasExtension(id))
206 return; // Yup, known extension, don't uninstall. 206 return; // Yup, known extension, don't uninstall.
207 } 207 }
208 208
209 // We get the list of external extensions to check from preferences. 209 // We get the list of external extensions to check from preferences.
210 // It is possible that an extension has preferences but is not loaded. 210 // It is possible that an extension has preferences but is not loaded.
211 // For example, an extension that requires experimental permissions 211 // For example, an extension that requires experimental permissions
212 // will not be loaded if the experimental command line flag is not used. 212 // will not be loaded if the experimental command line flag is not used.
213 // In this case, do not uninstall. 213 // In this case, do not uninstall.
214 const Extension* extension = GetInstalledExtension(id); 214 const Extension* extension = GetInstalledExtension(id);
215 if (!extension) { 215 if (!extension) {
216 // We can't call UninstallExtension with an unloaded/invalid 216 // We can't call UninstallExtension with an unloaded/invalid
217 // extension ID. 217 // extension ID.
218 LOG(WARNING) << "Attempted uninstallation of unloaded/invalid extension " 218 LOG(WARNING) << "Attempted uninstallation of unloaded/invalid extension "
219 << "with id: " << id; 219 << "with id: " << id;
220 return; 220 return;
221 } 221 }
222 UninstallExtension(id, true, NULL); 222 UninstallExtension(id, true, NULL);
223 } 223 }
224 224
225 void ExtensionService::ClearProvidersForTesting() { 225 void ExtensionService::ClearProvidersForTesting() {
226 external_extension_providers_.clear(); 226 external_extension_providers_.clear();
227 } 227 }
228 228
229 void ExtensionService::AddProviderForTesting( 229 void ExtensionService::AddProviderForTesting(
230 ExternalExtensionProviderInterface* test_provider) { 230 extensions::ExternalProviderInterface* test_provider) {
231 CHECK(test_provider); 231 CHECK(test_provider);
232 external_extension_providers_.push_back( 232 external_extension_providers_.push_back(
233 linked_ptr<ExternalExtensionProviderInterface>(test_provider)); 233 linked_ptr<extensions::ExternalProviderInterface>(test_provider));
234 } 234 }
235 235
236 bool ExtensionService::OnExternalExtensionUpdateUrlFound( 236 bool ExtensionService::OnExternalExtensionUpdateUrlFound(
237 const std::string& id, 237 const std::string& id,
238 const GURL& update_url, 238 const GURL& update_url,
239 Extension::Location location) { 239 Extension::Location location) {
240 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 240 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
241 CHECK(Extension::IdIsValid(id)); 241 CHECK(Extension::IdIsValid(id));
242 242
243 const Extension* extension = GetExtensionById(id, true); 243 const Extension* extension = GetExtensionById(id, true);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 component_loader_.reset( 382 component_loader_.reset(
383 new extensions::ComponentLoader(this, 383 new extensions::ComponentLoader(this,
384 profile->GetPrefs(), 384 profile->GetPrefs(),
385 g_browser_process->local_state())); 385 g_browser_process->local_state()));
386 386
387 app_notification_manager_->Init(); 387 app_notification_manager_->Init();
388 388
389 if (extensions_enabled_) { 389 if (extensions_enabled_) {
390 if (!command_line->HasSwitch(switches::kImport) && 390 if (!command_line->HasSwitch(switches::kImport) &&
391 !command_line->HasSwitch(switches::kImportFromFile)) { 391 !command_line->HasSwitch(switches::kImportFromFile)) {
392 ExternalExtensionProviderImpl::CreateExternalProviders( 392 extensions::ExternalProviderImpl::CreateExternalProviders(
393 this, profile_, &external_extension_providers_); 393 this, profile_, &external_extension_providers_);
394 } 394 }
395 } 395 }
396 396
397 // Use monochrome icons for Omnibox icons. 397 // Use monochrome icons for Omnibox icons.
398 omnibox_popup_icon_manager_.set_monochrome(true); 398 omnibox_popup_icon_manager_.set_monochrome(true);
399 omnibox_icon_manager_.set_monochrome(true); 399 omnibox_icon_manager_.set_monochrome(true);
400 omnibox_icon_manager_.set_padding(gfx::Insets(0, kOmniboxIconPaddingLeft, 400 omnibox_icon_manager_.set_padding(gfx::Insets(0, kOmniboxIconPaddingLeft,
401 0, kOmniboxIconPaddingRight)); 401 0, kOmniboxIconPaddingRight));
402 402
(...skipping 27 matching lines...) Expand all
430 } 430 }
431 431
432 PendingExtensionManager* ExtensionService::pending_extension_manager() { 432 PendingExtensionManager* ExtensionService::pending_extension_manager() {
433 return &pending_extension_manager_; 433 return &pending_extension_manager_;
434 } 434 }
435 435
436 ExtensionService::~ExtensionService() { 436 ExtensionService::~ExtensionService() {
437 // No need to unload extensions here because they are profile-scoped, and the 437 // No need to unload extensions here because they are profile-scoped, and the
438 // profile is in the process of being deleted. 438 // profile is in the process of being deleted.
439 439
440 ProviderCollection::const_iterator i; 440 extensions::ProviderCollection::const_iterator i;
441 for (i = external_extension_providers_.begin(); 441 for (i = external_extension_providers_.begin();
442 i != external_extension_providers_.end(); ++i) { 442 i != external_extension_providers_.end(); ++i) {
443 ExternalExtensionProviderInterface* provider = i->get(); 443 extensions::ExternalProviderInterface* provider = i->get();
444 provider->ServiceShutdown(); 444 provider->ServiceShutdown();
445 } 445 }
446 } 446 }
447 447
448 void ExtensionService::InitEventRoutersAfterImport() { 448 void ExtensionService::InitEventRoutersAfterImport() {
449 RegisterForImportFinished(); 449 RegisterForImportFinished();
450 } 450 }
451 451
452 void ExtensionService::RegisterForImportFinished() { 452 void ExtensionService::RegisterForImportFinished() {
453 if (!registrar_.IsRegistered(this, chrome::NOTIFICATION_IMPORT_FINISHED, 453 if (!registrar_.IsRegistered(this, chrome::NOTIFICATION_IMPORT_FINISHED,
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1632 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1633 1633
1634 // Note that this installation is intentionally silent (since it didn't 1634 // Note that this installation is intentionally silent (since it didn't
1635 // go through the front-end). Extensions that are registered in this 1635 // go through the front-end). Extensions that are registered in this
1636 // way are effectively considered 'pre-bundled', and so implicitly 1636 // way are effectively considered 'pre-bundled', and so implicitly
1637 // trusted. In general, if something has HKLM or filesystem access, 1637 // trusted. In general, if something has HKLM or filesystem access,
1638 // they could install an extension manually themselves anyway. 1638 // they could install an extension manually themselves anyway.
1639 1639
1640 // Ask each external extension provider to give us a call back for each 1640 // Ask each external extension provider to give us a call back for each
1641 // extension they know about. See OnExternalExtension(File|UpdateUrl)Found. 1641 // extension they know about. See OnExternalExtension(File|UpdateUrl)Found.
1642 ProviderCollection::const_iterator i; 1642 extensions::ProviderCollection::const_iterator i;
1643 for (i = external_extension_providers_.begin(); 1643 for (i = external_extension_providers_.begin();
1644 i != external_extension_providers_.end(); ++i) { 1644 i != external_extension_providers_.end(); ++i) {
1645 ExternalExtensionProviderInterface* provider = i->get(); 1645 extensions::ExternalProviderInterface* provider = i->get();
1646 provider->VisitRegisteredExtension(); 1646 provider->VisitRegisteredExtension();
1647 } 1647 }
1648 1648
1649 // Do any required work that we would have done after completion of all 1649 // Do any required work that we would have done after completion of all
1650 // providers. 1650 // providers.
1651 if (external_extension_providers_.empty()) { 1651 if (external_extension_providers_.empty()) {
1652 OnAllExternalProvidersReady(); 1652 OnAllExternalProvidersReady();
1653 } 1653 }
1654 } 1654 }
1655 1655
1656 void ExtensionService::OnExternalProviderReady( 1656 void ExtensionService::OnExternalProviderReady(
1657 const ExternalExtensionProviderInterface* provider) { 1657 const extensions::ExternalProviderInterface* provider) {
1658 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1658 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1659 CHECK(provider->IsReady()); 1659 CHECK(provider->IsReady());
1660 1660
1661 // An external provider has finished loading. We only take action 1661 // An external provider has finished loading. We only take action
1662 // if all of them are finished. So we check them first. 1662 // if all of them are finished. So we check them first.
1663 if (AreAllExternalProvidersReady()) 1663 if (AreAllExternalProvidersReady())
1664 OnAllExternalProvidersReady(); 1664 OnAllExternalProvidersReady();
1665 } 1665 }
1666 1666
1667 bool ExtensionService::AreAllExternalProvidersReady() const { 1667 bool ExtensionService::AreAllExternalProvidersReady() const {
1668 ProviderCollection::const_iterator i; 1668 extensions::ProviderCollection::const_iterator i;
1669 for (i = external_extension_providers_.begin(); 1669 for (i = external_extension_providers_.begin();
1670 i != external_extension_providers_.end(); ++i) { 1670 i != external_extension_providers_.end(); ++i) {
1671 if (!i->get()->IsReady()) 1671 if (!i->get()->IsReady())
1672 return false; 1672 return false;
1673 } 1673 }
1674 return true; 1674 return true;
1675 } 1675 }
1676 1676
1677 void ExtensionService::OnAllExternalProvidersReady() { 1677 void ExtensionService::OnAllExternalProvidersReady() {
1678 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1678 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after
2562 2562
2563 // To coexist with certain unit tests that don't have a work-thread message 2563 // To coexist with certain unit tests that don't have a work-thread message
2564 // loop available at ExtensionService shutdown, we lazy-initialize this 2564 // loop available at ExtensionService shutdown, we lazy-initialize this
2565 // object so that those cases neither create nor destroy an 2565 // object so that those cases neither create nor destroy an
2566 // APIResourceController. 2566 // APIResourceController.
2567 if (!api_resource_controller_.get()) { 2567 if (!api_resource_controller_.get()) {
2568 api_resource_controller_.reset(new extensions::APIResourceController()); 2568 api_resource_controller_.reset(new extensions::APIResourceController());
2569 } 2569 }
2570 return api_resource_controller_.get(); 2570 return api_resource_controller_.get();
2571 } 2571 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698