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

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

Issue 10831008: Refactor and fix declarative webRequest API permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits 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 | 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 <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/extension_system.h" 12 #include "chrome/browser/extensions/extension_system.h"
12 #include "net/url_request/url_request.h" 13 #include "net/url_request/url_request.h"
13 14
14 namespace extensions { 15 namespace extensions {
15 16
16 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile, 17 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile,
17 Delegate* delegate) 18 Delegate* delegate)
18 : RulesRegistryWithCache(delegate) { 19 : RulesRegistryWithCache(delegate) {
19 if (profile) 20 if (profile)
20 extension_info_map_ = ExtensionSystem::Get(profile)->info_map(); 21 extension_info_map_ = ExtensionSystem::Get(profile)->info_map();
(...skipping 16 matching lines...) Expand all
37 CHECK(rule_trigger != rule_triggers_.end()); 38 CHECK(rule_trigger != rule_triggers_.end());
38 39
39 WebRequestRule* rule = rule_trigger->second; 40 WebRequestRule* rule = rule_trigger->second;
40 if (rule->conditions().IsFulfilled(*url_match, request, request_stage)) 41 if (rule->conditions().IsFulfilled(*url_match, request, request_stage))
41 result.insert(rule->id()); 42 result.insert(rule->id());
42 } 43 }
43 return result; 44 return result;
44 } 45 }
45 46
46 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas( 47 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
48 const WebRequestPermissions* permissions,
47 const ExtensionInfoMap* extension_info_map, 49 const ExtensionInfoMap* extension_info_map,
48 net::URLRequest* request, 50 net::URLRequest* request,
51 bool crosses_incognito,
49 RequestStages request_stage, 52 RequestStages request_stage,
50 const WebRequestRule::OptionalRequestData& optional_request_data) { 53 const WebRequestRule::OptionalRequestData& optional_request_data) {
51 if (webrequest_rules_.empty()) 54 if (webrequest_rules_.empty())
52 return std::list<LinkedPtrEventResponseDelta>(); 55 return std::list<LinkedPtrEventResponseDelta>();
53 56
54 std::set<WebRequestRule::GlobalRuleId> matches = 57 std::set<WebRequestRule::GlobalRuleId> matches =
55 GetMatches(request, request_stage); 58 GetMatches(request, request_stage);
56 59
57 // Sort all matching rules by their priority so that they can be processed 60 // Sort all matching rules by their priority so that they can be processed
58 // in decreasing order. 61 // in decreasing order.
(...skipping 26 matching lines...) Expand all
85 88
86 // Create deltas until we have passed the minimum priority. 89 // Create deltas until we have passed the minimum priority.
87 std::list<LinkedPtrEventResponseDelta> result; 90 std::list<LinkedPtrEventResponseDelta> result;
88 for (std::vector<PriorityRuleIdPair>::iterator i = ordered_matches.begin(); 91 for (std::vector<PriorityRuleIdPair>::iterator i = ordered_matches.begin();
89 i != ordered_matches.end(); ++i) { 92 i != ordered_matches.end(); ++i) {
90 const WebRequestRule::Priority priority_of_rule = i->first; 93 const WebRequestRule::Priority priority_of_rule = i->first;
91 const WebRequestRule::GlobalRuleId& rule_id = i->second; 94 const WebRequestRule::GlobalRuleId& rule_id = i->second;
92 const ExtensionId& extension_id = rule_id.first; 95 const ExtensionId& extension_id = rule_id.first;
93 const WebRequestRule* rule = webrequest_rules_[rule_id].get(); 96 const WebRequestRule* rule = webrequest_rules_[rule_id].get();
94 CHECK(rule); 97 CHECK(rule);
95 const extensions::Extension* extension = NULL;
96 if (extension_info_map)
97 extension = extension_info_map->extensions().GetByID(extension_id);
98 98
99 // Skip rule if a previous rule of this extension instructed to ignore 99 // Skip rule if a previous rule of this extension instructed to ignore
100 // all rules with a lower priority than min_priorities[extension_id]. 100 // all rules with a lower priority than min_priorities[extension_id].
101 int current_min_priority = min_priorities[extension_id]; 101 int current_min_priority = min_priorities[extension_id];
102 if (priority_of_rule < current_min_priority) 102 if (priority_of_rule < current_min_priority)
103 continue; 103 continue;
104 104
105 std::list<LinkedPtrEventResponseDelta> rule_result = 105 std::list<LinkedPtrEventResponseDelta> rule_result =
106 rule->CreateDeltas(extension, request, request_stage, 106 rule->CreateDeltas(permissions, extension_info_map, request,
107 crosses_incognito, request_stage,
107 optional_request_data); 108 optional_request_data);
108 result.splice(result.begin(), rule_result); 109 result.splice(result.begin(), rule_result);
109 110
110 min_priorities[extension_id] = std::max(current_min_priority, 111 min_priorities[extension_id] = std::max(current_min_priority,
111 rule->GetMinimumPriority()); 112 rule->GetMinimumPriority());
112 } 113 }
113 return result; 114 return result;
114 } 115 }
115 116
116 std::string WebRequestRulesRegistry::AddRulesImpl( 117 std::string WebRequestRulesRegistry::AddRulesImpl(
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 235
235 base::Time WebRequestRulesRegistry::GetExtensionInstallationTime( 236 base::Time WebRequestRulesRegistry::GetExtensionInstallationTime(
236 const std::string& extension_id) const { 237 const std::string& extension_id) const {
237 if (!extension_info_map_.get()) // May be NULL during testing. 238 if (!extension_info_map_.get()) // May be NULL during testing.
238 return base::Time(); 239 return base::Time();
239 240
240 return extension_info_map_->GetInstallTime(extension_id); 241 return extension_info_map_->GetInstallTime(extension_id);
241 } 242 }
242 243
243 } // namespace extensions 244 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698