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

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

Issue 11414230: Declarative Web Request: firstPartyForCookiesUrl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Jeffrey's comments addressed Created 7 years, 11 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_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/test/values_test_util.h"
(...skipping 10 matching lines...) Expand all
21 namespace keys2 = url_matcher_constants; 21 namespace keys2 = url_matcher_constants;
22 22
23 TEST(WebRequestConditionTest, CreateCondition) { 23 TEST(WebRequestConditionTest, CreateCondition) {
24 // Necessary for TestURLRequest. 24 // Necessary for TestURLRequest.
25 MessageLoop message_loop(MessageLoop::TYPE_IO); 25 MessageLoop message_loop(MessageLoop::TYPE_IO);
26 URLMatcher matcher; 26 URLMatcher matcher;
27 27
28 std::string error; 28 std::string error;
29 scoped_ptr<WebRequestCondition> result; 29 scoped_ptr<WebRequestCondition> result;
30 30
31
32 // Test wrong condition name passed. 31 // Test wrong condition name passed.
33 error.clear(); 32 error.clear();
34 result = WebRequestCondition::Create( 33 result = WebRequestCondition::Create(
35 matcher.condition_factory(), 34 matcher.condition_factory(),
36 *base::test::ParseJson( 35 *base::test::ParseJson(
37 "{ \"invalid\": \"foobar\", \n" 36 "{ \"invalid\": \"foobar\", \n"
38 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" 37 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
39 "}"), 38 "}"),
40 &error); 39 &error);
41 EXPECT_FALSE(error.empty()); 40 EXPECT_FALSE(error.empty());
(...skipping 22 matching lines...) Expand all
64 " \"url\": { \"hostSuffix\": \"example.com\" }, \n" 63 " \"url\": { \"hostSuffix\": \"example.com\" }, \n"
65 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" 64 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
66 "}"), 65 "}"),
67 &error); 66 &error);
68 EXPECT_EQ("", error); 67 EXPECT_EQ("", error);
69 ASSERT_TRUE(result.get()); 68 ASSERT_TRUE(result.get());
70 69
71 URLMatcherConditionSet::Vector url_matcher_condition_set; 70 URLMatcherConditionSet::Vector url_matcher_condition_set;
72 result->GetURLMatcherConditionSets(&url_matcher_condition_set); 71 result->GetURLMatcherConditionSets(&url_matcher_condition_set);
73 matcher.AddConditionSets(url_matcher_condition_set); 72 matcher.AddConditionSets(url_matcher_condition_set);
74 std::set<URLMatcherConditionSet::ID> url_match_ids;
75 73
76 net::TestURLRequestContext context; 74 net::TestURLRequestContext context;
77 GURL http_url("http://www.example.com"); 75 const GURL http_url("http://www.example.com");
78 net::TestURLRequest match_request(http_url, NULL, &context); 76 net::TestURLRequest match_request(http_url, NULL, &context);
79 url_match_ids = matcher.MatchURL(http_url); 77 WebRequestData data(&match_request, ON_BEFORE_REQUEST);
80 EXPECT_EQ(1u, url_match_ids.size()); 78 WebRequestDataWithMatchIds request_data(&data);
81 content::ResourceRequestInfo::AllocateForTesting(&match_request, 79 request_data.url_match_ids = matcher.MatchURL(http_url);
82 ResourceType::MAIN_FRAME, NULL, -1, -1); 80 EXPECT_EQ(1u, request_data.url_match_ids.size());
83 EXPECT_TRUE(result->IsFulfilled( 81 content::ResourceRequestInfo::AllocateForTesting(
84 url_match_ids, 82 &match_request, ResourceType::MAIN_FRAME, NULL, -1, -1);
85 DeclarativeWebRequestData(&match_request, ON_BEFORE_REQUEST))); 83 EXPECT_TRUE(result->IsFulfilled(request_data));
86 84
87 GURL https_url("https://www.example.com"); 85 const GURL https_url("https://www.example.com");
88 net::TestURLRequest wrong_resource_type(https_url, NULL, &context); 86 net::TestURLRequest wrong_resource_type(https_url, NULL, &context);
89 url_match_ids = matcher.MatchURL(https_url); 87 data.request = &wrong_resource_type;
88 request_data.url_match_ids = matcher.MatchURL(http_url);
90 // Make sure IsFulfilled does not fail because of URL matching. 89 // Make sure IsFulfilled does not fail because of URL matching.
91 EXPECT_EQ(1u, url_match_ids.size()); 90 EXPECT_EQ(1u, request_data.url_match_ids.size());
92 content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type, 91 content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type,
93 ResourceType::SUB_FRAME, NULL, -1, -1); 92 ResourceType::SUB_FRAME, NULL, -1, -1);
94 EXPECT_FALSE(result->IsFulfilled( 93 EXPECT_FALSE(result->IsFulfilled(request_data));
95 url_match_ids, 94 }
96 DeclarativeWebRequestData(&wrong_resource_type, ON_BEFORE_REQUEST))); 95
96 TEST(WebRequestConditionTest, CreateConditionFirstPartyForCookies) {
97 // Necessary for TestURLRequest.
98 MessageLoop message_loop(MessageLoop::TYPE_IO);
99 URLMatcher matcher;
100
101 std::string error;
102 scoped_ptr<WebRequestCondition> result;
103
104 result = WebRequestCondition::Create(
105 matcher.condition_factory(),
106 *base::test::ParseJson(
107 "{ \n"
108 " \"firstPartyForCookiesUrl\": { \"hostPrefix\": \"fpfc\"}, \n"
109 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
110 "}"),
111 &error);
112 EXPECT_EQ("", error);
113 ASSERT_TRUE(result.get());
114
115 URLMatcherConditionSet::Vector url_matcher_condition_set;
116 result->GetURLMatcherConditionSets(&url_matcher_condition_set);
117 matcher.AddConditionSets(url_matcher_condition_set);
118
119 net::TestURLRequestContext context;
120 const GURL http_url("http://www.example.com");
121 const GURL first_party_url("http://fpfc.example.com");
122 net::TestURLRequest match_request(http_url, NULL, &context);
123 WebRequestData data(&match_request, ON_BEFORE_REQUEST);
124 WebRequestDataWithMatchIds request_data(&data);
125 request_data.url_match_ids = matcher.MatchURL(http_url);
126 EXPECT_EQ(0u, request_data.url_match_ids.size());
127 request_data.first_party_url_match_ids = matcher.MatchURL(first_party_url);
128 EXPECT_EQ(1u, request_data.first_party_url_match_ids.size());
129 content::ResourceRequestInfo::AllocateForTesting(
130 &match_request, ResourceType::MAIN_FRAME, NULL, -1, -1);
131 EXPECT_TRUE(result->IsFulfilled(request_data));
97 } 132 }
98 133
99 // Conditions without UrlFilter attributes need to be independent of URL 134 // Conditions without UrlFilter attributes need to be independent of URL
100 // matching results. We test here that: 135 // matching results. We test here that:
101 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its 136 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its
102 // attributes are fulfilled. 137 // attributes are fulfilled.
103 // 2. An empty condition (in particular, without UrlFilter attributes) is 138 // 2. An empty condition (in particular, without UrlFilter attributes) is
104 // always fulfilled. 139 // always fulfilled.
105 TEST(WebRequestConditionTest, NoUrlAttributes) { 140 TEST(WebRequestConditionTest, NoUrlAttributes) {
106 // Necessary for TestURLRequest. 141 // Necessary for TestURLRequest.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" 181 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
147 " \"thirdPartyForCookies\": true, \n" 182 " \"thirdPartyForCookies\": true, \n"
148 "}"), 183 "}"),
149 &error); 184 &error);
150 EXPECT_EQ("", error); 185 EXPECT_EQ("", error);
151 ASSERT_TRUE(condition_no_url_false.get()); 186 ASSERT_TRUE(condition_no_url_false.get());
152 187
153 net::TestURLRequestContext context; 188 net::TestURLRequestContext context;
154 net::TestURLRequest https_request( 189 net::TestURLRequest https_request(
155 GURL("https://www.example.com"), NULL, &context); 190 GURL("https://www.example.com"), NULL, &context);
156 std::set<URLMatcherConditionSet::ID> dummy_match_set;
157 191
158 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its 192 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its
159 // attributes are fulfilled. 193 // attributes are fulfilled.
160 EXPECT_FALSE(condition_no_url_false->IsFulfilled( 194 WebRequestData data(&https_request, ON_BEFORE_REQUEST);
161 dummy_match_set, 195 EXPECT_FALSE(
162 DeclarativeWebRequestData(&https_request, ON_BEFORE_REQUEST))); 196 condition_no_url_false->IsFulfilled(WebRequestDataWithMatchIds(&data)));
163 197
164 EXPECT_TRUE(condition_no_url_true->IsFulfilled( 198 data = WebRequestData(&https_request, ON_BEFORE_REQUEST);
165 dummy_match_set, 199 EXPECT_TRUE(
166 DeclarativeWebRequestData(&https_request, ON_BEFORE_REQUEST))); 200 condition_no_url_true->IsFulfilled(WebRequestDataWithMatchIds(&data)));
167 201
168 // 2. An empty condition (in particular, without UrlFilter attributes) is 202 // 2. An empty condition (in particular, without UrlFilter attributes) is
169 // always fulfilled. 203 // always fulfilled.
170 EXPECT_TRUE(condition_empty->IsFulfilled( 204 data = WebRequestData(&https_request, ON_BEFORE_REQUEST);
171 dummy_match_set, 205 EXPECT_TRUE(condition_empty->IsFulfilled(WebRequestDataWithMatchIds(&data)));
172 DeclarativeWebRequestData(&https_request, ON_BEFORE_REQUEST)));
173 } 206 }
174 207
175 TEST(WebRequestConditionTest, CreateConditionSet) { 208 TEST(WebRequestConditionTest, CreateConditionSet) {
176 // Necessary for TestURLRequest. 209 // Necessary for TestURLRequest.
177 MessageLoop message_loop(MessageLoop::TYPE_IO); 210 MessageLoop message_loop(MessageLoop::TYPE_IO);
178 URLMatcher matcher; 211 URLMatcher matcher;
179 212
180 WebRequestConditionSet::AnyVector conditions; 213 WebRequestConditionSet::AnyVector conditions;
181 conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson( 214 conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson(
182 "{ \n" 215 "{ \n"
(...skipping 20 matching lines...) Expand all
203 conditions, &error); 236 conditions, &error);
204 EXPECT_EQ("", error); 237 EXPECT_EQ("", error);
205 ASSERT_TRUE(result.get()); 238 ASSERT_TRUE(result.get());
206 EXPECT_EQ(2u, result->conditions().size()); 239 EXPECT_EQ(2u, result->conditions().size());
207 240
208 // Tell the URLMatcher about our shiny new patterns. 241 // Tell the URLMatcher about our shiny new patterns.
209 URLMatcherConditionSet::Vector url_matcher_condition_set; 242 URLMatcherConditionSet::Vector url_matcher_condition_set;
210 result->GetURLMatcherConditionSets(&url_matcher_condition_set); 243 result->GetURLMatcherConditionSets(&url_matcher_condition_set);
211 matcher.AddConditionSets(url_matcher_condition_set); 244 matcher.AddConditionSets(url_matcher_condition_set);
212 245
213 std::set<URLMatcherConditionSet::ID> url_match_ids;
214
215 // Test that the result is correct and matches http://www.example.com and 246 // Test that the result is correct and matches http://www.example.com and
216 // https://www.example.com 247 // https://www.example.com
217 GURL http_url("http://www.example.com"); 248 GURL http_url("http://www.example.com");
218 net::TestURLRequestContext context; 249 net::TestURLRequestContext context;
219 net::TestURLRequest http_request(http_url, NULL, &context); 250 net::TestURLRequest http_request(http_url, NULL, &context);
220 url_match_ids = matcher.MatchURL(http_url); 251 WebRequestData data(&http_request, ON_BEFORE_REQUEST);
221 EXPECT_EQ(1u, url_match_ids.size()); 252 WebRequestDataWithMatchIds request_data(&data);
222 EXPECT_TRUE(result->IsFulfilled( 253 request_data.url_match_ids = matcher.MatchURL(http_url);
223 *(url_match_ids.begin()), 254 EXPECT_EQ(1u, request_data.url_match_ids.size());
224 url_match_ids, 255 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()),
225 DeclarativeWebRequestData(&http_request, ON_BEFORE_REQUEST))); 256 request_data));
226 257
227 GURL https_url("https://www.example.com"); 258 GURL https_url("https://www.example.com");
228 url_match_ids = matcher.MatchURL(https_url); 259 request_data.url_match_ids = matcher.MatchURL(https_url);
229 EXPECT_EQ(1u, url_match_ids.size()); 260 EXPECT_EQ(1u, request_data.url_match_ids.size());
230 net::TestURLRequest https_request(https_url, NULL, &context); 261 net::TestURLRequest https_request(https_url, NULL, &context);
231 EXPECT_TRUE(result->IsFulfilled( 262 data.request = &https_request;
232 *(url_match_ids.begin()), 263 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()),
233 url_match_ids, 264 request_data));
234 DeclarativeWebRequestData(&https_request, ON_BEFORE_REQUEST)));
235 265
236 // Check that both, hostPrefix and hostSuffix are evaluated. 266 // Check that both, hostPrefix and hostSuffix are evaluated.
237 GURL https_foo_url("https://foo.example.com"); 267 GURL https_foo_url("https://foo.example.com");
238 url_match_ids = matcher.MatchURL(https_foo_url); 268 request_data.url_match_ids = matcher.MatchURL(https_foo_url);
239 EXPECT_EQ(0u, url_match_ids.size()); 269 EXPECT_EQ(0u, request_data.url_match_ids.size());
240 net::TestURLRequest https_foo_request(https_foo_url, NULL, &context); 270 net::TestURLRequest https_foo_request(https_foo_url, NULL, &context);
241 EXPECT_FALSE(result->IsFulfilled( 271 data.request = &https_foo_request;
242 -1, 272 EXPECT_FALSE(result->IsFulfilled(-1, request_data));
243 url_match_ids,
244 DeclarativeWebRequestData(&https_foo_request, ON_BEFORE_REQUEST)));
245 } 273 }
246 274
247 TEST(WebRequestConditionTest, TestPortFilter) { 275 TEST(WebRequestConditionTest, TestPortFilter) {
248 // Necessary for TestURLRequest. 276 // Necessary for TestURLRequest.
249 MessageLoop message_loop(MessageLoop::TYPE_IO); 277 MessageLoop message_loop(MessageLoop::TYPE_IO);
250 URLMatcher matcher; 278 URLMatcher matcher;
251 279
252 WebRequestConditionSet::AnyVector conditions; 280 WebRequestConditionSet::AnyVector conditions;
253 conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson( 281 conditions.push_back(linked_ptr<base::Value>(base::test::ParseJson(
254 "{ \n" 282 "{ \n"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 // the response header. The Create() method should fail and complain that it is 330 // the response header. The Create() method should fail and complain that it is
303 // impossible that both conditions are fulfilled at the same time. 331 // impossible that both conditions are fulfilled at the same time.
304 TEST(WebRequestConditionTest, ConditionsWithConflictingStages) { 332 TEST(WebRequestConditionTest, ConditionsWithConflictingStages) {
305 // Necessary for TestURLRequest. 333 // Necessary for TestURLRequest.
306 MessageLoop message_loop(MessageLoop::TYPE_IO); 334 MessageLoop message_loop(MessageLoop::TYPE_IO);
307 URLMatcher matcher; 335 URLMatcher matcher;
308 336
309 std::string error; 337 std::string error;
310 scoped_ptr<WebRequestCondition> result; 338 scoped_ptr<WebRequestCondition> result;
311 339
312 DictionaryValue condition_value;
313 condition_value.SetString(keys::kInstanceTypeKey, keys::kRequestMatcherType);
314
315
316 // Test error on incompatible application stages for involved attributes. 340 // Test error on incompatible application stages for involved attributes.
317 error.clear(); 341 error.clear();
318 result = WebRequestCondition::Create( 342 result = WebRequestCondition::Create(
319 matcher.condition_factory(), 343 matcher.condition_factory(),
320 *base::test::ParseJson( 344 *base::test::ParseJson(
321 "{ \n" 345 "{ \n"
322 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" 346 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
323 // Pass a JS array with one empty object to each of the header 347 // Pass a JS array with one empty object to each of the header
324 // filters. 348 // filters.
325 " \"requestHeaders\": [{}], \n" 349 " \"requestHeaders\": [{}], \n"
326 " \"responseHeaders\": [{}], \n" 350 " \"responseHeaders\": [{}], \n"
327 "}"), 351 "}"),
328 &error); 352 &error);
329 EXPECT_FALSE(error.empty()); 353 EXPECT_FALSE(error.empty());
330 EXPECT_FALSE(result.get()); 354 EXPECT_FALSE(result.get());
331 } 355 }
332 356
333 } // namespace extensions 357 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698