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 <map> | 5 #include <map> |
6 #include <queue> | 6 #include <queue> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "chrome/test/base/testing_browser_process.h" | 35 #include "chrome/test/base/testing_browser_process.h" |
36 #include "chrome/test/base/testing_pref_service_syncable.h" | 36 #include "chrome/test/base/testing_pref_service_syncable.h" |
37 #include "chrome/test/base/testing_profile.h" | 37 #include "chrome/test/base/testing_profile.h" |
38 #include "chrome/test/base/testing_profile_manager.h" | 38 #include "chrome/test/base/testing_profile_manager.h" |
39 #include "content/public/common/url_constants.h" | 39 #include "content/public/common/url_constants.h" |
40 #include "content/public/test/test_browser_thread_bundle.h" | 40 #include "content/public/test/test_browser_thread_bundle.h" |
41 #include "extensions/common/features/feature.h" | 41 #include "extensions/common/features/feature.h" |
42 #include "net/base/auth.h" | 42 #include "net/base/auth.h" |
43 #include "net/base/capturing_net_log.h" | 43 #include "net/base/capturing_net_log.h" |
44 #include "net/base/net_util.h" | 44 #include "net/base/net_util.h" |
| 45 #include "net/base/request_priority.h" |
45 #include "net/base/upload_bytes_element_reader.h" | 46 #include "net/base/upload_bytes_element_reader.h" |
46 #include "net/base/upload_data_stream.h" | 47 #include "net/base/upload_data_stream.h" |
47 #include "net/base/upload_file_element_reader.h" | 48 #include "net/base/upload_file_element_reader.h" |
48 #include "net/dns/mock_host_resolver.h" | 49 #include "net/dns/mock_host_resolver.h" |
49 #include "net/url_request/url_request_job_factory_impl.h" | 50 #include "net/url_request/url_request_job_factory_impl.h" |
50 #include "net/url_request/url_request_test_util.h" | 51 #include "net/url_request/url_request_test_util.h" |
51 #include "testing/gtest/include/gtest/gtest-message.h" | 52 #include "testing/gtest/include/gtest/gtest-message.h" |
52 #include "testing/gtest/include/gtest/gtest.h" | 53 #include "testing/gtest/include/gtest/gtest.h" |
53 | 54 |
54 namespace helpers = extension_web_request_api_helpers; | 55 namespace helpers = extension_web_request_api_helpers; |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 | 234 |
234 net::URLRequestJobFactoryImpl job_factory; | 235 net::URLRequestJobFactoryImpl job_factory; |
235 job_factory.SetProtocolHandler( | 236 job_factory.SetProtocolHandler( |
236 chrome::kAboutScheme, | 237 chrome::kAboutScheme, |
237 new chrome_browser_net::AboutProtocolHandler()); | 238 new chrome_browser_net::AboutProtocolHandler()); |
238 context_->set_job_factory(&job_factory); | 239 context_->set_job_factory(&job_factory); |
239 | 240 |
240 GURL redirect_url("about:redirected"); | 241 GURL redirect_url("about:redirected"); |
241 GURL not_chosen_redirect_url("about:not_chosen"); | 242 GURL not_chosen_redirect_url("about:not_chosen"); |
242 | 243 |
243 net::URLRequest request(GURL("about:blank"), &delegate_, context_.get()); | 244 net::URLRequest request( |
| 245 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
244 { | 246 { |
245 // onBeforeRequest will be dispatched twice initially. The second response - | 247 // onBeforeRequest will be dispatched twice initially. The second response - |
246 // the redirect - should win, since it has a later |install_time|. The | 248 // the redirect - should win, since it has a later |install_time|. The |
247 // redirect will dispatch another pair of onBeforeRequest. There, the first | 249 // redirect will dispatch another pair of onBeforeRequest. There, the first |
248 // response should win (later |install_time|). | 250 // response should win (later |install_time|). |
249 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 251 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
250 | 252 |
251 // Extension1 response. Arrives first, but ignored due to install_time. | 253 // Extension1 response. Arrives first, but ignored due to install_time. |
252 response = new ExtensionWebRequestEventRouter::EventResponse( | 254 response = new ExtensionWebRequestEventRouter::EventResponse( |
253 extension1_id, base::Time::FromDoubleT(1)); | 255 extension1_id, base::Time::FromDoubleT(1)); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 | 289 |
288 EXPECT_TRUE(!request.is_pending()); | 290 EXPECT_TRUE(!request.is_pending()); |
289 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 291 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); |
290 EXPECT_EQ(0, request.status().error()); | 292 EXPECT_EQ(0, request.status().error()); |
291 EXPECT_EQ(redirect_url, request.url()); | 293 EXPECT_EQ(redirect_url, request.url()); |
292 EXPECT_EQ(2U, request.url_chain().size()); | 294 EXPECT_EQ(2U, request.url_chain().size()); |
293 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); | 295 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); |
294 } | 296 } |
295 | 297 |
296 // Now test the same thing but the extensions answer in reverse order. | 298 // Now test the same thing but the extensions answer in reverse order. |
297 net::URLRequest request2(GURL("about:blank"), &delegate_, context_.get()); | 299 net::URLRequest request2( |
| 300 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
298 { | 301 { |
299 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 302 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
300 | 303 |
301 // Extension2 response. Arrives first, and chosen because of install_time. | 304 // Extension2 response. Arrives first, and chosen because of install_time. |
302 response = new ExtensionWebRequestEventRouter::EventResponse( | 305 response = new ExtensionWebRequestEventRouter::EventResponse( |
303 extension2_id, base::Time::FromDoubleT(2)); | 306 extension2_id, base::Time::FromDoubleT(2)); |
304 response->new_url = redirect_url; | 307 response->new_url = redirect_url; |
305 ipc_sender_.PushTask( | 308 ipc_sender_.PushTask( |
306 base::Bind(&EventHandledOnIOThread, | 309 base::Bind(&EventHandledOnIOThread, |
307 &profile_, extension2_id, kEventName, kEventName + "/2", | 310 &profile_, extension2_id, kEventName, kEventName + "/2", |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 363 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
361 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", | 364 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", |
362 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 365 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
363 ipc_sender_factory.GetWeakPtr()); | 366 ipc_sender_factory.GetWeakPtr()); |
364 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 367 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
365 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", | 368 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", |
366 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 369 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
367 ipc_sender_factory.GetWeakPtr()); | 370 ipc_sender_factory.GetWeakPtr()); |
368 | 371 |
369 GURL request_url("about:blank"); | 372 GURL request_url("about:blank"); |
370 net::URLRequest request(request_url, &delegate_, context_.get()); | 373 net::URLRequest request( |
| 374 request_url, net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
371 | 375 |
372 // onBeforeRequest will be dispatched twice. The second response - | 376 // onBeforeRequest will be dispatched twice. The second response - |
373 // the redirect - would win, since it has a later |install_time|, but | 377 // the redirect - would win, since it has a later |install_time|, but |
374 // the first response takes precedence because cancel >> redirect. | 378 // the first response takes precedence because cancel >> redirect. |
375 GURL redirect_url("about:redirected"); | 379 GURL redirect_url("about:redirected"); |
376 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 380 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
377 | 381 |
378 // Extension1 response. Arrives first, would be ignored in principle due to | 382 // Extension1 response. Arrives first, would be ignored in principle due to |
379 // install_time but "cancel" always wins. | 383 // install_time but "cancel" always wins. |
380 response = new ExtensionWebRequestEventRouter::EventResponse( | 384 response = new ExtensionWebRequestEventRouter::EventResponse( |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 431 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
428 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 432 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
429 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 433 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
430 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 434 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
431 ipc_sender_factory.GetWeakPtr()); | 435 ipc_sender_factory.GetWeakPtr()); |
432 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 436 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
433 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", | 437 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", |
434 filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); | 438 filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); |
435 | 439 |
436 GURL request_url("about:blank"); | 440 GURL request_url("about:blank"); |
437 net::URLRequest request(request_url, &delegate_, context_.get()); | 441 net::URLRequest request( |
| 442 request_url, net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
438 | 443 |
439 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 444 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
440 | 445 |
441 // Extension response for the OnBeforeRequest handler. This should not be | 446 // Extension response for the OnBeforeRequest handler. This should not be |
442 // processed because request is canceled before the handler responds. | 447 // processed because request is canceled before the handler responds. |
443 response = new ExtensionWebRequestEventRouter::EventResponse( | 448 response = new ExtensionWebRequestEventRouter::EventResponse( |
444 extension_id, base::Time::FromDoubleT(1)); | 449 extension_id, base::Time::FromDoubleT(1)); |
445 GURL redirect_url("about:redirected"); | 450 GURL redirect_url("about:redirected"); |
446 response->new_url = redirect_url; | 451 response->new_url = redirect_url; |
447 ipc_sender_.PushTask( | 452 ipc_sender_.PushTask( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 | 495 |
491 } // namespace | 496 } // namespace |
492 | 497 |
493 void ExtensionWebRequestTest::FireURLRequestWithData( | 498 void ExtensionWebRequestTest::FireURLRequestWithData( |
494 const std::string& method, | 499 const std::string& method, |
495 const char* content_type, | 500 const char* content_type, |
496 const std::vector<char>& bytes_1, | 501 const std::vector<char>& bytes_1, |
497 const std::vector<char>& bytes_2) { | 502 const std::vector<char>& bytes_2) { |
498 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 503 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
499 GURL request_url("http://www.example.com"); | 504 GURL request_url("http://www.example.com"); |
500 net::URLRequest request(request_url, &delegate_, context_.get()); | 505 net::URLRequest request( |
| 506 request_url, net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
501 request.set_method(method); | 507 request.set_method(method); |
502 if (content_type != NULL) | 508 if (content_type != NULL) |
503 request.SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, | 509 request.SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, |
504 content_type, | 510 content_type, |
505 true /* overwrite */); | 511 true /* overwrite */); |
506 ScopedVector<net::UploadElementReader> element_readers; | 512 ScopedVector<net::UploadElementReader> element_readers; |
507 element_readers.push_back(new net::UploadBytesElementReader( | 513 element_readers.push_back(new net::UploadBytesElementReader( |
508 &(bytes_1[0]), bytes_1.size())); | 514 &(bytes_1[0]), bytes_1.size())); |
509 element_readers.push_back( | 515 element_readers.push_back( |
510 new net::UploadFileElementReader(base::MessageLoopProxy::current().get(), | 516 new net::UploadFileElementReader(base::MessageLoopProxy::current().get(), |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 | 709 |
704 // Subscribe to OnBeforeRequest with requestBody requirement. | 710 // Subscribe to OnBeforeRequest with requestBody requirement. |
705 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 711 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
706 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 712 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
707 filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); | 713 filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); |
708 | 714 |
709 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 715 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
710 const GURL request_url("http://www.example.com"); | 716 const GURL request_url("http://www.example.com"); |
711 | 717 |
712 for (size_t i = 0; i < arraysize(kMethods); ++i) { | 718 for (size_t i = 0; i < arraysize(kMethods); ++i) { |
713 net::URLRequest request(request_url, &delegate_, context_.get()); | 719 net::URLRequest request( |
| 720 request_url, net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
714 request.set_method(kMethods[i]); | 721 request.set_method(kMethods[i]); |
715 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); | 722 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); |
716 request.Start(); | 723 request.Start(); |
717 } | 724 } |
718 | 725 |
719 // We inspect the result in the message list of |ipc_sender_| later. | 726 // We inspect the result in the message list of |ipc_sender_| later. |
720 base::MessageLoop::current()->RunUntilIdle(); | 727 base::MessageLoop::current()->RunUntilIdle(); |
721 | 728 |
722 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( | 729 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( |
723 &profile_, extension_id, kEventName + "/1"); | 730 &profile_, extension_id, kEventName + "/1"); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 ipc_sender_factory.GetWeakPtr()); | 829 ipc_sender_factory.GetWeakPtr()); |
823 | 830 |
824 // Install one extension that observes the final headers. | 831 // Install one extension that observes the final headers. |
825 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 832 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
826 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, | 833 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, |
827 std::string(keys::kOnSendHeadersEvent) + "/3", filter, | 834 std::string(keys::kOnSendHeadersEvent) + "/3", filter, |
828 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, | 835 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, |
829 ipc_sender_factory.GetWeakPtr()); | 836 ipc_sender_factory.GetWeakPtr()); |
830 | 837 |
831 GURL request_url("http://doesnotexist/does_not_exist.html"); | 838 GURL request_url("http://doesnotexist/does_not_exist.html"); |
832 net::URLRequest request(request_url, &delegate_, context_.get()); | 839 net::URLRequest request( |
| 840 request_url, net::DEFAULT_PRIORITY, &delegate_, context_.get()); |
833 | 841 |
834 // Initialize headers available before extensions are notified of the | 842 // Initialize headers available before extensions are notified of the |
835 // onBeforeSendHeaders event. | 843 // onBeforeSendHeaders event. |
836 HeaderModificationTest test = GetParam(); | 844 HeaderModificationTest test = GetParam(); |
837 net::HttpRequestHeaders before_headers; | 845 net::HttpRequestHeaders before_headers; |
838 for (int i = 0; i < test.before_size; ++i) | 846 for (int i = 0; i < test.before_size; ++i) |
839 before_headers.SetHeader(test.before[i].name, test.before[i].value); | 847 before_headers.SetHeader(test.before[i].name, test.before[i].value); |
840 request.SetExtraRequestHeaders(before_headers); | 848 request.SetExtraRequestHeaders(before_headers); |
841 | 849 |
842 // Gather the modifications to the headers for the respective extensions. | 850 // Gather the modifications to the headers for the respective extensions. |
(...skipping 1287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2130 EXPECT_TRUE(credentials_set); | 2138 EXPECT_TRUE(credentials_set); |
2131 EXPECT_FALSE(auth3.Empty()); | 2139 EXPECT_FALSE(auth3.Empty()); |
2132 EXPECT_EQ(username, auth1.username()); | 2140 EXPECT_EQ(username, auth1.username()); |
2133 EXPECT_EQ(password, auth1.password()); | 2141 EXPECT_EQ(password, auth1.password()); |
2134 EXPECT_EQ(1u, warning_set.size()); | 2142 EXPECT_EQ(1u, warning_set.size()); |
2135 EXPECT_TRUE(HasWarning(warning_set, "extid2")); | 2143 EXPECT_TRUE(HasWarning(warning_set, "extid2")); |
2136 EXPECT_EQ(3u, capturing_net_log.GetSize()); | 2144 EXPECT_EQ(3u, capturing_net_log.GetSize()); |
2137 } | 2145 } |
2138 | 2146 |
2139 } // namespace extensions | 2147 } // namespace extensions |
OLD | NEW |