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

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

Issue 11567027: Add a base::ParseJson() function to help tests construct Values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move ParseJson into base::test Created 8 years 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_condit ion.h" 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit ion.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/test/values_test_util.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h" 12 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h"
12 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h " 13 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
13 #include "chrome/common/extensions/matcher/url_matcher_constants.h" 14 #include "chrome/common/extensions/matcher/url_matcher_constants.h"
14 #include "content/public/browser/resource_request_info.h" 15 #include "content/public/browser/resource_request_info.h"
15 #include "net/url_request/url_request_test_util.h" 16 #include "net/url_request/url_request_test_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace extensions { 19 namespace extensions {
19 20
20 namespace keys = declarative_webrequest_constants; 21 namespace keys = declarative_webrequest_constants;
21 namespace keys2 = url_matcher_constants; 22 namespace keys2 = url_matcher_constants;
22 23
23 TEST(WebRequestConditionTest, CreateCondition) { 24 TEST(WebRequestConditionTest, CreateCondition) {
24 // Necessary for TestURLRequest. 25 // Necessary for TestURLRequest.
25 MessageLoop message_loop(MessageLoop::TYPE_IO); 26 MessageLoop message_loop(MessageLoop::TYPE_IO);
26 URLMatcher matcher; 27 URLMatcher matcher;
27 28
28 std::string error; 29 std::string error;
29 scoped_ptr<WebRequestCondition> result; 30 scoped_ptr<WebRequestCondition> result;
30 31
31 DictionaryValue invalid_condition;
32 invalid_condition.SetString("invalid", "foobar");
33 invalid_condition.SetString(keys::kInstanceTypeKey,
34 keys::kRequestMatcherType);
35
36 DictionaryValue invalid_condition2;
37 invalid_condition2.Set(keys::kUrlKey, new ListValue);
38 invalid_condition2.SetString(keys::kInstanceTypeKey,
39 keys::kRequestMatcherType);
40
41 ListValue* resource_type_list = new ListValue();
42 resource_type_list->Append(Value::CreateStringValue("main_frame"));
43 DictionaryValue* url_filter = new DictionaryValue();
44 url_filter->SetString(keys2::kHostSuffixKey, "example.com");
45 DictionaryValue valid_condition;
46 valid_condition.Set(keys::kResourceTypeKey, resource_type_list);
47 valid_condition.Set(keys::kUrlKey, url_filter);
48 valid_condition.SetString(keys::kInstanceTypeKey,
49 keys::kRequestMatcherType);
50 32
51 // Test wrong condition name passed. 33 // Test wrong condition name passed.
52 error.clear(); 34 error.clear();
53 result = WebRequestCondition::Create(matcher.condition_factory(), 35 result = WebRequestCondition::Create(
54 invalid_condition, &error); 36 matcher.condition_factory(),
37 *base::test::ParseJson(
38 "{ \"invalid\": \"foobar\", \n"
39 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
40 "}"),
41 &error);
55 EXPECT_FALSE(error.empty()); 42 EXPECT_FALSE(error.empty());
56 EXPECT_FALSE(result.get()); 43 EXPECT_FALSE(result.get());
57 44
58 // Test wrong datatype in host_suffix. 45 // Test wrong datatype in host_suffix.
59 error.clear(); 46 error.clear();
60 result = WebRequestCondition::Create(matcher.condition_factory(), 47 result = WebRequestCondition::Create(
61 invalid_condition2, &error); 48 matcher.condition_factory(),
49 *base::test::ParseJson(
50 "{ \n"
51 " \"url\": [], \n"
52 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
53 "}"),
54 &error);
62 EXPECT_FALSE(error.empty()); 55 EXPECT_FALSE(error.empty());
63 EXPECT_FALSE(result.get()); 56 EXPECT_FALSE(result.get());
64 57
65 // Test success (can we support multiple criteria?) 58 // Test success (can we support multiple criteria?)
66 error.clear(); 59 error.clear();
67 result = WebRequestCondition::Create(matcher.condition_factory(), 60 result = WebRequestCondition::Create(
68 valid_condition, &error); 61 matcher.condition_factory(),
62 *base::test::ParseJson(
63 "{ \n"
64 " \"resourceType\": [\"main_frame\"], \n"
65 " \"url\": { \"hostSuffix\": \"example.com\" }, \n"
66 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
67 "}"),
68 &error);
69 EXPECT_EQ("", error); 69 EXPECT_EQ("", error);
70 ASSERT_TRUE(result.get()); 70 ASSERT_TRUE(result.get());
71 71
72 net::TestURLRequestContext context; 72 net::TestURLRequestContext context;
73 net::TestURLRequest match_request( 73 net::TestURLRequest match_request(
74 GURL("http://www.example.com"), NULL, &context); 74 GURL("http://www.example.com"), NULL, &context);
75 content::ResourceRequestInfo::AllocateForTesting(&match_request, 75 content::ResourceRequestInfo::AllocateForTesting(&match_request,
76 ResourceType::MAIN_FRAME, NULL, -1, -1); 76 ResourceType::MAIN_FRAME, NULL, -1, -1);
77 EXPECT_TRUE(result->IsFulfilled( 77 EXPECT_TRUE(result->IsFulfilled(
78 WebRequestRule::RequestData(&match_request, ON_BEFORE_REQUEST))); 78 WebRequestRule::RequestData(&match_request, ON_BEFORE_REQUEST)));
79 79
80 net::TestURLRequest wrong_resource_type( 80 net::TestURLRequest wrong_resource_type(
81 GURL("https://www.example.com"), NULL, &context); 81 GURL("https://www.example.com"), NULL, &context);
82 content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type, 82 content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type,
83 ResourceType::SUB_FRAME, NULL, -1, -1); 83 ResourceType::SUB_FRAME, NULL, -1, -1);
84 EXPECT_FALSE(result->IsFulfilled( 84 EXPECT_FALSE(result->IsFulfilled(
85 WebRequestRule::RequestData(&wrong_resource_type, ON_BEFORE_REQUEST))); 85 WebRequestRule::RequestData(&wrong_resource_type, ON_BEFORE_REQUEST)));
86 } 86 }
87 87
88 TEST(WebRequestConditionTest, CreateConditionSet) { 88 TEST(WebRequestConditionTest, CreateConditionSet) {
89 // Necessary for TestURLRequest. 89 // Necessary for TestURLRequest.
90 MessageLoop message_loop(MessageLoop::TYPE_IO); 90 MessageLoop message_loop(MessageLoop::TYPE_IO);
91 URLMatcher matcher; 91 URLMatcher matcher;
92 92
93 ListValue* http_scheme_list = new ListValue();
94 http_scheme_list->Append(Value::CreateStringValue("http"));
95 DictionaryValue* http_url_filter = new DictionaryValue();
96 http_url_filter->SetString(keys2::kHostSuffixKey, "example.com");
97 http_url_filter->Set(keys2::kSchemesKey, http_scheme_list);
98 DictionaryValue http_condition;
99 http_condition.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
100 http_condition.Set(keys::kUrlKey, http_url_filter);
101
102 ListValue* https_scheme_list = new ListValue();
103 https_scheme_list->Append(Value::CreateStringValue("https"));
104 DictionaryValue* https_url_filter = new DictionaryValue();
105 https_url_filter->SetString(keys2::kHostSuffixKey, "example.com");
106 https_url_filter->SetString(keys2::kHostPrefixKey, "www");
107 https_url_filter->Set(keys2::kSchemesKey, https_scheme_list);
108 DictionaryValue https_condition;
109 https_condition.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
110 https_condition.Set(keys::kUrlKey, https_url_filter);
111
112 WebRequestConditionSet::AnyVector conditions; 93 WebRequestConditionSet::AnyVector conditions;
113 94
114 linked_ptr<json_schema_compiler::any::Any> condition1 = make_linked_ptr( 95 linked_ptr<json_schema_compiler::any::Any> condition1 = make_linked_ptr(
115 new json_schema_compiler::any::Any); 96 new json_schema_compiler::any::Any);
116 condition1->Init(http_condition); 97 condition1->Init(*base::test::ParseJson(
98 "{ \n"
99 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
100 " \"url\": { \n"
101 " \"hostSuffix\": \"example.com\", \n"
102 " \"schemes\": [\"http\"], \n"
103 " }, \n"
104 "}"));
117 conditions.push_back(condition1); 105 conditions.push_back(condition1);
118 106
119 linked_ptr<json_schema_compiler::any::Any> condition2 = make_linked_ptr( 107 linked_ptr<json_schema_compiler::any::Any> condition2 = make_linked_ptr(
120 new json_schema_compiler::any::Any); 108 new json_schema_compiler::any::Any);
121 condition2->Init(https_condition); 109 condition2->Init(*base::test::ParseJson(
110 "{ \n"
111 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
112 " \"url\": { \n"
113 " \"hostSuffix\": \"example.com\", \n"
114 " \"hostPrefix\": \"www\", \n"
115 " \"schemes\": [\"https\"], \n"
116 " }, \n"
117 "}"));
122 conditions.push_back(condition2); 118 conditions.push_back(condition2);
123 119
124 // Test insertion 120 // Test insertion
125 std::string error; 121 std::string error;
126 scoped_ptr<WebRequestConditionSet> result = 122 scoped_ptr<WebRequestConditionSet> result =
127 WebRequestConditionSet::Create(matcher.condition_factory(), 123 WebRequestConditionSet::Create(matcher.condition_factory(),
128 conditions, &error); 124 conditions, &error);
129 EXPECT_EQ("", error); 125 EXPECT_EQ("", error);
130 ASSERT_TRUE(result.get()); 126 ASSERT_TRUE(result.get());
131 EXPECT_EQ(2u, result->conditions().size()); 127 EXPECT_EQ(2u, result->conditions().size());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 ++number_matches; 173 ++number_matches;
178 } 174 }
179 EXPECT_EQ(0, number_matches); 175 EXPECT_EQ(0, number_matches);
180 } 176 }
181 177
182 TEST(WebRequestConditionTest, TestPortFilter) { 178 TEST(WebRequestConditionTest, TestPortFilter) {
183 // Necessary for TestURLRequest. 179 // Necessary for TestURLRequest.
184 MessageLoop message_loop(MessageLoop::TYPE_IO); 180 MessageLoop message_loop(MessageLoop::TYPE_IO);
185 URLMatcher matcher; 181 URLMatcher matcher;
186 182
187 // Allow 80;1000-1010.
188 ListValue* port_range = new ListValue();
189 port_range->Append(Value::CreateIntegerValue(1000));
190 port_range->Append(Value::CreateIntegerValue(1010));
191 ListValue* port_ranges = new ListValue();
192 port_ranges->Append(Value::CreateIntegerValue(80));
193 port_ranges->Append(port_range);
194
195 DictionaryValue* url_filter = new DictionaryValue();
196 url_filter->Set(keys2::kPortsKey, port_ranges);
197 url_filter->SetString(keys2::kHostSuffixKey, "example.com");
198
199 DictionaryValue condition;
200 condition.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
201 condition.Set(keys::kUrlKey, url_filter);
202
203 linked_ptr<json_schema_compiler::any::Any> any_condition = 183 linked_ptr<json_schema_compiler::any::Any> any_condition =
204 make_linked_ptr(new json_schema_compiler::any::Any); 184 make_linked_ptr(new json_schema_compiler::any::Any);
205 any_condition->Init(condition); 185 any_condition->Init(*base::test::ParseJson(
186 "{ \n"
187 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
188 " \"url\": { \n"
189 " \"ports\": [80, [1000, 1010]], \n" // Allow 80;1000-1010.
190 " \"hostSuffix\": \"example.com\", \n"
191 " }, \n"
192 "}"));
206 WebRequestConditionSet::AnyVector conditions; 193 WebRequestConditionSet::AnyVector conditions;
207 conditions.push_back(any_condition); 194 conditions.push_back(any_condition);
208 195
209 // Test insertion 196 // Test insertion
210 std::string error; 197 std::string error;
211 scoped_ptr<WebRequestConditionSet> result = 198 scoped_ptr<WebRequestConditionSet> result =
212 WebRequestConditionSet::Create(matcher.condition_factory(), 199 WebRequestConditionSet::Create(matcher.condition_factory(),
213 conditions, &error); 200 conditions, &error);
214 EXPECT_EQ("", error); 201 EXPECT_EQ("", error);
215 ASSERT_TRUE(result.get()); 202 ASSERT_TRUE(result.get());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // Necessary for TestURLRequest. 239 // Necessary for TestURLRequest.
253 MessageLoop message_loop(MessageLoop::TYPE_IO); 240 MessageLoop message_loop(MessageLoop::TYPE_IO);
254 URLMatcher matcher; 241 URLMatcher matcher;
255 242
256 std::string error; 243 std::string error;
257 scoped_ptr<WebRequestCondition> result; 244 scoped_ptr<WebRequestCondition> result;
258 245
259 DictionaryValue condition_value; 246 DictionaryValue condition_value;
260 condition_value.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType); 247 condition_value.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
261 248
262 // Create two JS arrays, each with one empty object...
263 scoped_ptr<ListValue> request_header_filters(new ListValue());
264 request_header_filters->Append(new DictionaryValue());
265 scoped_ptr<ListValue> response_header_filters(new ListValue());
266 response_header_filters->Append(new DictionaryValue());
267
268 // ...and pass them as the header filters to the request matcher.
269 condition_value.Set(keys::kRequestHeadersKey,
270 request_header_filters.release());
271 condition_value.Set(keys::kResponseHeadersKey,
272 response_header_filters.release());
273 249
274 // Test error on incompatible application stages for involved attributes. 250 // Test error on incompatible application stages for involved attributes.
275 error.clear(); 251 error.clear();
276 result = WebRequestCondition::Create(matcher.condition_factory(), 252 result = WebRequestCondition::Create(
277 condition_value, &error); 253 matcher.condition_factory(),
254 *base::test::ParseJson(
255 "{ \n"
256 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
257 // Pass a JS array with one empty object to each of the header
258 // filters.
259 " \"requestHeaders\": [{}], \n"
260 " \"responseHeaders\": [{}], \n"
261 "}"),
262 &error);
278 EXPECT_FALSE(error.empty()); 263 EXPECT_FALSE(error.empty());
279 EXPECT_FALSE(result.get()); 264 EXPECT_FALSE(result.get());
280 } 265 }
281 266
282 } // namespace extensions 267 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698