| 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 0e90c2d22ddd6a2d92a6302d2a31009b4f48be5d..c8cae5175eb67433354feb382d6a20c5cc158aec 100644
|
| --- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
|
| +++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
|
| @@ -30,40 +30,35 @@ WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile,
|
| extension_info_map_ = ExtensionSystem::Get(profile)->info_map();
|
| }
|
|
|
| -std::set<const WebRequestRule*>
|
| -WebRequestRulesRegistry::GetMatches(
|
| - const DeclarativeWebRequestData& request_data) {
|
| - typedef std::set<const WebRequestRule*> RuleSet;
|
| - typedef std::set<URLMatcherConditionSet::ID> URLMatches;
|
| -
|
| +std::set<const WebRequestRule*> WebRequestRulesRegistry::GetMatches(
|
| + const WebRequestData& request_data_without_ids) const {
|
| RuleSet result;
|
| - URLMatches url_matches = url_matcher_.MatchURL(request_data.request->url());
|
| +
|
| + WebRequestDataWithMatchIds request_data(&request_data_without_ids);
|
| + request_data.url_match_ids = url_matcher_.MatchURL(
|
| + request_data.data->request->url());
|
| + request_data.first_party_url_match_ids = url_matcher_.MatchURL(
|
| + request_data.data->request->first_party_for_cookies());
|
|
|
| // 1st phase -- add all rules with some conditions without UrlFilter
|
| // attributes.
|
| for (RuleSet::const_iterator it = rules_with_untriggered_conditions_.begin();
|
| it != rules_with_untriggered_conditions_.end(); ++it) {
|
| - if ((*it)->conditions().IsFulfilled(-1, url_matches, request_data))
|
| + if ((*it)->conditions().IsFulfilled(-1, request_data))
|
| result.insert(*it);
|
| }
|
|
|
| // 2nd phase -- add all rules with some conditions triggered by URL matches.
|
| - for (URLMatches::const_iterator url_match = url_matches.begin();
|
| - url_match != url_matches.end(); ++url_match) {
|
| - RuleTriggers::const_iterator rule_trigger = rule_triggers_.find(*url_match);
|
| - CHECK(rule_trigger != rule_triggers_.end());
|
| - if (!ContainsKey(result, rule_trigger->second) &&
|
| - rule_trigger->second->conditions().IsFulfilled(*url_match, url_matches,
|
| - request_data))
|
| - result.insert(rule_trigger->second);
|
| - }
|
| + AddTriggeredRules(request_data.url_match_ids, request_data, &result);
|
| + AddTriggeredRules(request_data.first_party_url_match_ids,
|
| + request_data, &result);
|
|
|
| return result;
|
| }
|
|
|
| std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
|
| const ExtensionInfoMap* extension_info_map,
|
| - const DeclarativeWebRequestData& request_data,
|
| + const WebRequestData& request_data,
|
| bool crosses_incognito) {
|
| if (webrequest_rules_.empty())
|
| return std::list<LinkedPtrEventResponseDelta>();
|
| @@ -300,4 +295,19 @@ bool WebRequestRulesRegistry::CheckConsistency(
|
| return true;
|
| }
|
|
|
| +void WebRequestRulesRegistry::AddTriggeredRules(
|
| + const URLMatches& url_matches,
|
| + const WebRequestCondition::MatchData& request_data,
|
| + RuleSet* result) const {
|
| + for (URLMatches::const_iterator url_match = url_matches.begin();
|
| + url_match != url_matches.end(); ++url_match) {
|
| + RuleTriggers::const_iterator rule_trigger = rule_triggers_.find(*url_match);
|
| + CHECK(rule_trigger != rule_triggers_.end());
|
| + if (!ContainsKey(*result, rule_trigger->second) &&
|
| + rule_trigger->second->conditions().IsFulfilled(*url_match,
|
| + request_data))
|
| + result->insert(rule_trigger->second);
|
| + }
|
| +}
|
| +
|
| } // namespace extensions
|
|
|