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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc

Issue 11414230: Declarative Web Request: firstPartyForCookiesUrl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync with trunk Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_ registry.h" 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_ registry.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 12 matching lines...) Expand all
23 23
24 namespace extensions { 24 namespace extensions {
25 25
26 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile, 26 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile,
27 Delegate* delegate) 27 Delegate* delegate)
28 : RulesRegistryWithCache(delegate) { 28 : RulesRegistryWithCache(delegate) {
29 if (profile) 29 if (profile)
30 extension_info_map_ = ExtensionSystem::Get(profile)->info_map(); 30 extension_info_map_ = ExtensionSystem::Get(profile)->info_map();
31 } 31 }
32 32
33 std::set<const WebRequestRule*> 33 std::set<const WebRequestRule*> WebRequestRulesRegistry::GetMatches(
34 WebRequestRulesRegistry::GetMatches( 34 DeclarativeWebRequestData* request_data) {
battre 2013/01/23 18:56:34 What do you think this: struct WebRequestData {
Jeffrey Yasskin 2013/01/24 00:39:17 I don't have a strong opinion here, but I don't th
vabr (Chromium) 2013/01/24 18:24:08 I thought about this, and did not dare to suggest
35 const DeclarativeWebRequestData& request_data) { 35 RuleSet result;
36 typedef std::set<const WebRequestRule*> RuleSet;
37 typedef std::set<URLMatcherConditionSet::ID> URLMatches;
38 36
39 RuleSet result; 37 request_data->url_match_ids =
40 URLMatches url_matches = url_matcher_.MatchURL(request_data.request->url()); 38 url_matcher_.MatchURL(request_data->request->url());
39 request_data->first_party_url_match_ids =
40 url_matcher_.MatchURL(request_data->request->first_party_for_cookies());
41 41
42 // 1st phase -- add all rules with some conditions without UrlFilter 42 // 1st phase -- add all rules with some conditions without UrlFilter
43 // attributes. 43 // attributes.
44 for (RuleSet::const_iterator it = rules_with_untriggered_conditions_.begin(); 44 for (RuleSet::const_iterator it = rules_with_untriggered_conditions_.begin();
45 it != rules_with_untriggered_conditions_.end(); ++it) { 45 it != rules_with_untriggered_conditions_.end(); ++it) {
46 if ((*it)->conditions().IsFulfilled(-1, url_matches, request_data)) 46 if ((*it)->conditions().IsFulfilled(-1, *request_data))
47 result.insert(*it); 47 result.insert(*it);
48 } 48 }
49 49
50 // 2nd phase -- add all rules with some conditions triggered by URL matches. 50 // 2nd phase -- add all rules with some conditions triggered by URL matches.
51 for (URLMatches::const_iterator url_match = url_matches.begin(); 51 AddTriggeredRules(request_data->url_match_ids, *request_data, &result);
52 url_match != url_matches.end(); ++url_match) { 52 AddTriggeredRules(request_data->first_party_url_match_ids,
53 RuleTriggers::const_iterator rule_trigger = rule_triggers_.find(*url_match); 53 *request_data, &result);
54 CHECK(rule_trigger != rule_triggers_.end());
55 if (!ContainsKey(result, rule_trigger->second) &&
56 rule_trigger->second->conditions().IsFulfilled(*url_match, url_matches,
57 request_data))
58 result.insert(rule_trigger->second);
59 }
60 54
61 return result; 55 return result;
62 } 56 }
63 57
64 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas( 58 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
65 const ExtensionInfoMap* extension_info_map, 59 const ExtensionInfoMap* extension_info_map,
66 const DeclarativeWebRequestData& request_data, 60 DeclarativeWebRequestData* request_data,
67 bool crosses_incognito) { 61 bool crosses_incognito) {
68 if (webrequest_rules_.empty()) 62 if (webrequest_rules_.empty())
69 return std::list<LinkedPtrEventResponseDelta>(); 63 return std::list<LinkedPtrEventResponseDelta>();
70 64
71 std::set<const WebRequestRule*> matches = GetMatches(request_data); 65 std::set<const WebRequestRule*> matches = GetMatches(request_data);
72 66
73 // Sort all matching rules by their priority so that they can be processed 67 // Sort all matching rules by their priority so that they can be processed
74 // in decreasing order. 68 // in decreasing order.
75 typedef std::pair<WebRequestRule::Priority, WebRequestRule::GlobalRuleId> 69 typedef std::pair<WebRequestRule::Priority, WebRequestRule::GlobalRuleId>
76 PriorityRuleIdPair; 70 PriorityRuleIdPair;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 103
110 // Skip rule if a previous rule of this extension instructed to ignore 104 // Skip rule if a previous rule of this extension instructed to ignore
111 // all rules with a lower priority than min_priorities[extension_id]. 105 // all rules with a lower priority than min_priorities[extension_id].
112 int current_min_priority = min_priorities[extension_id]; 106 int current_min_priority = min_priorities[extension_id];
113 if (priority_of_rule < current_min_priority) 107 if (priority_of_rule < current_min_priority)
114 continue; 108 continue;
115 109
116 110
117 std::list<LinkedPtrEventResponseDelta> rule_result; 111 std::list<LinkedPtrEventResponseDelta> rule_result;
118 WebRequestAction::ApplyInfo apply_info = { 112 WebRequestAction::ApplyInfo apply_info = {
119 extension_info_map, request_data, crosses_incognito, &rule_result 113 extension_info_map, *request_data, crosses_incognito, &rule_result
120 }; 114 };
121 rule->Apply(&apply_info); 115 rule->Apply(&apply_info);
122 result.splice(result.begin(), rule_result); 116 result.splice(result.begin(), rule_result);
123 117
124 min_priorities[extension_id] = std::max(current_min_priority, 118 min_priorities[extension_id] = std::max(current_min_priority,
125 rule->GetMinimumPriority()); 119 rule->GetMinimumPriority());
126 } 120 }
127 return result; 121 return result;
128 } 122 }
129 123
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 found_matching_condition = true; 287 found_matching_condition = true;
294 } 288 }
295 if (!found_matching_condition) { 289 if (!found_matching_condition) {
296 *error = kActionCannotBeExecuted; 290 *error = kActionCannotBeExecuted;
297 return false; 291 return false;
298 } 292 }
299 } 293 }
300 return true; 294 return true;
301 } 295 }
302 296
297 void WebRequestRulesRegistry::AddTriggeredRules(
298 const URLMatches& url_matches,
299 const DeclarativeWebRequestData& request_data,
300 RuleSet* result) {
301 for (URLMatches::const_iterator url_match = url_matches.begin();
302 url_match != url_matches.end(); ++url_match) {
303 RuleTriggers::const_iterator rule_trigger = rule_triggers_.find(*url_match);
304 CHECK(rule_trigger != rule_triggers_.end());
305 if (!ContainsKey(*result, rule_trigger->second) &&
306 rule_trigger->second->conditions().IsFulfilled(*url_match,
307 request_data))
308 result->insert(rule_trigger->second);
309 }
310 }
311
303 } // namespace extensions 312 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698