| 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 "extensions/browser/api/declarative_webrequest/webrequest_rules_registr
y.h" | 5 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr
y.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 https_condition_url_filter.Set(keys::kUrlKey, https_condition_dict); | 119 https_condition_url_filter.Set(keys::kUrlKey, https_condition_dict); |
| 120 https_condition_url_filter.SetString(keys::kInstanceTypeKey, | 120 https_condition_url_filter.SetString(keys::kInstanceTypeKey, |
| 121 keys::kRequestMatcherType); | 121 keys::kRequestMatcherType); |
| 122 | 122 |
| 123 base::DictionaryValue action_dict; | 123 base::DictionaryValue action_dict; |
| 124 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 124 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 125 | 125 |
| 126 linked_ptr<api::events::Rule> rule(new api::events::Rule); | 126 linked_ptr<api::events::Rule> rule(new api::events::Rule); |
| 127 rule->id.reset(new std::string(kRuleId1)); | 127 rule->id.reset(new std::string(kRuleId1)); |
| 128 rule->priority.reset(new int(100)); | 128 rule->priority.reset(new int(100)); |
| 129 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 129 rule->actions.push_back(action_dict.CreateDeepCopy()); |
| 130 rule->conditions.push_back( | 130 rule->conditions.push_back(http_condition_url_filter.CreateDeepCopy()); |
| 131 linked_ptr<base::Value>(http_condition_url_filter.DeepCopy())); | 131 rule->conditions.push_back(https_condition_url_filter.CreateDeepCopy()); |
| 132 rule->conditions.push_back( | |
| 133 linked_ptr<base::Value>(https_condition_url_filter.DeepCopy())); | |
| 134 return rule; | 132 return rule; |
| 135 } | 133 } |
| 136 | 134 |
| 137 // Returns a rule that matches anything and cancels it. | 135 // Returns a rule that matches anything and cancels it. |
| 138 linked_ptr<api::events::Rule> CreateRule2() { | 136 linked_ptr<api::events::Rule> CreateRule2() { |
| 139 base::DictionaryValue condition_dict; | 137 base::DictionaryValue condition_dict; |
| 140 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 138 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 141 | 139 |
| 142 base::DictionaryValue action_dict; | 140 base::DictionaryValue action_dict; |
| 143 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 141 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 144 | 142 |
| 145 linked_ptr<api::events::Rule> rule(new api::events::Rule); | 143 linked_ptr<api::events::Rule> rule(new api::events::Rule); |
| 146 rule->id.reset(new std::string(kRuleId2)); | 144 rule->id.reset(new std::string(kRuleId2)); |
| 147 rule->priority.reset(new int(100)); | 145 rule->priority.reset(new int(100)); |
| 148 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 146 rule->actions.push_back(action_dict.CreateDeepCopy()); |
| 149 rule->conditions.push_back( | 147 rule->conditions.push_back(condition_dict.CreateDeepCopy()); |
| 150 linked_ptr<base::Value>(condition_dict.DeepCopy())); | |
| 151 return rule; | 148 return rule; |
| 152 } | 149 } |
| 153 | 150 |
| 154 linked_ptr<api::events::Rule> CreateRedirectRule( | 151 linked_ptr<api::events::Rule> CreateRedirectRule( |
| 155 const std::string& destination) { | 152 const std::string& destination) { |
| 156 base::DictionaryValue condition_dict; | 153 base::DictionaryValue condition_dict; |
| 157 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 154 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 158 | 155 |
| 159 base::DictionaryValue action_dict; | 156 base::DictionaryValue action_dict; |
| 160 action_dict.SetString(keys::kInstanceTypeKey, keys::kRedirectRequestType); | 157 action_dict.SetString(keys::kInstanceTypeKey, keys::kRedirectRequestType); |
| 161 action_dict.SetString(keys::kRedirectUrlKey, destination); | 158 action_dict.SetString(keys::kRedirectUrlKey, destination); |
| 162 | 159 |
| 163 linked_ptr<api::events::Rule> rule(new api::events::Rule); | 160 linked_ptr<api::events::Rule> rule(new api::events::Rule); |
| 164 rule->id.reset(new std::string(kRuleId3)); | 161 rule->id.reset(new std::string(kRuleId3)); |
| 165 rule->priority.reset(new int(100)); | 162 rule->priority.reset(new int(100)); |
| 166 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 163 rule->actions.push_back(action_dict.CreateDeepCopy()); |
| 167 rule->conditions.push_back( | 164 rule->conditions.push_back(condition_dict.CreateDeepCopy()); |
| 168 linked_ptr<base::Value>(condition_dict.DeepCopy())); | |
| 169 return rule; | 165 return rule; |
| 170 } | 166 } |
| 171 | 167 |
| 172 // Create a rule to ignore all other rules for a destination that | 168 // Create a rule to ignore all other rules for a destination that |
| 173 // contains index.html. | 169 // contains index.html. |
| 174 linked_ptr<api::events::Rule> CreateIgnoreRule() { | 170 linked_ptr<api::events::Rule> CreateIgnoreRule() { |
| 175 base::DictionaryValue condition_dict; | 171 base::DictionaryValue condition_dict; |
| 176 base::DictionaryValue* http_condition_dict = new base::DictionaryValue(); | 172 base::DictionaryValue* http_condition_dict = new base::DictionaryValue(); |
| 177 http_condition_dict->SetString(keys2::kPathContainsKey, "index.html"); | 173 http_condition_dict->SetString(keys2::kPathContainsKey, "index.html"); |
| 178 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); | 174 condition_dict.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); |
| 179 condition_dict.Set(keys::kUrlKey, http_condition_dict); | 175 condition_dict.Set(keys::kUrlKey, http_condition_dict); |
| 180 | 176 |
| 181 base::DictionaryValue action_dict; | 177 base::DictionaryValue action_dict; |
| 182 action_dict.SetString(keys::kInstanceTypeKey, keys::kIgnoreRulesType); | 178 action_dict.SetString(keys::kInstanceTypeKey, keys::kIgnoreRulesType); |
| 183 action_dict.SetInteger(keys::kLowerPriorityThanKey, 150); | 179 action_dict.SetInteger(keys::kLowerPriorityThanKey, 150); |
| 184 | 180 |
| 185 linked_ptr<api::events::Rule> rule(new api::events::Rule); | 181 linked_ptr<api::events::Rule> rule(new api::events::Rule); |
| 186 rule->id.reset(new std::string(kRuleId4)); | 182 rule->id.reset(new std::string(kRuleId4)); |
| 187 rule->priority.reset(new int(200)); | 183 rule->priority.reset(new int(200)); |
| 188 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 184 rule->actions.push_back(action_dict.CreateDeepCopy()); |
| 189 rule->conditions.push_back( | 185 rule->conditions.push_back(condition_dict.CreateDeepCopy()); |
| 190 linked_ptr<base::Value>(condition_dict.DeepCopy())); | |
| 191 return rule; | 186 return rule; |
| 192 } | 187 } |
| 193 | 188 |
| 194 // Create a condition with the attributes specified. An example value of | 189 // Create a condition with the attributes specified. An example value of |
| 195 // |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". | 190 // |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". |
| 196 linked_ptr<base::Value> CreateCondition(const std::string& attributes) { | 191 scoped_ptr<base::Value> CreateCondition(const std::string& attributes) { |
| 197 std::string json_description = | 192 std::string json_description = |
| 198 "{ \n" | 193 "{ \n" |
| 199 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"; | 194 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"; |
| 200 json_description += attributes; | 195 json_description += attributes; |
| 201 json_description += "}"; | 196 json_description += "}"; |
| 202 | 197 |
| 203 return linked_ptr<base::Value>( | 198 return base::test::ParseJson(json_description); |
| 204 base::test::ParseJson(json_description).release()); | |
| 205 } | 199 } |
| 206 | 200 |
| 207 // 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 |
| 208 // |attributes| specified (one entry one condition). An example value of a | 202 // |attributes| specified (one entry one condition). An example value of a |
| 209 // string from |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". | 203 // string from |attributes| is: "\"resourceType\": [\"stylesheet\"], \n". |
| 210 linked_ptr<api::events::Rule> CreateCancellingRule( | 204 linked_ptr<api::events::Rule> CreateCancellingRule( |
| 211 const char* rule_id, | 205 const char* rule_id, |
| 212 const std::vector<const std::string*>& attributes) { | 206 const std::vector<const std::string*>& attributes) { |
| 213 base::DictionaryValue action_dict; | 207 base::DictionaryValue action_dict; |
| 214 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); | 208 action_dict.SetString(keys::kInstanceTypeKey, keys::kCancelRequestType); |
| 215 | 209 |
| 216 linked_ptr<api::events::Rule> rule(new api::events::Rule); | 210 linked_ptr<api::events::Rule> rule(new api::events::Rule); |
| 217 rule->id.reset(new std::string(rule_id)); | 211 rule->id.reset(new std::string(rule_id)); |
| 218 rule->priority.reset(new int(1)); | 212 rule->priority.reset(new int(1)); |
| 219 rule->actions.push_back(linked_ptr<base::Value>(action_dict.DeepCopy())); | 213 rule->actions.push_back(action_dict.CreateDeepCopy()); |
| 220 for (std::vector<const std::string*>::const_iterator it = | 214 for (std::vector<const std::string*>::const_iterator it = |
| 221 attributes.begin(); | 215 attributes.begin(); |
| 222 it != attributes.end(); ++it) | 216 it != attributes.end(); ++it) |
| 223 rule->conditions.push_back(CreateCondition(**it)); | 217 rule->conditions.push_back(CreateCondition(**it)); |
| 224 return rule; | 218 return rule; |
| 225 } | 219 } |
| 226 | 220 |
| 227 protected: | 221 protected: |
| 228 base::MessageLoopForIO message_loop_; | 222 base::MessageLoopForIO message_loop_; |
| 229 content::TestBrowserThread ui_; | 223 content::TestBrowserThread ui_; |
| (...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 TEST(WebRequestRulesRegistrySimpleTest, HostPermissionsChecker) { | 723 TEST(WebRequestRulesRegistrySimpleTest, HostPermissionsChecker) { |
| 730 const char kAction[] = // This action requires all URLs host permission. | 724 const char kAction[] = // This action requires all URLs host permission. |
| 731 "{ \n" | 725 "{ \n" |
| 732 " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n" | 726 " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n" |
| 733 " \"redirectUrl\": \"http://bar.com\" \n" | 727 " \"redirectUrl\": \"http://bar.com\" \n" |
| 734 "} "; | 728 "} "; |
| 735 scoped_ptr<base::Value> action_value = base::JSONReader::Read(kAction); | 729 scoped_ptr<base::Value> action_value = base::JSONReader::Read(kAction); |
| 736 ASSERT_TRUE(action_value); | 730 ASSERT_TRUE(action_value); |
| 737 | 731 |
| 738 WebRequestActionSet::Values actions; | 732 WebRequestActionSet::Values actions; |
| 739 actions.push_back(linked_ptr<base::Value>(action_value.release())); | 733 actions.push_back(std::move(action_value)); |
| 740 ASSERT_TRUE(actions.back().get()); | 734 ASSERT_TRUE(actions.back().get()); |
| 741 | 735 |
| 742 std::string error; | 736 std::string error; |
| 743 bool bad_message = false; | 737 bool bad_message = false; |
| 744 scoped_ptr<WebRequestActionSet> action_set( | 738 scoped_ptr<WebRequestActionSet> action_set( |
| 745 WebRequestActionSet::Create(NULL, NULL, actions, &error, &bad_message)); | 739 WebRequestActionSet::Create(NULL, NULL, actions, &error, &bad_message)); |
| 746 ASSERT_TRUE(error.empty()) << error; | 740 ASSERT_TRUE(error.empty()) << error; |
| 747 ASSERT_FALSE(bad_message); | 741 ASSERT_FALSE(bad_message); |
| 748 ASSERT_TRUE(action_set); | 742 ASSERT_TRUE(action_set); |
| 749 | 743 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 // This is a correct match. | 810 // This is a correct match. |
| 817 GURL url2("http://foo.com/index.html"); | 811 GURL url2("http://foo.com/index.html"); |
| 818 scoped_ptr<net::URLRequest> request2(context.CreateRequest( | 812 scoped_ptr<net::URLRequest> request2(context.CreateRequest( |
| 819 url2, net::DEFAULT_PRIORITY, NULL)); | 813 url2, net::DEFAULT_PRIORITY, NULL)); |
| 820 WebRequestData request_data2(request2.get(), ON_BEFORE_REQUEST); | 814 WebRequestData request_data2(request2.get(), ON_BEFORE_REQUEST); |
| 821 deltas = registry->CreateDeltas(NULL, request_data2, false); | 815 deltas = registry->CreateDeltas(NULL, request_data2, false); |
| 822 EXPECT_EQ(1u, deltas.size()); | 816 EXPECT_EQ(1u, deltas.size()); |
| 823 } | 817 } |
| 824 | 818 |
| 825 } // namespace extensions | 819 } // namespace extensions |
| OLD | NEW |