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

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

Issue 125573002: Move ExtensionService::GetExtensionById() to ExtensionRegistry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, add test, get_extension_by_id Created 6 years, 11 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
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 #include "webkit/browser/fileapi/file_system_context.h" 108 #include "webkit/browser/fileapi/file_system_context.h"
109 #endif 109 #endif
110 110
111 using content::BrowserContext; 111 using content::BrowserContext;
112 using content::BrowserThread; 112 using content::BrowserThread;
113 using content::DevToolsAgentHost; 113 using content::DevToolsAgentHost;
114 using extensions::CrxInstaller; 114 using extensions::CrxInstaller;
115 using extensions::Extension; 115 using extensions::Extension;
116 using extensions::ExtensionIdSet; 116 using extensions::ExtensionIdSet;
117 using extensions::ExtensionInfo; 117 using extensions::ExtensionInfo;
118 using extensions::ExtensionRegistry;
118 using extensions::ExtensionSet; 119 using extensions::ExtensionSet;
119 using extensions::FeatureSwitch; 120 using extensions::FeatureSwitch;
120 using extensions::InstallVerifier; 121 using extensions::InstallVerifier;
121 using extensions::ManagementPolicy; 122 using extensions::ManagementPolicy;
122 using extensions::Manifest; 123 using extensions::Manifest;
123 using extensions::PermissionMessage; 124 using extensions::PermissionMessage;
124 using extensions::PermissionMessages; 125 using extensions::PermissionMessages;
125 using extensions::PermissionSet; 126 using extensions::PermissionSet;
126 using extensions::SharedModuleInfo; 127 using extensions::SharedModuleInfo;
127 using extensions::UnloadedExtensionInfo; 128 using extensions::UnloadedExtensionInfo;
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 } 450 }
450 } 451 }
451 452
452 void ExtensionService::Shutdown() { 453 void ExtensionService::Shutdown() {
453 system_->management_policy()->UnregisterProvider( 454 system_->management_policy()->UnregisterProvider(
454 shared_module_policy_provider_.get()); 455 shared_module_policy_provider_.get());
455 } 456 }
456 457
457 const Extension* ExtensionService::GetExtensionById( 458 const Extension* ExtensionService::GetExtensionById(
458 const std::string& id, bool include_disabled) const { 459 const std::string& id, bool include_disabled) const {
459 int include_mask = INCLUDE_ENABLED; 460 int include_mask = ExtensionRegistry::ENABLED;
460 if (include_disabled) { 461 if (include_disabled) {
461 // Include blacklisted extensions here because there are hundreds of 462 // Include blacklisted extensions here because there are hundreds of
462 // callers of this function, and many might assume that this includes those 463 // callers of this function, and many might assume that this includes those
463 // that have been disabled due to blacklisting. 464 // that have been disabled due to blacklisting.
464 include_mask |= INCLUDE_DISABLED | INCLUDE_BLACKLISTED; 465 include_mask |= ExtensionRegistry::DISABLED |
466 ExtensionRegistry::BLACKLISTED;
465 } 467 }
466 return GetExtensionById(id, include_mask); 468 return registry_->GetExtensionById(id, include_mask);
467 } 469 }
468 470
469 GURL ExtensionService::GetSiteForExtensionId(const std::string& extension_id) { 471 GURL ExtensionService::GetSiteForExtensionId(const std::string& extension_id) {
470 return content::SiteInstance::GetSiteForURL( 472 return content::SiteInstance::GetSiteForURL(
471 profile_, 473 profile_,
472 Extension::GetBaseURLFromExtensionId(extension_id)); 474 Extension::GetBaseURLFromExtensionId(extension_id));
473 } 475 }
474 476
475 const Extension* ExtensionService::GetExtensionById(
476 const std::string& id, int include_mask) const {
477 std::string lowercase_id = StringToLowerASCII(id);
478 if (include_mask & INCLUDE_ENABLED) {
479 const Extension* extension =
480 registry_->enabled_extensions().GetByID(lowercase_id);
481 if (extension)
482 return extension;
483 }
484 if (include_mask & INCLUDE_DISABLED) {
485 const Extension* extension =
486 registry_->disabled_extensions().GetByID(lowercase_id);
487 if (extension)
488 return extension;
489 }
490 if (include_mask & INCLUDE_TERMINATED) {
491 const Extension* extension =
492 registry_->terminated_extensions().GetByID(lowercase_id);
493 if (extension)
494 return extension;
495 }
496 if (include_mask & INCLUDE_BLACKLISTED) {
497 const Extension* extension =
498 registry_->blacklisted_extensions().GetByID(lowercase_id);
499 if (extension)
500 return extension;
501 }
502 return NULL;
503 }
504
505 void ExtensionService::Init() { 477 void ExtensionService::Init() {
506 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 478 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
507 479
508 base::Time begin_time = base::Time::Now(); 480 base::Time begin_time = base::Time::Now();
509 481
510 DCHECK(!is_ready()); // Can't redo init. 482 DCHECK(!is_ready()); // Can't redo init.
511 DCHECK_EQ(registry_->enabled_extensions().size(), 0u); 483 DCHECK_EQ(registry_->enabled_extensions().size(), 0u);
512 484
513 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); 485 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
514 if (cmd_line->HasSwitch(switches::kInstallFromWebstore) || 486 if (cmd_line->HasSwitch(switches::kInstallFromWebstore) ||
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 // installed yet. 982 // installed yet.
1011 if (extension && 983 if (extension &&
1012 disable_reason != Extension::DISABLE_RELOAD && 984 disable_reason != Extension::DISABLE_RELOAD &&
1013 !system_->management_policy()->UserMayModifySettings(extension, NULL)) { 985 !system_->management_policy()->UserMayModifySettings(extension, NULL)) {
1014 return; 986 return;
1015 } 987 }
1016 988
1017 extension_prefs_->SetExtensionState(extension_id, Extension::DISABLED); 989 extension_prefs_->SetExtensionState(extension_id, Extension::DISABLED);
1018 extension_prefs_->AddDisableReason(extension_id, disable_reason); 990 extension_prefs_->AddDisableReason(extension_id, disable_reason);
1019 991
1020 int include_mask = INCLUDE_EVERYTHING & ~INCLUDE_DISABLED; 992 int include_mask =
1021 extension = GetExtensionById(extension_id, include_mask); 993 ExtensionRegistry::EVERYTHING & ~ExtensionRegistry::DISABLED;
994 extension = registry_->GetExtensionById(extension_id, include_mask);
1022 if (!extension) 995 if (!extension)
1023 return; 996 return;
1024 997
1025 // Reset the background_page_ready flag 998 // Reset the background_page_ready flag
1026 if (extensions::BackgroundInfo::HasBackgroundPage(extension)) 999 if (extensions::BackgroundInfo::HasBackgroundPage(extension))
1027 extension_runtime_data_[extension->id()].background_page_ready = false; 1000 extension_runtime_data_[extension->id()].background_page_ready = false;
1028 1001
1029 // Move it over to the disabled list. Don't send a second unload notification 1002 // Move it over to the disabled list. Don't send a second unload notification
1030 // for terminated extensions being disabled. 1003 // for terminated extensions being disabled.
1031 registry_->AddDisabled(make_scoped_refptr(extension)); 1004 registry_->AddDisabled(make_scoped_refptr(extension));
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1222 } 1195 }
1223 #endif 1196 #endif
1224 1197
1225 UpdateActiveExtensionsInCrashReporter(); 1198 UpdateActiveExtensionsInCrashReporter();
1226 } 1199 }
1227 1200
1228 Profile* ExtensionService::profile() { 1201 Profile* ExtensionService::profile() {
1229 return profile_; 1202 return profile_;
1230 } 1203 }
1231 1204
1205 content::BrowserContext* ExtensionService::GetBrowserContext() const {
1206 // Implemented in the .cc file to avoid adding a profile.h dependency to
1207 // extension_service.h.
1208 return profile_;
1209 }
1210
1232 extensions::ExtensionPrefs* ExtensionService::extension_prefs() { 1211 extensions::ExtensionPrefs* ExtensionService::extension_prefs() {
1233 return extension_prefs_; 1212 return extension_prefs_;
1234 } 1213 }
1235 1214
1236 const extensions::ExtensionPrefs* ExtensionService::extension_prefs() const { 1215 const extensions::ExtensionPrefs* ExtensionService::extension_prefs() const {
1237 return extension_prefs_; 1216 return extension_prefs_;
1238 } 1217 }
1239 1218
1240 extensions::SettingsFrontend* ExtensionService::settings_frontend() { 1219 extensions::SettingsFrontend* ExtensionService::settings_frontend() {
1241 return settings_frontend_.get(); 1220 return settings_frontend_.get();
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 } 1578 }
1600 } else { 1579 } else {
1601 extensions::RemoveExternalInstallError(this); 1580 extensions::RemoveExternalInstallError(this);
1602 } 1581 }
1603 } 1582 }
1604 1583
1605 void ExtensionService::UnloadExtension( 1584 void ExtensionService::UnloadExtension(
1606 const std::string& extension_id, 1585 const std::string& extension_id,
1607 UnloadedExtensionInfo::Reason reason) { 1586 UnloadedExtensionInfo::Reason reason) {
1608 // Make sure the extension gets deleted after we return from this function. 1587 // Make sure the extension gets deleted after we return from this function.
1609 int include_mask = INCLUDE_EVERYTHING & ~INCLUDE_TERMINATED; 1588 int include_mask =
1589 ExtensionRegistry::EVERYTHING & ~ExtensionRegistry::TERMINATED;
1610 scoped_refptr<const Extension> extension( 1590 scoped_refptr<const Extension> extension(
1611 GetExtensionById(extension_id, include_mask)); 1591 registry_->GetExtensionById(extension_id, include_mask));
1612 1592
1613 // This method can be called via PostTask, so the extension may have been 1593 // This method can be called via PostTask, so the extension may have been
1614 // unloaded by the time this runs. 1594 // unloaded by the time this runs.
1615 if (!extension.get()) { 1595 if (!extension.get()) {
1616 // In case the extension may have crashed/uninstalled. Allow the profile to 1596 // In case the extension may have crashed/uninstalled. Allow the profile to
1617 // clean up its RequestContexts. 1597 // clean up its RequestContexts.
1618 system_->UnregisterExtensionWithRequestContexts(extension_id, reason); 1598 system_->UnregisterExtensionWithRequestContexts(extension_id, reason);
1619 return; 1599 return;
1620 } 1600 }
1621 1601
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
2356 if (extension) { 2336 if (extension) {
2357 content::NotificationService::current()->Notify( 2337 content::NotificationService::current()->Notify(
2358 chrome::NOTIFICATION_EXTENSION_REMOVED, 2338 chrome::NOTIFICATION_EXTENSION_REMOVED,
2359 content::Source<Profile>(profile_), 2339 content::Source<Profile>(profile_),
2360 content::Details<const Extension>(extension)); 2340 content::Details<const Extension>(extension));
2361 } 2341 }
2362 } 2342 }
2363 2343
2364 const Extension* ExtensionService::GetTerminatedExtension( 2344 const Extension* ExtensionService::GetTerminatedExtension(
2365 const std::string& id) const { 2345 const std::string& id) const {
2366 return GetExtensionById(id, INCLUDE_TERMINATED); 2346 return registry_->GetExtensionById(id, ExtensionRegistry::TERMINATED);
2367 } 2347 }
2368 2348
2369 const Extension* ExtensionService::GetInstalledExtension( 2349 const Extension* ExtensionService::GetInstalledExtension(
2370 const std::string& id) const { 2350 const std::string& id) const {
2371 int include_mask = INCLUDE_ENABLED | 2351 return registry_->GetExtensionById(id, ExtensionRegistry::EVERYTHING);
2372 INCLUDE_DISABLED |
2373 INCLUDE_TERMINATED |
2374 INCLUDE_BLACKLISTED;
2375 return GetExtensionById(id, include_mask);
2376 } 2352 }
2377 2353
2378 bool ExtensionService::ExtensionBindingsAllowed(const GURL& url) { 2354 bool ExtensionService::ExtensionBindingsAllowed(const GURL& url) {
2379 // Allow bindings for all packaged extensions and component hosted apps. 2355 // Allow bindings for all packaged extensions and component hosted apps.
2380 const Extension* extension = 2356 const Extension* extension =
2381 registry_->enabled_extensions().GetExtensionOrAppByURL(url); 2357 registry_->enabled_extensions().GetExtensionOrAppByURL(url);
2382 return extension && (!extension->is_hosted_app() || 2358 return extension && (!extension->is_hosted_app() ||
2383 extension->location() == Manifest::COMPONENT); 2359 extension->location() == Manifest::COMPONENT);
2384 } 2360 }
2385 2361
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
2862 void ExtensionService::UnloadAllExtensionsInternal() { 2838 void ExtensionService::UnloadAllExtensionsInternal() {
2863 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); 2839 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions();
2864 2840
2865 registry_->ClearAll(); 2841 registry_->ClearAll();
2866 extension_runtime_data_.clear(); 2842 extension_runtime_data_.clear();
2867 2843
2868 // TODO(erikkay) should there be a notification for this? We can't use 2844 // TODO(erikkay) should there be a notification for this? We can't use
2869 // EXTENSION_UNLOADED since that implies that the extension has been disabled 2845 // EXTENSION_UNLOADED since that implies that the extension has been disabled
2870 // or uninstalled. 2846 // or uninstalled.
2871 } 2847 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698