summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvabr@chromium.org <vabr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 04:26:12 +0000
committervabr@chromium.org <vabr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 04:26:12 +0000
commitddeb22028654b1850db469840088b0858dde36cb (patch)
tree2d7700e46f16681dbeb44f55dc53d24323994afb
parent3fba27f2bfd65e540b7013a47c5fdb813b6fb008 (diff)
downloadchromium_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.cc13
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",