| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |