diff options
author | vabr@chromium.org <vabr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 04:26:12 +0000 |
---|---|---|
committer | vabr@chromium.org <vabr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 04:26:12 +0000 |
commit | ddeb22028654b1850db469840088b0858dde36cb (patch) | |
tree | 2d7700e46f16681dbeb44f55dc53d24323994afb | |
parent | 3fba27f2bfd65e540b7013a47c5fdb813b6fb008 (diff) | |
download | chromium_src-ddeb22028654b1850db469840088b0858dde36cb.zip chromium_src-ddeb22028654b1850db469840088b0858dde36cb.tar.gz chromium_src-ddeb22028654b1850db469840088b0858dde36cb.tar.bz2 |
RulesRegistryStorageDelegate::Inner::waiting_for_extensions_ is now a multiset
It needs to be, because we need to check that all tasks posted for a given extension ID (key of the set) receive a callback, and there might currently be more than one such tasks for any extension ID.
BUG=176926
Review URL: https://chromiumcodereview.appspot.com/12330049
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184020 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc b/chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc index 81cf136..68a4d9a 100644 --- a/chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc +++ b/chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc @@ -106,7 +106,9 @@ class RulesRegistryStorageDelegate::Inner const std::string storage_key_; // A set of extension IDs that have rules we are reading from storage. - std::set<std::string> waiting_for_extensions_; + // TODO(vabr): Once the migration code of http://crbug.com/166474 is removed, + // switch this back to just set. http://crbug.com/176926 + std::multiset<std::string> waiting_for_extensions_; // The thread that our RulesRegistry lives on. content::BrowserThread::ID rules_registry_thread_; @@ -275,7 +277,14 @@ void RulesRegistryStorageDelegate::Inner::ReadFromStorageCallback( base::Bind(&Inner::ReadFromStorageOnRegistryThread, this, extension_id, base::Passed(&value))); - waiting_for_extensions_.erase(extension_id); + // TODO(vabr): Once the migration code of http://crbug.com/166474 is removed, + // and |waiting_for_extensions_| is just a set again, switch this back to only + // calling erase(extension_id). http://crbug.com/176926 + std::multiset<std::string>::iterator it = + waiting_for_extensions_.find(extension_id); + CHECK(it != waiting_for_extensions_.end()); + waiting_for_extensions_.erase(it); + CheckIfReady(); if (log_storage_init_delay_ && waiting_for_extensions_.empty()) { UMA_HISTOGRAM_TIMES("Extensions.DeclarativeRulesStorageInitialization", |