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

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

Issue 10406013: Support extension precedences in declarative WebRequest API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Matt's comments Created 8 years, 7 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 "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h" 7 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h"
8 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 8 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
9 #include "chrome/browser/extensions/extension_system.h"
9 #include "net/url_request/url_request.h" 10 #include "net/url_request/url_request.h"
10 11
11 namespace extensions { 12 namespace extensions {
12 13
13 WebRequestRulesRegistry::WebRequestRulesRegistry() {} 14 WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile) {
15 if (profile)
16 extension_info_map_ = ExtensionSystem::Get(profile)->info_map();
17 }
14 18
15 std::set<WebRequestRule::GlobalRuleId> 19 std::set<WebRequestRule::GlobalRuleId>
16 WebRequestRulesRegistry::GetMatches(net::URLRequest* request, 20 WebRequestRulesRegistry::GetMatches(net::URLRequest* request,
17 RequestStages request_stage) { 21 RequestStages request_stage) {
18 std::set<WebRequestRule::GlobalRuleId> result; 22 std::set<WebRequestRule::GlobalRuleId> result;
19 23
20 // Figure out for which rules the URL match conditions were fulfilled. 24 // Figure out for which rules the URL match conditions were fulfilled.
21 typedef std::set<URLMatcherConditionSet::ID> URLMatches; 25 typedef std::set<URLMatcherConditionSet::ID> URLMatches;
22 URLMatches url_matches = url_matcher_.MatchURL(request->url()); 26 URLMatches url_matches = url_matcher_.MatchURL(request->url());
23 27
(...skipping 28 matching lines...) Expand all
52 rule->second->CreateDeltas(request, request_stage); 56 rule->second->CreateDeltas(request, request_stage);
53 result.splice(result.begin(), rule_result); 57 result.splice(result.begin(), rule_result);
54 } 58 }
55 59
56 return result; 60 return result;
57 } 61 }
58 62
59 std::string WebRequestRulesRegistry::AddRulesImpl( 63 std::string WebRequestRulesRegistry::AddRulesImpl(
60 const std::string& extension_id, 64 const std::string& extension_id,
61 const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) { 65 const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) {
62 // TODO(battre): Retrieve this from somewhere 66 base::Time extension_installation_time =
63 base::Time extension_installation_time; 67 GetExtensionInstallationTime(extension_id);
64 68
65 std::string error; 69 std::string error;
66 RulesMap new_webrequest_rules; 70 RulesMap new_webrequest_rules;
67 71
68 for (std::vector<linked_ptr<RulesRegistry::Rule> >::const_iterator rule = 72 for (std::vector<linked_ptr<RulesRegistry::Rule> >::const_iterator rule =
69 rules.begin(); rule != rules.end(); ++rule) { 73 rules.begin(); rule != rules.end(); ++rule) {
70 WebRequestRule::GlobalRuleId rule_id(extension_id, *(*rule)->id); 74 WebRequestRule::GlobalRuleId rule_id(extension_id, *(*rule)->id);
71 DCHECK(webrequest_rules_.find(rule_id) == webrequest_rules_.end()); 75 DCHECK(webrequest_rules_.find(rule_id) == webrequest_rules_.end());
72 76
73 scoped_ptr<WebRequestRule> webrequest_rule( 77 scoped_ptr<WebRequestRule> webrequest_rule(
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 return content::BrowserThread::IO; 172 return content::BrowserThread::IO;
169 } 173 }
170 174
171 bool WebRequestRulesRegistry::IsEmpty() const { 175 bool WebRequestRulesRegistry::IsEmpty() const {
172 return rule_triggers_.empty() && webrequest_rules_.empty() && 176 return rule_triggers_.empty() && webrequest_rules_.empty() &&
173 url_matcher_.IsEmpty(); 177 url_matcher_.IsEmpty();
174 } 178 }
175 179
176 WebRequestRulesRegistry::~WebRequestRulesRegistry() {} 180 WebRequestRulesRegistry::~WebRequestRulesRegistry() {}
177 181
182 base::Time WebRequestRulesRegistry::GetExtensionInstallationTime(
183 const std::string& extension_id) const {
184 if (!extension_info_map_.get()) // May be NULL during testing.
185 return base::Time();
186
187 return extension_info_map_->GetInstallTime(extension_id);
188 }
189
178 } // namespace extensions 190 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698