| 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_condition.h" | 5 #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 &error); | 73 &error); |
| 74 EXPECT_EQ("", error); | 74 EXPECT_EQ("", error); |
| 75 ASSERT_TRUE(result.get()); | 75 ASSERT_TRUE(result.get()); |
| 76 | 76 |
| 77 URLMatcherConditionSet::Vector url_matcher_condition_set; | 77 URLMatcherConditionSet::Vector url_matcher_condition_set; |
| 78 result->GetURLMatcherConditionSets(&url_matcher_condition_set); | 78 result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
| 79 matcher.AddConditionSets(url_matcher_condition_set); | 79 matcher.AddConditionSets(url_matcher_condition_set); |
| 80 | 80 |
| 81 net::TestURLRequestContext context; | 81 net::TestURLRequestContext context; |
| 82 const GURL http_url("http://www.example.com"); | 82 const GURL http_url("http://www.example.com"); |
| 83 scoped_ptr<net::URLRequest> match_request(context.CreateRequest( | 83 scoped_ptr<net::URLRequest> match_request( |
| 84 http_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 84 context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL)); |
| 85 WebRequestData data(match_request.get(), ON_BEFORE_REQUEST); | 85 WebRequestData data(match_request.get(), ON_BEFORE_REQUEST); |
| 86 WebRequestDataWithMatchIds request_data(&data); | 86 WebRequestDataWithMatchIds request_data(&data); |
| 87 request_data.url_match_ids = matcher.MatchURL(http_url); | 87 request_data.url_match_ids = matcher.MatchURL(http_url); |
| 88 EXPECT_EQ(1u, request_data.url_match_ids.size()); | 88 EXPECT_EQ(1u, request_data.url_match_ids.size()); |
| 89 content::ResourceRequestInfo::AllocateForTesting( | 89 content::ResourceRequestInfo::AllocateForTesting( |
| 90 match_request.get(), | 90 match_request.get(), |
| 91 content::RESOURCE_TYPE_MAIN_FRAME, | 91 content::RESOURCE_TYPE_MAIN_FRAME, |
| 92 NULL, // context | 92 NULL, // context |
| 93 -1, // render_process_id | 93 -1, // render_process_id |
| 94 -1, // render_view_id | 94 -1, // render_view_id |
| 95 -1, // render_frame_id | 95 -1, // render_frame_id |
| 96 true, // is_main_frame | 96 true, // is_main_frame |
| 97 false, // parent_is_main_frame | 97 false, // parent_is_main_frame |
| 98 true, // allow_download | 98 true, // allow_download |
| 99 false); // is_async | 99 false); // is_async |
| 100 EXPECT_TRUE(result->IsFulfilled(request_data)); | 100 EXPECT_TRUE(result->IsFulfilled(request_data)); |
| 101 | 101 |
| 102 const GURL https_url("https://www.example.com"); | 102 const GURL https_url("https://www.example.com"); |
| 103 scoped_ptr<net::URLRequest> wrong_resource_type(context.CreateRequest( | 103 scoped_ptr<net::URLRequest> wrong_resource_type( |
| 104 https_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 104 context.CreateRequest(https_url, net::DEFAULT_PRIORITY, NULL)); |
| 105 data.request = wrong_resource_type.get(); | 105 data.request = wrong_resource_type.get(); |
| 106 request_data.url_match_ids = matcher.MatchURL(http_url); | 106 request_data.url_match_ids = matcher.MatchURL(http_url); |
| 107 // Make sure IsFulfilled does not fail because of URL matching. | 107 // Make sure IsFulfilled does not fail because of URL matching. |
| 108 EXPECT_EQ(1u, request_data.url_match_ids.size()); | 108 EXPECT_EQ(1u, request_data.url_match_ids.size()); |
| 109 content::ResourceRequestInfo::AllocateForTesting( | 109 content::ResourceRequestInfo::AllocateForTesting( |
| 110 wrong_resource_type.get(), | 110 wrong_resource_type.get(), |
| 111 content::RESOURCE_TYPE_SUB_FRAME, | 111 content::RESOURCE_TYPE_SUB_FRAME, |
| 112 NULL, // context | 112 NULL, // context |
| 113 -1, // render_process_id | 113 -1, // render_process_id |
| 114 -1, // render_view_id | 114 -1, // render_view_id |
| (...skipping 25 matching lines...) Expand all Loading... |
| 140 EXPECT_EQ("", error); | 140 EXPECT_EQ("", error); |
| 141 ASSERT_TRUE(result.get()); | 141 ASSERT_TRUE(result.get()); |
| 142 | 142 |
| 143 URLMatcherConditionSet::Vector url_matcher_condition_set; | 143 URLMatcherConditionSet::Vector url_matcher_condition_set; |
| 144 result->GetURLMatcherConditionSets(&url_matcher_condition_set); | 144 result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
| 145 matcher.AddConditionSets(url_matcher_condition_set); | 145 matcher.AddConditionSets(url_matcher_condition_set); |
| 146 | 146 |
| 147 net::TestURLRequestContext context; | 147 net::TestURLRequestContext context; |
| 148 const GURL http_url("http://www.example.com"); | 148 const GURL http_url("http://www.example.com"); |
| 149 const GURL first_party_url("http://fpfc.example.com"); | 149 const GURL first_party_url("http://fpfc.example.com"); |
| 150 scoped_ptr<net::URLRequest> match_request(context.CreateRequest( | 150 scoped_ptr<net::URLRequest> match_request( |
| 151 http_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 151 context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL)); |
| 152 WebRequestData data(match_request.get(), ON_BEFORE_REQUEST); | 152 WebRequestData data(match_request.get(), ON_BEFORE_REQUEST); |
| 153 WebRequestDataWithMatchIds request_data(&data); | 153 WebRequestDataWithMatchIds request_data(&data); |
| 154 request_data.url_match_ids = matcher.MatchURL(http_url); | 154 request_data.url_match_ids = matcher.MatchURL(http_url); |
| 155 EXPECT_EQ(0u, request_data.url_match_ids.size()); | 155 EXPECT_EQ(0u, request_data.url_match_ids.size()); |
| 156 request_data.first_party_url_match_ids = matcher.MatchURL(first_party_url); | 156 request_data.first_party_url_match_ids = matcher.MatchURL(first_party_url); |
| 157 EXPECT_EQ(1u, request_data.first_party_url_match_ids.size()); | 157 EXPECT_EQ(1u, request_data.first_party_url_match_ids.size()); |
| 158 content::ResourceRequestInfo::AllocateForTesting( | 158 content::ResourceRequestInfo::AllocateForTesting( |
| 159 match_request.get(), | 159 match_request.get(), |
| 160 content::RESOURCE_TYPE_MAIN_FRAME, | 160 content::RESOURCE_TYPE_MAIN_FRAME, |
| 161 NULL, // context | 161 NULL, // context |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", " | 223 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", " |
| 224 "\n" | 224 "\n" |
| 225 " \"thirdPartyForCookies\": true, \n" | 225 " \"thirdPartyForCookies\": true, \n" |
| 226 "}"), | 226 "}"), |
| 227 &error); | 227 &error); |
| 228 EXPECT_EQ("", error); | 228 EXPECT_EQ("", error); |
| 229 ASSERT_TRUE(condition_no_url_false.get()); | 229 ASSERT_TRUE(condition_no_url_false.get()); |
| 230 | 230 |
| 231 net::TestURLRequestContext context; | 231 net::TestURLRequestContext context; |
| 232 scoped_ptr<net::URLRequest> https_request(context.CreateRequest( | 232 scoped_ptr<net::URLRequest> https_request(context.CreateRequest( |
| 233 GURL("https://www.example.com"), net::DEFAULT_PRIORITY, NULL, NULL)); | 233 GURL("https://www.example.com"), net::DEFAULT_PRIORITY, NULL)); |
| 234 | 234 |
| 235 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its | 235 // 1. A non-empty condition without UrlFilter attributes is fulfilled iff its |
| 236 // attributes are fulfilled. | 236 // attributes are fulfilled. |
| 237 WebRequestData data(https_request.get(), ON_BEFORE_REQUEST); | 237 WebRequestData data(https_request.get(), ON_BEFORE_REQUEST); |
| 238 EXPECT_FALSE( | 238 EXPECT_FALSE( |
| 239 condition_no_url_false->IsFulfilled(WebRequestDataWithMatchIds(&data))); | 239 condition_no_url_false->IsFulfilled(WebRequestDataWithMatchIds(&data))); |
| 240 | 240 |
| 241 data = WebRequestData(https_request.get(), ON_BEFORE_REQUEST); | 241 data = WebRequestData(https_request.get(), ON_BEFORE_REQUEST); |
| 242 EXPECT_TRUE( | 242 EXPECT_TRUE( |
| 243 condition_no_url_true->IsFulfilled(WebRequestDataWithMatchIds(&data))); | 243 condition_no_url_true->IsFulfilled(WebRequestDataWithMatchIds(&data))); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 | 282 |
| 283 // Tell the URLMatcher about our shiny new patterns. | 283 // Tell the URLMatcher about our shiny new patterns. |
| 284 URLMatcherConditionSet::Vector url_matcher_condition_set; | 284 URLMatcherConditionSet::Vector url_matcher_condition_set; |
| 285 result->GetURLMatcherConditionSets(&url_matcher_condition_set); | 285 result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
| 286 matcher.AddConditionSets(url_matcher_condition_set); | 286 matcher.AddConditionSets(url_matcher_condition_set); |
| 287 | 287 |
| 288 // Test that the result is correct and matches http://www.example.com and | 288 // Test that the result is correct and matches http://www.example.com and |
| 289 // https://www.example.com | 289 // https://www.example.com |
| 290 GURL http_url("http://www.example.com"); | 290 GURL http_url("http://www.example.com"); |
| 291 net::TestURLRequestContext context; | 291 net::TestURLRequestContext context; |
| 292 scoped_ptr<net::URLRequest> http_request(context.CreateRequest( | 292 scoped_ptr<net::URLRequest> http_request( |
| 293 http_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 293 context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL)); |
| 294 WebRequestData data(http_request.get(), ON_BEFORE_REQUEST); | 294 WebRequestData data(http_request.get(), ON_BEFORE_REQUEST); |
| 295 WebRequestDataWithMatchIds request_data(&data); | 295 WebRequestDataWithMatchIds request_data(&data); |
| 296 request_data.url_match_ids = matcher.MatchURL(http_url); | 296 request_data.url_match_ids = matcher.MatchURL(http_url); |
| 297 EXPECT_EQ(1u, request_data.url_match_ids.size()); | 297 EXPECT_EQ(1u, request_data.url_match_ids.size()); |
| 298 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()), | 298 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()), |
| 299 request_data)); | 299 request_data)); |
| 300 | 300 |
| 301 GURL https_url("https://www.example.com"); | 301 GURL https_url("https://www.example.com"); |
| 302 request_data.url_match_ids = matcher.MatchURL(https_url); | 302 request_data.url_match_ids = matcher.MatchURL(https_url); |
| 303 EXPECT_EQ(1u, request_data.url_match_ids.size()); | 303 EXPECT_EQ(1u, request_data.url_match_ids.size()); |
| 304 scoped_ptr<net::URLRequest> https_request(context.CreateRequest( | 304 scoped_ptr<net::URLRequest> https_request( |
| 305 https_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 305 context.CreateRequest(https_url, net::DEFAULT_PRIORITY, NULL)); |
| 306 data.request = https_request.get(); | 306 data.request = https_request.get(); |
| 307 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()), | 307 EXPECT_TRUE(result->IsFulfilled(*(request_data.url_match_ids.begin()), |
| 308 request_data)); | 308 request_data)); |
| 309 | 309 |
| 310 // Check that both, hostPrefix and hostSuffix are evaluated. | 310 // Check that both, hostPrefix and hostSuffix are evaluated. |
| 311 GURL https_foo_url("https://foo.example.com"); | 311 GURL https_foo_url("https://foo.example.com"); |
| 312 request_data.url_match_ids = matcher.MatchURL(https_foo_url); | 312 request_data.url_match_ids = matcher.MatchURL(https_foo_url); |
| 313 EXPECT_EQ(0u, request_data.url_match_ids.size()); | 313 EXPECT_EQ(0u, request_data.url_match_ids.size()); |
| 314 scoped_ptr<net::URLRequest> https_foo_request(context.CreateRequest( | 314 scoped_ptr<net::URLRequest> https_foo_request( |
| 315 https_foo_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 315 context.CreateRequest(https_foo_url, net::DEFAULT_PRIORITY, NULL)); |
| 316 data.request = https_foo_request.get(); | 316 data.request = https_foo_request.get(); |
| 317 EXPECT_FALSE(result->IsFulfilled(-1, request_data)); | 317 EXPECT_FALSE(result->IsFulfilled(-1, request_data)); |
| 318 } | 318 } |
| 319 | 319 |
| 320 TEST(WebRequestConditionTest, TestPortFilter) { | 320 TEST(WebRequestConditionTest, TestPortFilter) { |
| 321 // Necessary for TestURLRequest. | 321 // Necessary for TestURLRequest. |
| 322 base::MessageLoopForIO message_loop; | 322 base::MessageLoopForIO message_loop; |
| 323 URLMatcher matcher; | 323 URLMatcher matcher; |
| 324 | 324 |
| 325 WebRequestConditionSet::AnyVector conditions; | 325 WebRequestConditionSet::AnyVector conditions; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 343 // Tell the URLMatcher about our shiny new patterns. | 343 // Tell the URLMatcher about our shiny new patterns. |
| 344 URLMatcherConditionSet::Vector url_matcher_condition_set; | 344 URLMatcherConditionSet::Vector url_matcher_condition_set; |
| 345 result->GetURLMatcherConditionSets(&url_matcher_condition_set); | 345 result->GetURLMatcherConditionSets(&url_matcher_condition_set); |
| 346 matcher.AddConditionSets(url_matcher_condition_set); | 346 matcher.AddConditionSets(url_matcher_condition_set); |
| 347 | 347 |
| 348 std::set<URLMatcherConditionSet::ID> url_match_ids; | 348 std::set<URLMatcherConditionSet::ID> url_match_ids; |
| 349 | 349 |
| 350 // Test various URLs. | 350 // Test various URLs. |
| 351 GURL http_url("http://www.example.com"); | 351 GURL http_url("http://www.example.com"); |
| 352 net::TestURLRequestContext context; | 352 net::TestURLRequestContext context; |
| 353 scoped_ptr<net::URLRequest> http_request(context.CreateRequest( | 353 scoped_ptr<net::URLRequest> http_request( |
| 354 http_url, net::DEFAULT_PRIORITY, NULL, NULL)); | 354 context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL)); |
| 355 url_match_ids = matcher.MatchURL(http_url); | 355 url_match_ids = matcher.MatchURL(http_url); |
| 356 ASSERT_EQ(1u, url_match_ids.size()); | 356 ASSERT_EQ(1u, url_match_ids.size()); |
| 357 | 357 |
| 358 GURL http_url_80("http://www.example.com:80"); | 358 GURL http_url_80("http://www.example.com:80"); |
| 359 scoped_ptr<net::URLRequest> http_request_80(context.CreateRequest( | 359 scoped_ptr<net::URLRequest> http_request_80( |
| 360 http_url_80, net::DEFAULT_PRIORITY, NULL, NULL)); | 360 context.CreateRequest(http_url_80, net::DEFAULT_PRIORITY, NULL)); |
| 361 url_match_ids = matcher.MatchURL(http_url_80); | 361 url_match_ids = matcher.MatchURL(http_url_80); |
| 362 ASSERT_EQ(1u, url_match_ids.size()); | 362 ASSERT_EQ(1u, url_match_ids.size()); |
| 363 | 363 |
| 364 GURL http_url_1000("http://www.example.com:1000"); | 364 GURL http_url_1000("http://www.example.com:1000"); |
| 365 scoped_ptr<net::URLRequest> http_request_1000(context.CreateRequest( | 365 scoped_ptr<net::URLRequest> http_request_1000( |
| 366 http_url_1000, net::DEFAULT_PRIORITY, NULL, NULL)); | 366 context.CreateRequest(http_url_1000, net::DEFAULT_PRIORITY, NULL)); |
| 367 url_match_ids = matcher.MatchURL(http_url_1000); | 367 url_match_ids = matcher.MatchURL(http_url_1000); |
| 368 ASSERT_EQ(1u, url_match_ids.size()); | 368 ASSERT_EQ(1u, url_match_ids.size()); |
| 369 | 369 |
| 370 GURL http_url_2000("http://www.example.com:2000"); | 370 GURL http_url_2000("http://www.example.com:2000"); |
| 371 scoped_ptr<net::URLRequest> http_request_2000(context.CreateRequest( | 371 scoped_ptr<net::URLRequest> http_request_2000( |
| 372 http_url_2000, net::DEFAULT_PRIORITY, NULL, NULL)); | 372 context.CreateRequest(http_url_2000, net::DEFAULT_PRIORITY, NULL)); |
| 373 url_match_ids = matcher.MatchURL(http_url_2000); | 373 url_match_ids = matcher.MatchURL(http_url_2000); |
| 374 ASSERT_EQ(0u, url_match_ids.size()); | 374 ASSERT_EQ(0u, url_match_ids.size()); |
| 375 } | 375 } |
| 376 | 376 |
| 377 // Create a condition with two attributes: one on the request header and one on | 377 // Create a condition with two attributes: one on the request header and one on |
| 378 // the response header. The Create() method should fail and complain that it is | 378 // the response header. The Create() method should fail and complain that it is |
| 379 // impossible that both conditions are fulfilled at the same time. | 379 // impossible that both conditions are fulfilled at the same time. |
| 380 TEST(WebRequestConditionTest, ConditionsWithConflictingStages) { | 380 TEST(WebRequestConditionTest, ConditionsWithConflictingStages) { |
| 381 // Necessary for TestURLRequest. | 381 // Necessary for TestURLRequest. |
| 382 base::MessageLoopForIO message_loop; | 382 base::MessageLoopForIO message_loop; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 397 // filters. | 397 // filters. |
| 398 " \"requestHeaders\": [{}], \n" | 398 " \"requestHeaders\": [{}], \n" |
| 399 " \"responseHeaders\": [{}], \n" | 399 " \"responseHeaders\": [{}], \n" |
| 400 "}"), | 400 "}"), |
| 401 &error); | 401 &error); |
| 402 EXPECT_FALSE(error.empty()); | 402 EXPECT_FALSE(error.empty()); |
| 403 EXPECT_FALSE(result.get()); | 403 EXPECT_FALSE(result.get()); |
| 404 } | 404 } |
| 405 | 405 |
| 406 } // namespace extensions | 406 } // namespace extensions |
| OLD | NEW |