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

Unified Diff: chrome/browser/extensions/extension_service.cc

Issue 8733004: Make ExtensionService use ExtensionSet. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: + Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_service.cc
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 74b3b2d5387119b14665da4ab99e16c3c0b5ae75..6fe13d6f4c52926de322486452e966745ac26265 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -444,15 +444,15 @@ ExtensionService::ExtensionService(Profile* profile,
install_directory_.value().length(), 0, 500, 100);
}
-const ExtensionList* ExtensionService::extensions() const {
+const ExtensionSet* ExtensionService::extensions() const {
return &extensions_;
}
-const ExtensionList* ExtensionService::disabled_extensions() const {
+const ExtensionSet* ExtensionService::disabled_extensions() const {
return &disabled_extensions_;
}
-const ExtensionList* ExtensionService::terminated_extensions() const {
+const ExtensionSet* ExtensionService::terminated_extensions() const {
return &terminated_extensions_;
}
@@ -766,14 +766,11 @@ bool ExtensionService::UninstallExtension(
bool ExtensionService::IsExtensionEnabled(
const std::string& extension_id) const {
- const Extension* extension =
- GetExtensionByIdInternal(extension_id, true, false, true);
- if (extension)
+ if (extensions_.Contains(extension_id) ||
+ terminated_extensions_.Contains(extension_id))
return true;
- extension =
- GetExtensionByIdInternal(extension_id, false, true, false);
- if (extension)
+ if (disabled_extensions_.Contains(extension_id))
return false;
// If the extension hasn't been loaded yet, check the prefs for it. Assume
@@ -803,11 +800,8 @@ void ExtensionService::EnableExtension(const std::string& extension_id) {
return;
// Move it over to the enabled list.
- extensions_.push_back(make_scoped_refptr(extension));
- ExtensionList::iterator iter = std::find(disabled_extensions_.begin(),
- disabled_extensions_.end(),
- extension);
- disabled_extensions_.erase(iter);
+ extensions_.Insert(make_scoped_refptr(extension));
+ disabled_extensions_.Remove(extension->id());
// Make sure any browser action contained within it is not hidden.
extension_prefs_->SetBrowserActionVisibility(extension, true);
@@ -837,18 +831,11 @@ void ExtensionService::DisableExtension(const std::string& extension_id) {
return;
// Move it over to the disabled list.
- disabled_extensions_.push_back(make_scoped_refptr(extension));
- ExtensionList::iterator iter = std::find(extensions_.begin(),
- extensions_.end(),
- extension);
- if (iter != extensions_.end()) {
- extensions_.erase(iter);
- } else {
- iter = std::find(terminated_extensions_.begin(),
- terminated_extensions_.end(),
- extension);
- terminated_extensions_.erase(iter);
- }
+ disabled_extensions_.Insert(make_scoped_refptr(extension));
+ if (extensions_.Contains(extension->id()))
+ extensions_.Remove(extension->id());
+ else
+ terminated_extensions_.Remove(extension->id());
NotifyExtensionUnloaded(extension, extension_misc::UNLOAD_REASON_DISABLE);
@@ -1115,7 +1102,7 @@ void ExtensionService::UpdateExtensionBlacklist(
extension_prefs_->UpdateBlacklist(blacklist_set);
std::vector<std::string> to_be_removed;
// Loop current extensions, unload installed extensions.
- for (ExtensionList::const_iterator iter = extensions_.begin();
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
iter != extensions_.end(); ++iter) {
const Extension* extension = (*iter);
if (blacklist_set.find(extension->id()) != blacklist_set.end()) {
@@ -1158,7 +1145,7 @@ ExtensionUpdater* ExtensionService::updater() {
void ExtensionService::CheckAdminBlacklist() {
std::vector<std::string> to_be_removed;
// Loop through extensions list, unload installed extensions.
- for (ExtensionList::const_iterator iter = extensions_.begin();
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
iter != extensions_.end(); ++iter) {
const Extension* extension = (*iter);
if (!extension_prefs_->IsExtensionAllowedByPolicy(extension->id(),
@@ -1359,10 +1346,10 @@ SyncError ExtensionService::ProcessSyncChanges(
}
void ExtensionService::GetSyncDataListHelper(
- const ExtensionList& extensions,
+ const ExtensionSet& extensions,
const SyncBundle& bundle,
std::vector<ExtensionSyncData>* sync_data_list) const {
- for (ExtensionList::const_iterator it = extensions.begin();
+ for (ExtensionSet::const_iterator it = extensions.begin();
it != extensions.end(); ++it) {
const Extension& extension = **it;
if (bundle.filter(extension) &&
@@ -1493,8 +1480,7 @@ void ExtensionService::SetIsIncognitoEnabled(
extension_prefs_->SetIsIncognitoEnabled(extension_id, enabled);
- bool extension_is_enabled = std::find(extensions_.begin(), extensions_.end(),
- extension) != extensions_.end();
+ bool extension_is_enabled = extensions_.Contains(extension->id());
// When we reload the extension the ID may be invalidated if we've passed it
// by const ref everywhere. Make a copy to be safe.
@@ -1571,8 +1557,7 @@ void ExtensionService::SetAllowFileAccess(const Extension* extension,
extension_prefs_->SetAllowFileAccess(extension->id(), allow);
- bool extension_is_enabled = std::find(extensions_.begin(), extensions_.end(),
- extension) != extensions_.end();
+ bool extension_is_enabled = extensions_.Contains(extension->id());
if (extension_is_enabled)
ReloadExtension(extension->id());
}
@@ -1676,12 +1661,9 @@ void ExtensionService::IdentifyAlertableExtensions() {
scoped_ptr<ExtensionGlobalError> global_error(
new ExtensionGlobalError(AsWeakPtr()));
bool needs_alert = false;
- for (ExtensionList::const_iterator iter = extensions_.begin();
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
iter != extensions_.end(); ++iter) {
const Extension* e = *iter;
- if (!IsExtensionEnabled(e->id())) {
- continue;
- }
if (Extension::IsExternalLocation(e->location())) {
if (!extension_prefs_->IsExternalExtensionAcknowledged(e->id())) {
global_error->AddExternalExtension(e->id());
@@ -1781,13 +1763,10 @@ void ExtensionService::UnloadExtension(
// Clean up runtime data.
extension_runtime_data_.erase(extension_id);
- ExtensionList::iterator iter = std::find(disabled_extensions_.begin(),
- disabled_extensions_.end(),
- extension.get());
- if (iter != disabled_extensions_.end()) {
+if (disabled_extensions_.Contains(extension->id())) {
UnloadedExtensionInfo details(extension, reason);
details.already_disabled = true;
- disabled_extensions_.erase(iter);
+ disabled_extensions_.Remove(extension->id());
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_EXTENSION_UNLOADED,
content::Source<Profile>(profile_),
@@ -1799,10 +1778,8 @@ void ExtensionService::UnloadExtension(
return;
}
- iter = std::find(extensions_.begin(), extensions_.end(), extension.get());
-
- // Remove the extension from our list.
- extensions_.erase(iter);
+// Remove the extension from our list.
+ extensions_.Remove(extension->id());
NotifyExtensionUnloaded(extension.get(), reason);
}
@@ -1811,10 +1788,9 @@ void ExtensionService::UnloadAllExtensions() {
profile_->GetExtensionSpecialStoragePolicy()->
RevokeRightsForAllExtensions();
- extensions_.clear();
- disabled_extensions_.clear();
- terminated_extension_ids_.clear();
- terminated_extensions_.clear();
+ extensions_.Clear();
+ disabled_extensions_.Clear();
+ terminated_extensions_.Clear();
extension_runtime_data_.clear();
// TODO(erikkay) should there be a notification for this? We can't use
@@ -1898,10 +1874,10 @@ void ExtensionService::AddExtension(const Extension* extension) {
bool disabled = extension_prefs_->IsExtensionDisabled(extension->id());
if (disabled) {
- disabled_extensions_.push_back(scoped_extension);
- // TODO(aa): This seems dodgy. It seems that AddExtension() could get called
- // with a disabled extension for other reasons other than that an update was
- // disabled.
+ disabled_extensions_.Insert(scoped_extension);
+ // TODO(aa): This seems dodgy. AddExtension() could get called with a
+ // disabled extension for other reasons other than that an update was
+ // disabled, e.g. as in ExtensionManagementTest.InstallRequiresConfirm.
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED,
content::Source<Profile>(profile_),
@@ -1910,7 +1886,7 @@ void ExtensionService::AddExtension(const Extension* extension) {
return;
}
- extensions_.push_back(scoped_extension);
+ extensions_.Insert(scoped_extension);
SyncExtensionChangeIfNeeded(*extension);
NotifyExtensionLoaded(extension);
IdentifyAlertableExtensions();
@@ -2022,10 +1998,11 @@ void ExtensionService::InitializePermissions(const Extension* extension) {
void ExtensionService::UpdateActiveExtensionsInCrashReporter() {
std::set<std::string> extension_ids;
- for (size_t i = 0; i < extensions_.size(); ++i) {
- if (!extensions_[i]->is_theme() &&
- extensions_[i]->location() != Extension::COMPONENT)
- extension_ids.insert(extensions_[i]->id());
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
+ iter != extensions_.end(); ++iter) {
+ const Extension* extension = *iter;
+ if (!extension->is_theme() && extension->location() != Extension::COMPONENT)
+ extension_ids.insert(extension->id());
}
child_process_logging::SetActiveExtensions(extension_ids);
@@ -2118,51 +2095,33 @@ const Extension* ExtensionService::GetExtensionByIdInternal(
bool include_terminated) const {
std::string lowercase_id = StringToLowerASCII(id);
if (include_enabled) {
- for (ExtensionList::const_iterator iter = extensions_.begin();
- iter != extensions_.end(); ++iter) {
- if ((*iter)->id() == lowercase_id)
- return *iter;
- }
+ const Extension* extension = extensions_.GetByID(lowercase_id);
+ if (extension)
+ return extension;
}
if (include_disabled) {
- for (ExtensionList::const_iterator iter = disabled_extensions_.begin();
- iter != disabled_extensions_.end(); ++iter) {
- if ((*iter)->id() == lowercase_id)
- return *iter;
- }
+ const Extension* extension = disabled_extensions_.GetByID(lowercase_id);
+ if (extension)
+ return extension;
}
if (include_terminated) {
- for (ExtensionList::const_iterator iter = terminated_extensions_.begin();
- iter != terminated_extensions_.end(); ++iter) {
- if ((*iter)->id() == lowercase_id)
- return *iter;
- }
+ const Extension* extension = terminated_extensions_.GetByID(lowercase_id);
+ if (extension)
+ return extension;
}
return NULL;
}
void ExtensionService::TrackTerminatedExtension(const Extension* extension) {
- if (terminated_extension_ids_.insert(extension->id()).second)
- terminated_extensions_.push_back(make_scoped_refptr(extension));
-
- // TODO(yoz): Listen to navcontrollers for that extension. Is this a todo?
+ if (!terminated_extensions_.Contains(extension->id()))
+ terminated_extensions_.Insert(make_scoped_refptr(extension));
- // TODO(yoz): make sure this is okay in *ALL* the listeners!
UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_TERMINATE);
}
void ExtensionService::UntrackTerminatedExtension(const std::string& id) {
std::string lowercase_id = StringToLowerASCII(id);
- if (terminated_extension_ids_.erase(lowercase_id) <= 0)
- return;
-
- for (ExtensionList::iterator iter = terminated_extensions_.begin();
- iter != terminated_extensions_.end(); ++iter) {
- if ((*iter)->id() == lowercase_id) {
- terminated_extensions_.erase(iter);
- return;
- }
- }
+ terminated_extensions_.Remove(lowercase_id);
}
const Extension* ExtensionService::GetTerminatedExtension(
@@ -2185,18 +2144,22 @@ const Extension* ExtensionService::GetExtensionByURL(const GURL& url) {
}
const Extension* ExtensionService::GetExtensionByWebExtent(const GURL& url) {
- for (size_t i = 0; i < extensions_.size(); ++i) {
- if (extensions_[i]->web_extent().MatchesURL(url))
- return extensions_[i];
+ // TODO(yoz): Should be ExtensionSet::GetByURL.
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
+ iter != extensions_.end(); ++iter) {
+ if ((*iter)->web_extent().MatchesURL(url))
+ return *iter;
}
return NULL;
}
const Extension* ExtensionService::GetDisabledExtensionByWebExtent(
const GURL& url) {
- for (size_t i = 0; i < disabled_extensions_.size(); ++i) {
- if (disabled_extensions_[i]->web_extent().MatchesURL(url))
- return disabled_extensions_[i];
+ // TODO(yoz): Should be ExtensionSet::GetByURL.
+ for (ExtensionSet::const_iterator iter = disabled_extensions_.begin();
+ iter != disabled_extensions_.end(); ++iter) {
+ if ((*iter)->web_extent().MatchesURL(url))
+ return *iter;
}
return NULL;
}
@@ -2217,9 +2180,11 @@ bool ExtensionService::ExtensionBindingsAllowed(const GURL& url) {
const Extension* ExtensionService::GetExtensionByOverlappingWebExtent(
const URLPatternSet& extent) {
- for (size_t i = 0; i < extensions_.size(); ++i) {
- if (extensions_[i]->web_extent().OverlapsWith(extent))
- return extensions_[i];
+ // TODO(yoz): Should be in ExtensionSet.
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
+ iter != extensions_.end(); ++iter) {
+ if ((*iter)->web_extent().OverlapsWith(extent))
+ return *iter;
}
return NULL;
@@ -2354,9 +2319,9 @@ void ExtensionService::Observe(int type,
// Loaded extensions.
std::vector<ExtensionMsg_Loaded_Params> loaded_extensions;
- for (size_t i = 0; i < extensions_.size(); ++i) {
- loaded_extensions.push_back(
- ExtensionMsg_Loaded_Params(extensions_[i]));
+ for (ExtensionSet::const_iterator iter = extensions_.begin();
+ iter != extensions_.end(); ++iter) {
+ loaded_extensions.push_back(ExtensionMsg_Loaded_Params(*iter));
}
process->Send(new ExtensionMsg_Loaded(loaded_extensions));
break;
@@ -2407,7 +2372,7 @@ bool ExtensionService::HasApps() const {
ExtensionIdSet ExtensionService::GetAppIds() const {
ExtensionIdSet result;
- for (ExtensionList::const_iterator it = extensions_.begin();
+ for (ExtensionSet::const_iterator it = extensions_.begin();
it != extensions_.end(); ++it) {
if ((*it)->is_app() && (*it)->location() != Extension::COMPONENT)
result.insert((*it)->id());
« 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