summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/declarative/rules_registry.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/api/declarative/rules_registry.cc')
-rw-r--r--chrome/browser/extensions/api/declarative/rules_registry.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/chrome/browser/extensions/api/declarative/rules_registry.cc b/chrome/browser/extensions/api/declarative/rules_registry.cc
index e01b6f0..c9db12e 100644
--- a/chrome/browser/extensions/api/declarative/rules_registry.cc
+++ b/chrome/browser/extensions/api/declarative/rules_registry.cc
@@ -4,10 +4,13 @@
#include "chrome/browser/extensions/api/declarative/rules_registry.h"
+#include <utility>
+
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
+#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "base/values.h"
@@ -81,8 +84,6 @@ RulesRegistry::RulesRegistry(
event_name_(event_name),
webview_key_(webview_key),
weak_ptr_factory_(profile ? this : NULL),
- process_changed_rules_requested_(profile ? NOT_SCHEDULED_FOR_PROCESSING
- : NEVER_PROCESS),
last_generated_rule_identifier_id_(0) {
if (cache_delegate) {
cache_delegate_ = cache_delegate->GetWeakPtr();
@@ -271,7 +272,8 @@ void RulesRegistry::MarkReady(base::Time storage_init_time) {
void RulesRegistry::ProcessChangedRules(const std::string& extension_id) {
DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
- process_changed_rules_requested_ = NOT_SCHEDULED_FOR_PROCESSING;
+ DCHECK(ContainsKey(process_changed_rules_requested_, extension_id));
+ process_changed_rules_requested_[extension_id] = NOT_SCHEDULED_FOR_PROCESSING;
std::vector<linked_ptr<Rule> > new_rules;
GetAllRules(extension_id, &new_rules);
@@ -285,10 +287,17 @@ void RulesRegistry::ProcessChangedRules(const std::string& extension_id) {
}
void RulesRegistry::MaybeProcessChangedRules(const std::string& extension_id) {
- if (process_changed_rules_requested_ != NOT_SCHEDULED_FOR_PROCESSING)
+ // Read and initialize |process_changed_rules_requested_[extension_id]| if
+ // necessary. (Note that the insertion below will not overwrite
+ // |process_changed_rules_requested_[extension_id]| if that already exists.
+ std::pair<ProcessStateMap::iterator, bool> insertion =
+ process_changed_rules_requested_.insert(std::make_pair(
+ extension_id,
+ profile_ ? NOT_SCHEDULED_FOR_PROCESSING : NEVER_PROCESS));
+ if (insertion.first->second != NOT_SCHEDULED_FOR_PROCESSING)
return;
- process_changed_rules_requested_ = SCHEDULED_FOR_PROCESSING;
+ process_changed_rules_requested_[extension_id] = SCHEDULED_FOR_PROCESSING;
ready_.Post(FROM_HERE,
base::Bind(&RulesRegistry::ProcessChangedRules,
weak_ptr_factory_.GetWeakPtr(),