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

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

Issue 10831150: Refactor request parameters into RequestData struct. Also make RequestStage singular. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: ?? Created 8 years, 4 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
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 <limits> 7 #include <limits>
8 8
9 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h" 9 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h"
10 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 10 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
11 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h" 11 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
12 #include "chrome/browser/extensions/extension_system.h" 12 #include "chrome/browser/extensions/extension_system.h"
13 #include "net/url_request/url_request.h" 13 #include "net/url_request/url_request.h"
14 14
15 namespace extensions { 15 namespace extensions {
16 16
17 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile, 17 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile,
18 Delegate* delegate) 18 Delegate* delegate)
19 : RulesRegistryWithCache(delegate) { 19 : RulesRegistryWithCache(delegate) {
20 if (profile) 20 if (profile)
21 extension_info_map_ = ExtensionSystem::Get(profile)->info_map(); 21 extension_info_map_ = ExtensionSystem::Get(profile)->info_map();
22 } 22 }
23 23
24 std::set<WebRequestRule::GlobalRuleId> 24 std::set<WebRequestRule::GlobalRuleId>
25 WebRequestRulesRegistry::GetMatches(net::URLRequest* request, 25 WebRequestRulesRegistry::GetMatches(
26 RequestStages request_stage) { 26 const WebRequestRule::RequestData& request_data) {
27 std::set<WebRequestRule::GlobalRuleId> result; 27 std::set<WebRequestRule::GlobalRuleId> result;
28 28
29 // Figure out for which rules the URL match conditions were fulfilled. 29 // Figure out for which rules the URL match conditions were fulfilled.
30 typedef std::set<URLMatcherConditionSet::ID> URLMatches; 30 typedef std::set<URLMatcherConditionSet::ID> URLMatches;
31 URLMatches url_matches = url_matcher_.MatchURL(request->url()); 31 URLMatches url_matches = url_matcher_.MatchURL(request_data.request->url());
32 32
33 // Then we need to check for each of these, whether the other 33 // Then we need to check for each of these, whether the other
34 // WebRequestConditionAttributes are also fulfilled. 34 // WebRequestConditionAttributes are also fulfilled.
35 for (URLMatches::iterator url_match = url_matches.begin(); 35 for (URLMatches::iterator url_match = url_matches.begin();
36 url_match != url_matches.end(); ++url_match) { 36 url_match != url_matches.end(); ++url_match) {
37 RuleTriggers::iterator rule_trigger = rule_triggers_.find(*url_match); 37 RuleTriggers::iterator rule_trigger = rule_triggers_.find(*url_match);
38 CHECK(rule_trigger != rule_triggers_.end()); 38 CHECK(rule_trigger != rule_triggers_.end());
39 39
40 WebRequestRule* rule = rule_trigger->second; 40 WebRequestRule* rule = rule_trigger->second;
41 if (rule->conditions().IsFulfilled(*url_match, request, request_stage)) 41 if (rule->conditions().IsFulfilled(*url_match, request_data))
42 result.insert(rule->id()); 42 result.insert(rule->id());
43 } 43 }
44 return result; 44 return result;
45 } 45 }
46 46
47 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas( 47 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
48 const ExtensionInfoMap* extension_info_map, 48 const ExtensionInfoMap* extension_info_map,
49 net::URLRequest* request, 49 const WebRequestRule::RequestData& request_data,
50 bool crosses_incognito, 50 bool crosses_incognito) {
51 RequestStages request_stage,
52 const WebRequestRule::OptionalRequestData& optional_request_data) {
53 if (webrequest_rules_.empty()) 51 if (webrequest_rules_.empty())
54 return std::list<LinkedPtrEventResponseDelta>(); 52 return std::list<LinkedPtrEventResponseDelta>();
55 53
56 std::set<WebRequestRule::GlobalRuleId> matches = 54 std::set<WebRequestRule::GlobalRuleId> matches =
57 GetMatches(request, request_stage); 55 GetMatches(request_data);
58 56
59 // Sort all matching rules by their priority so that they can be processed 57 // Sort all matching rules by their priority so that they can be processed
60 // in decreasing order. 58 // in decreasing order.
61 typedef std::pair<WebRequestRule::Priority, WebRequestRule::GlobalRuleId> 59 typedef std::pair<WebRequestRule::Priority, WebRequestRule::GlobalRuleId>
62 PriorityRuleIdPair; 60 PriorityRuleIdPair;
63 std::vector<PriorityRuleIdPair> ordered_matches; 61 std::vector<PriorityRuleIdPair> ordered_matches;
64 ordered_matches.reserve(matches.size()); 62 ordered_matches.reserve(matches.size());
65 for (std::set<WebRequestRule::GlobalRuleId>::iterator i = matches.begin(); 63 for (std::set<WebRequestRule::GlobalRuleId>::iterator i = matches.begin();
66 i != matches.end(); ++i) { 64 i != matches.end(); ++i) {
67 RulesMap::const_iterator rule = webrequest_rules_.find(*i); 65 RulesMap::const_iterator rule = webrequest_rules_.find(*i);
(...skipping 27 matching lines...) Expand all
95 const WebRequestRule* rule = webrequest_rules_[rule_id].get(); 93 const WebRequestRule* rule = webrequest_rules_[rule_id].get();
96 CHECK(rule); 94 CHECK(rule);
97 95
98 // Skip rule if a previous rule of this extension instructed to ignore 96 // Skip rule if a previous rule of this extension instructed to ignore
99 // all rules with a lower priority than min_priorities[extension_id]. 97 // all rules with a lower priority than min_priorities[extension_id].
100 int current_min_priority = min_priorities[extension_id]; 98 int current_min_priority = min_priorities[extension_id];
101 if (priority_of_rule < current_min_priority) 99 if (priority_of_rule < current_min_priority)
102 continue; 100 continue;
103 101
104 std::list<LinkedPtrEventResponseDelta> rule_result = 102 std::list<LinkedPtrEventResponseDelta> rule_result =
105 rule->CreateDeltas(extension_info_map, request, crosses_incognito, 103 rule->CreateDeltas(extension_info_map, request_data, crosses_incognito);
106 request_stage, optional_request_data);
107 result.splice(result.begin(), rule_result); 104 result.splice(result.begin(), rule_result);
108 105
109 min_priorities[extension_id] = std::max(current_min_priority, 106 min_priorities[extension_id] = std::max(current_min_priority,
110 rule->GetMinimumPriority()); 107 rule->GetMinimumPriority());
111 } 108 }
112 return result; 109 return result;
113 } 110 }
114 111
115 std::string WebRequestRulesRegistry::AddRulesImpl( 112 std::string WebRequestRulesRegistry::AddRulesImpl(
116 const std::string& extension_id, 113 const std::string& extension_id,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 230
234 base::Time WebRequestRulesRegistry::GetExtensionInstallationTime( 231 base::Time WebRequestRulesRegistry::GetExtensionInstallationTime(
235 const std::string& extension_id) const { 232 const std::string& extension_id) const {
236 if (!extension_info_map_.get()) // May be NULL during testing. 233 if (!extension_info_map_.get()) // May be NULL during testing.
237 return base::Time(); 234 return base::Time();
238 235
239 return extension_info_map_->GetInstallTime(extension_id); 236 return extension_info_map_->GetInstallTime(extension_id);
240 } 237 }
241 238
242 } // namespace extensions 239 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698