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

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: Even later master 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_input_ime_api.h" 50 #include "chrome/browser/extensions/extension_input_ime_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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 const char* ExtensionService::kSyncAppSettingsDirectoryName = 192 const char* ExtensionService::kSyncAppSettingsDirectoryName =
193 "Sync App Settings"; 193 "Sync App Settings";
194 const char* ExtensionService::kSyncExtensionSettingsDirectoryName = 194 const char* ExtensionService::kSyncExtensionSettingsDirectoryName =
195 "Sync Extension Settings"; 195 "Sync Extension Settings";
196 const char* ExtensionService::kStateStoreName = "Extension State"; 196 const char* ExtensionService::kStateStoreName = "Extension State";
197 197
198 void ExtensionService::CheckExternalUninstall(const std::string& id) { 198 void ExtensionService::CheckExternalUninstall(const std::string& id) {
199 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 199 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
200 200
201 // Check if the providers know about this extension. 201 // Check if the providers know about this extension.
202 ProviderCollection::const_iterator i; 202 extensions::ProviderCollection::const_iterator i;
203 for (i = external_extension_providers_.begin(); 203 for (i = external_extension_providers_.begin();
204 i != external_extension_providers_.end(); ++i) { 204 i != external_extension_providers_.end(); ++i) {
205 DCHECK(i->get()->IsReady()); 205 DCHECK(i->get()->IsReady());
206 if (i->get()->HasExtension(id)) 206 if (i->get()->HasExtension(id))
207 return; // Yup, known extension, don't uninstall. 207 return; // Yup, known extension, don't uninstall.
208 } 208 }
209 209
210 // We get the list of external extensions to check from preferences. 210 // We get the list of external extensions to check from preferences.
211 // It is possible that an extension has preferences but is not loaded. 211 // It is possible that an extension has preferences but is not loaded.
212 // For example, an extension that requires experimental permissions 212 // For example, an extension that requires experimental permissions
213 // will not be loaded if the experimental command line flag is not used. 213 // will not be loaded if the experimental command line flag is not used.
214 // In this case, do not uninstall. 214 // In this case, do not uninstall.
215 const Extension* extension = GetInstalledExtension(id); 215 const Extension* extension = GetInstalledExtension(id);
216 if (!extension) { 216 if (!extension) {
217 // We can't call UninstallExtension with an unloaded/invalid 217 // We can't call UninstallExtension with an unloaded/invalid
218 // extension ID. 218 // extension ID.
219 LOG(WARNING) << "Attempted uninstallation of unloaded/invalid extension " 219 LOG(WARNING) << "Attempted uninstallation of unloaded/invalid extension "
220 << "with id: " << id; 220 << "with id: " << id;
221 return; 221 return;
222 } 222 }
223 UninstallExtension(id, true, NULL); 223 UninstallExtension(id, true, NULL);
224 } 224 }
225 225
226 void ExtensionService::ClearProvidersForTesting() { 226 void ExtensionService::ClearProvidersForTesting() {
227 external_extension_providers_.clear(); 227 external_extension_providers_.clear();
228 } 228 }
229 229
230 void ExtensionService::AddProviderForTesting( 230 void ExtensionService::AddProviderForTesting(
231 ExternalExtensionProviderInterface* test_provider) { 231 extensions::ExternalProviderInterface* test_provider) {
232 CHECK(test_provider); 232 CHECK(test_provider);
233 external_extension_providers_.push_back( 233 external_extension_providers_.push_back(
234 linked_ptr<ExternalExtensionProviderInterface>(test_provider)); 234 linked_ptr<extensions::ExternalProviderInterface>(test_provider));
235 } 235 }
236 236
237 bool ExtensionService::OnExternalExtensionUpdateUrlFound( 237 bool ExtensionService::OnExternalExtensionUpdateUrlFound(
238 const std::string& id, 238 const std::string& id,
239 const GURL& update_url, 239 const GURL& update_url,
240 Extension::Location location) { 240 Extension::Location location) {
241 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 241 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
242 CHECK(Extension::IdIsValid(id)); 242 CHECK(Extension::IdIsValid(id));
243 243
244 const Extension* extension = GetExtensionById(id, true); 244 const Extension* extension = GetExtensionById(id, true);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 component_loader_.reset( 383 component_loader_.reset(
384 new extensions::ComponentLoader(this, 384 new extensions::ComponentLoader(this,
385 profile->GetPrefs(), 385 profile->GetPrefs(),
386 g_browser_process->local_state())); 386 g_browser_process->local_state()));
387 387
388 app_notification_manager_->Init(); 388 app_notification_manager_->Init();
389 389
390 if (extensions_enabled_) { 390 if (extensions_enabled_) {
391 if (!command_line->HasSwitch(switches::kImport) && 391 if (!command_line->HasSwitch(switches::kImport) &&
392 !command_line->HasSwitch(switches::kImportFromFile)) { 392 !command_line->HasSwitch(switches::kImportFromFile)) {
393 ExternalExtensionProviderImpl::CreateExternalProviders( 393 extensions::ExternalProviderImpl::CreateExternalProviders(
394 this, profile_, &external_extension_providers_); 394 this, profile_, &external_extension_providers_);
395 } 395 }
396 } 396 }
397 397
398 // Use monochrome icons for Omnibox icons. 398 // Use monochrome icons for Omnibox icons.
399 omnibox_popup_icon_manager_.set_monochrome(true); 399 omnibox_popup_icon_manager_.set_monochrome(true);
400 omnibox_icon_manager_.set_monochrome(true); 400 omnibox_icon_manager_.set_monochrome(true);
401 omnibox_icon_manager_.set_padding(gfx::Insets(0, kOmniboxIconPaddingLeft, 401 omnibox_icon_manager_.set_padding(gfx::Insets(0, kOmniboxIconPaddingLeft,
402 0, kOmniboxIconPaddingRight)); 402 0, kOmniboxIconPaddingRight));
403 403
(...skipping 27 matching lines...) Expand all
431 } 431 }
432 432
433 PendingExtensionManager* ExtensionService::pending_extension_manager() { 433 PendingExtensionManager* ExtensionService::pending_extension_manager() {
434 return &pending_extension_manager_; 434 return &pending_extension_manager_;
435 } 435 }
436 436
437 ExtensionService::~ExtensionService() { 437 ExtensionService::~ExtensionService() {
438 // No need to unload extensions here because they are profile-scoped, and the 438 // No need to unload extensions here because they are profile-scoped, and the
439 // profile is in the process of being deleted. 439 // profile is in the process of being deleted.
440 440
441 ProviderCollection::const_iterator i; 441 extensions::ProviderCollection::const_iterator i;
442 for (i = external_extension_providers_.begin(); 442 for (i = external_extension_providers_.begin();
443 i != external_extension_providers_.end(); ++i) { 443 i != external_extension_providers_.end(); ++i) {
444 ExternalExtensionProviderInterface* provider = i->get(); 444 extensions::ExternalProviderInterface* provider = i->get();
445 provider->ServiceShutdown(); 445 provider->ServiceShutdown();
446 } 446 }
447 } 447 }
448 448
449 void ExtensionService::InitEventRoutersAfterImport() { 449 void ExtensionService::InitEventRoutersAfterImport() {
450 RegisterForImportFinished(); 450 RegisterForImportFinished();
451 } 451 }
452 452
453 void ExtensionService::RegisterForImportFinished() { 453 void ExtensionService::RegisterForImportFinished() {
454 if (!registrar_.IsRegistered(this, chrome::NOTIFICATION_IMPORT_FINISHED, 454 if (!registrar_.IsRegistered(this, chrome::NOTIFICATION_IMPORT_FINISHED,
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1633 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1633 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1634 1634
1635 // Note that this installation is intentionally silent (since it didn't 1635 // Note that this installation is intentionally silent (since it didn't
1636 // go through the front-end). Extensions that are registered in this 1636 // go through the front-end). Extensions that are registered in this
1637 // way are effectively considered 'pre-bundled', and so implicitly 1637 // way are effectively considered 'pre-bundled', and so implicitly
1638 // trusted. In general, if something has HKLM or filesystem access, 1638 // trusted. In general, if something has HKLM or filesystem access,
1639 // they could install an extension manually themselves anyway. 1639 // they could install an extension manually themselves anyway.
1640 1640
1641 // Ask each external extension provider to give us a call back for each 1641 // Ask each external extension provider to give us a call back for each
1642 // extension they know about. See OnExternalExtension(File|UpdateUrl)Found. 1642 // extension they know about. See OnExternalExtension(File|UpdateUrl)Found.
1643 ProviderCollection::const_iterator i; 1643 extensions::ProviderCollection::const_iterator i;
1644 for (i = external_extension_providers_.begin(); 1644 for (i = external_extension_providers_.begin();
1645 i != external_extension_providers_.end(); ++i) { 1645 i != external_extension_providers_.end(); ++i) {
1646 ExternalExtensionProviderInterface* provider = i->get(); 1646 extensions::ExternalProviderInterface* provider = i->get();
1647 provider->VisitRegisteredExtension(); 1647 provider->VisitRegisteredExtension();
1648 } 1648 }
1649 1649
1650 // Do any required work that we would have done after completion of all 1650 // Do any required work that we would have done after completion of all
1651 // providers. 1651 // providers.
1652 if (external_extension_providers_.empty()) { 1652 if (external_extension_providers_.empty()) {
1653 OnAllExternalProvidersReady(); 1653 OnAllExternalProvidersReady();
1654 } 1654 }
1655 } 1655 }
1656 1656
1657 void ExtensionService::OnExternalProviderReady( 1657 void ExtensionService::OnExternalProviderReady(
1658 const ExternalExtensionProviderInterface* provider) { 1658 const extensions::ExternalProviderInterface* provider) {
1659 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1659 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1660 CHECK(provider->IsReady()); 1660 CHECK(provider->IsReady());
1661 1661
1662 // An external provider has finished loading. We only take action 1662 // An external provider has finished loading. We only take action
1663 // if all of them are finished. So we check them first. 1663 // if all of them are finished. So we check them first.
1664 if (AreAllExternalProvidersReady()) 1664 if (AreAllExternalProvidersReady())
1665 OnAllExternalProvidersReady(); 1665 OnAllExternalProvidersReady();
1666 } 1666 }
1667 1667
1668 bool ExtensionService::AreAllExternalProvidersReady() const { 1668 bool ExtensionService::AreAllExternalProvidersReady() const {
1669 ProviderCollection::const_iterator i; 1669 extensions::ProviderCollection::const_iterator i;
1670 for (i = external_extension_providers_.begin(); 1670 for (i = external_extension_providers_.begin();
1671 i != external_extension_providers_.end(); ++i) { 1671 i != external_extension_providers_.end(); ++i) {
1672 if (!i->get()->IsReady()) 1672 if (!i->get()->IsReady())
1673 return false; 1673 return false;
1674 } 1674 }
1675 return true; 1675 return true;
1676 } 1676 }
1677 1677
1678 void ExtensionService::OnAllExternalProvidersReady() { 1678 void ExtensionService::OnAllExternalProvidersReady() {
1679 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1679 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 2563
2564 // To coexist with certain unit tests that don't have a work-thread message 2564 // To coexist with certain unit tests that don't have a work-thread message
2565 // loop available at ExtensionService shutdown, we lazy-initialize this 2565 // loop available at ExtensionService shutdown, we lazy-initialize this
2566 // object so that those cases neither create nor destroy an 2566 // object so that those cases neither create nor destroy an
2567 // APIResourceController. 2567 // APIResourceController.
2568 if (!api_resource_controller_.get()) { 2568 if (!api_resource_controller_.get()) {
2569 api_resource_controller_.reset(new extensions::APIResourceController()); 2569 api_resource_controller_.reset(new extensions::APIResourceController());
2570 } 2570 }
2571 return api_resource_controller_.get(); 2571 return api_resource_controller_.get();
2572 } 2572 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698