| 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 <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 virtual void SetUp() OVERRIDE; | 86 virtual void SetUp() OVERRIDE; |
| 87 | 87 |
| 88 virtual void TearDown() OVERRIDE { | 88 virtual void TearDown() OVERRIDE { |
| 89 // Make sure that deletion traits of all registries are executed. | 89 // Make sure that deletion traits of all registries are executed. |
| 90 message_loop_.RunUntilIdle(); | 90 message_loop_.RunUntilIdle(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 // Returns a rule that roughly matches http://*.example.com and | 93 // Returns a rule that roughly matches http://*.example.com and |
| 94 // https://www.example.com and cancels it | 94 // https://www.example.com and cancels it |
| 95 linked_ptr<RulesRegistry::Rule> CreateRule1() { | 95 linked_ptr<RulesRegistry::Rule> CreateRule1() { |
| 96 ListValue* scheme_http = new ListValue(); | 96 base::ListValue* scheme_http = new base::ListValue(); |
| 97 scheme_http->Append(Value::CreateStringValue("http")); | 97 scheme_http->Append(Value::CreateStringValue("http")); |
| 98 DictionaryValue* http_condition_dict = new DictionaryValue(); | 98 base::DictionaryValue* http_condition_dict = new base::DictionaryValue(); |
| 99 http_condition_dict->Set(keys2::kSchemesKey, scheme_http); | 99 http_condition_dict->Set(keys2::kSchemesKey, scheme_http); |
| 100 http_condition_dict->SetString(keys2::kHostSuffixKey, "example.com"); | 100 http_condition_dict->SetString(keys2::kHostSuffixKey, "example.com"); |
| 101 DictionaryValue http_condition_url_filter; | 101 base::DictionaryValue http_condition_url_filter; |
| 102 http_condition_url_filter.Set(keys::kUrlKey, http_condition_dict); | 102 http_condition_url_filter.Set(keys::kUrlKey, http_condition_dict); |
| 103 http_condition_url_filter.SetString(keys::kInstanceTypeKey, | 103 http_condition_url_filter.SetString(keys::kInstanceTypeKey, |
| 104 keys::kRequestMatcherType); | 104 keys::kRequestMatcherType); |
| 105 | 105 |
| 106 ListValue* scheme_https = new ListValue(); | 106 base::ListValue* scheme_https = new base::ListValue(); |
| 107 scheme_http->Append(Value::CreateStringValue("https")); | 107 scheme_http->Append(Value::CreateStringValue("https")); |
| 108 DictionaryValue* https_condition_dict = new DictionaryValue(); | 108 base::DictionaryValue* https_condition_dict = new base::DictionaryValue(); |
| 109 https_condition_dict->Set(keys2::kSchemesKey, scheme_https); | 109 https_condition_dict->Set(keys2::kSchemesKey, scheme_https); |
| 110 https_condition_dict->SetString(keys2::kHostSuffixKey, "example.com"); | 110 https_condition_dict->SetString(keys2::kHostSuffixKey, "example.com"); |
| 111 https_condition_dict->SetString(keys2::kHostPrefixKey, "www"); | 111 https_condition_dict->SetString(keys2::kHostPrefixKey, "www"); |
| 112 DictionaryValue https_condition_url_filter; | 112 base::DictionaryValue https_condition_url_filter; |
| 113 https_condition_url_filter.Set(keys::kUrlKey, https_condition_dict); | 113 https_condition_url_filter.Set(keys::kUrlKey, https_condition_dict); |
| 114 https_condition_url_filter.SetString(keys::kInstanceTypeKey, | 114 https_condition_url_filter.SetString(keys::kInstanceTypeKey, |
| 115 keys::kRequestMatcherType); | 115 keys::kRequestMatcherType); |
| 116 | 116 |
| 117 DictionaryValue action_dict; | 117 base::DictionaryValue action_dict; |
| 118 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 118 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 119 | 119 |
| 120 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 120 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 121 rule->id.reset(new std::string(kRuleId1)); | 121 rule->id.reset(new std::string(kRuleId1)); |
| 122 rule->priority.reset(new int(100)); | 122 rule->priority.reset(new int(100)); |
| 123 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 123 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); |
| 124 rule->conditions.push_back( | 124 rule->conditions.push_back( |
| 125 linked_ptr<base::Value>(http_condition_url_filter.DeepCopy())); | 125 linked_ptr<base::Value>(http_condition_url_filter.DeepCopy())); |
| 126 rule->conditions.push_back( | 126 rule->conditions.push_back( |
| 127 linked_ptr<base::Value>(https_condition_url_filter.DeepCopy())); | 127 linked_ptr<base::Value>(https_condition_url_filter.DeepCopy())); |
| 128 return rule; | 128 return rule; |
| 129 } | 129 } |
| 130 | 130 |
| 131 // Returns a rule that matches anything and cancels it. | 131 // Returns a rule that matches anything and cancels it. |
| 132 linked_ptr<RulesRegistry::Rule> CreateRule2() { | 132 linked_ptr<RulesRegistry::Rule> CreateRule2() { |
| 133 DictionaryValue condition_dict; | 133 base::DictionaryValue condition_dict; |
| 134 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 134 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 135 | 135 |
| 136 DictionaryValue action_dict; | 136 base::DictionaryValue action_dict; |
| 137 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 137 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 138 | 138 |
| 139 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 139 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 140 rule->id.reset(new std::string(kRuleId2)); | 140 rule->id.reset(new std::string(kRuleId2)); |
| 141 rule->priority.reset(new int(100)); | 141 rule->priority.reset(new int(100)); |
| 142 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 142 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); |
| 143 rule->conditions.push_back( | 143 rule->conditions.push_back( |
| 144 linked_ptr<base::Value>(condition_dict.DeepCopy())); | 144 linked_ptr<base::Value>(condition_dict.DeepCopy())); |
| 145 return rule; | 145 return rule; |
| 146 } | 146 } |
| 147 | 147 |
| 148 linked_ptr<RulesRegistry::Rule> CreateRedirectRule( | 148 linked_ptr<RulesRegistry::Rule> CreateRedirectRule( |
| 149 const std::string& destination) { | 149 const std::string& destination) { |
| 150 DictionaryValue condition_dict; | 150 base::DictionaryValue condition_dict; |
| 151 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 151 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 152 | 152 |
| 153 DictionaryValue action_dict; | 153 base::DictionaryValue action_dict; |
| 154 action_dict.SetString(keys::kInstanceTypeKey, keys::kRedirectRequestType); | 154 action_dict.SetString(keys::kInstanceTypeKey, keys::kRedirectRequestType); |
| 155 action_dict.SetString(keys::kRedirectUrlKey, destination); | 155 action_dict.SetString(keys::kRedirectUrlKey, destination); |
| 156 | 156 |
| 157 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 157 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 158 rule->id.reset(new std::string(kRuleId3)); | 158 rule->id.reset(new std::string(kRuleId3)); |
| 159 rule->priority.reset(new int(100)); | 159 rule->priority.reset(new int(100)); |
| 160 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 160 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); |
| 161 rule->conditions.push_back( | 161 rule->conditions.push_back( |
| 162 linked_ptr<base::Value>(condition_dict.DeepCopy())); | 162 linked_ptr<base::Value>(condition_dict.DeepCopy())); |
| 163 return rule; | 163 return rule; |
| 164 } | 164 } |
| 165 | 165 |
| 166 // Create a rule to ignore all other rules for a destination that | 166 // Create a rule to ignore all other rules for a destination that |
| 167 // contains index.html. | 167 // contains index.html. |
| 168 linked_ptr<RulesRegistry::Rule> CreateIgnoreRule() { | 168 linked_ptr<RulesRegistry::Rule> CreateIgnoreRule() { |
| 169 DictionaryValue condition_dict; | 169 base::DictionaryValue condition_dict; |
| 170 DictionaryValue* http_condition_dict = new DictionaryValue(); | 170 base::DictionaryValue* http_condition_dict = new base::DictionaryValue(); |
| 171 http_condition_dict->SetString(keys2::kPathContainsKey, "index.html"); | 171 http_condition_dict->SetString(keys2::kPathContainsKey, "index.html"); |
| 172 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 172 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 173 condition_dict.Set(keys::kUrlKey, http_condition_dict); | 173 condition_dict.Set(keys::kUrlKey, http_condition_dict); |
| 174 | 174 |
| 175 DictionaryValue action_dict; | 175 base::DictionaryValue action_dict; |
| 176 action_dict.SetString(keys::kInstanceTypeKey, keys::kIgnoreRulesType); | 176 action_dict.SetString(keys::kInstanceTypeKey, keys::kIgnoreRulesType); |
| 177 action_dict.SetInteger(keys::kLowerPriorityThanKey, 150); | 177 action_dict.SetInteger(keys::kLowerPriorityThanKey, 150); |
| 178 | 178 |
| 179 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 179 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 180 rule->id.reset(new std::string(kRuleId4)); | 180 rule->id.reset(new std::string(kRuleId4)); |
| 181 rule->priority.reset(new int(200)); | 181 rule->priority.reset(new int(200)); |
| 182 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 182 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); |
| 183 rule->conditions.push_back( | 183 rule->conditions.push_back( |
| 184 linked_ptr<base::Value>(condition_dict.DeepCopy())); | 184 linked_ptr<base::Value>(condition_dict.DeepCopy())); |
| 185 return rule; | 185 return rule; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 197 return linked_ptr<base::Value>( | 197 return linked_ptr<base::Value>( |
| 198 base::test::ParseJson(json_description).release()); | 198 base::test::ParseJson(json_description).release()); |
| 199 } | 199 } |
| 200 | 200 |
| 201 // Create a rule with the ID |rule_id| and with conditions created from the | 201 // Create a rule with the ID |rule_id| and with conditions created from the |
| 202 // |attributes| specified (one entry one condition). An example value of a | 202 // |attributes| specified (one entry one condition). An example value of a |
| 203 // string from |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". | 203 // string from |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". |
| 204 linked_ptr<RulesRegistry::Rule> CreateCancellingRule( | 204 linked_ptr<RulesRegistry::Rule> CreateCancellingRule( |
| 205 const char* rule_id, | 205 const char* rule_id, |
| 206 const std::vector<const std::string*>& attributes) { | 206 const std::vector<const std::string*>& attributes) { |
| 207 DictionaryValue action_dict; | 207 base::DictionaryValue action_dict; |
| 208 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 208 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 209 | 209 |
| 210 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); | 210 linked_ptr<RulesRegistry::Rule> rule(new RulesRegistry::Rule); |
| 211 rule->id.reset(new std::string(rule_id)); | 211 rule->id.reset(new std::string(rule_id)); |
| 212 rule->priority.reset(new int(1)); | 212 rule->priority.reset(new int(1)); |
| 213 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 213 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); |
| 214 for (std::vector<const std::string*>::const_iterator it = | 214 for (std::vector<const std::string*>::const_iterator it = |
| 215 attributes.begin(); | 215 attributes.begin(); |
| 216 it != attributes.end(); ++it) | 216 it != attributes.end(); ++it) |
| 217 rule->conditions.push_back(CreateCondition(**it)); | 217 rule->conditions.push_back(CreateCondition(**it)); |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 | 794 |
| 795 // This is a correct match. | 795 // This is a correct match. |
| 796 GURL url2("http://foo.com/index.html"); | 796 GURL url2("http://foo.com/index.html"); |
| 797 net::TestURLRequest request2(url2, NULL, &context, NULL); | 797 net::TestURLRequest request2(url2, NULL, &context, NULL); |
| 798 WebRequestData request_data2(&request2, ON_BEFORE_REQUEST); | 798 WebRequestData request_data2(&request2, ON_BEFORE_REQUEST); |
| 799 deltas = registry->CreateDeltas(NULL, request_data2, false); | 799 deltas = registry->CreateDeltas(NULL, request_data2, false); |
| 800 EXPECT_EQ(1u, deltas.size()); | 800 EXPECT_EQ(1u, deltas.size()); |
| 801 } | 801 } |
| 802 | 802 |
| 803 } // namespace extensions | 803 } // namespace extensions |
| OLD | NEW |