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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc

Issue 9844028: Implement rules removal for WebRequestRulesRegistry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
index 96e1b449c42f7bba8f6c83a668e94ee5ce40e9d5..3a92cc86105acddd44849e8f50e07cdb606aee86 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
@@ -95,16 +95,59 @@ std::string WebRequestRulesRegistry::AddRulesImpl(
std::string WebRequestRulesRegistry::RemoveRulesImpl(
const std::string& extension_id,
const std::vector<std::string>& rule_identifiers) {
- return "TODO";
+ // URLMatcherConditionSet IDs that can be removed from URLMatcher.
+ std::vector<URLMatcherConditionSet::ID> remove_from_url_matcher;
+
+ for (std::vector<std::string>::const_iterator i = rule_identifiers.begin();
+ i != rule_identifiers.end(); ++i) {
+ WebRequestRule::GlobalRuleId rule_id = make_pair(extension_id, *i);
Matt Perry 2012/03/28 18:59:52 you can just use the constructor: GlobalRuleId rul
battre 2012/03/28 19:18:42 Nice, I did not know that. Thanks. Done. (also in
+
+ // Skip unknown rules.
+ RulesMap::iterator webrequest_rules_entry = webrequest_rules_.find(rule_id);
+ if (webrequest_rules_entry == webrequest_rules_.end())
+ continue;
+
+ // Remove all triggers but collect their IDs.
+ std::vector<URLMatcherConditionSet> condition_sets;
+ WebRequestRule* rule = webrequest_rules_entry->second.get();
+ rule->conditions().GetURLMatcherConditionSets(&condition_sets);
+ for (std::vector<URLMatcherConditionSet>::iterator j =
+ condition_sets.begin(); j != condition_sets.end(); ++j) {
+ remove_from_url_matcher.push_back(j->id());
+ rule_triggers_.erase(j->id());
+ }
+
+ // Remove reference to actual rule.
+ webrequest_rules_.erase(webrequest_rules_entry);
+ }
+
+ // Clear URLMatcher based on condition_set_ids that are not needed any more.
+ url_matcher_.RemoveConditionSets(remove_from_url_matcher);
+
+ return "";
}
std::string WebRequestRulesRegistry::RemoveAllRulesImpl(
const std::string& extension_id) {
- return "TODO";
+ // Search all identifiers of rules that belong to extension |extension_id|.
+ std::vector<std::string> rule_identifiers;
+ for (RulesMap::iterator i = webrequest_rules_.begin();
+ i != webrequest_rules_.end(); ++i) {
+ const WebRequestRule::GlobalRuleId& global_rule_id = i->first;
+ if (global_rule_id.first == extension_id)
+ rule_identifiers.push_back(global_rule_id.second);
+ }
+
+ return RemoveRulesImpl(extension_id, rule_identifiers);
}
content::BrowserThread::ID WebRequestRulesRegistry::GetOwnerThread() const {
return content::BrowserThread::IO;
}
+bool WebRequestRulesRegistry::IsCompletelyEmpty() const {
+ return rule_triggers_.empty() && webrequest_rules_.empty() &&
+ url_matcher_.IsCompletelyEmpty();
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698