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(GURL("about:blank"), |
| 245 net::DEFAULT_PRIORITY, |
| 246 &delegate_, |
| 247 context_.get(), |
| 248 network_delegate_.get()); |
244 { | 249 { |
245 // onBeforeRequest will be dispatched twice initially. The second response - | 250 // onBeforeRequest will be dispatched twice initially. The second response - |
246 // the redirect - should win, since it has a later |install_time|. The | 251 // the redirect - should win, since it has a later |install_time|. The |
247 // redirect will dispatch another pair of onBeforeRequest. There, the first | 252 // redirect will dispatch another pair of onBeforeRequest. There, the first |
248 // response should win (later |install_time|). | 253 // response should win (later |install_time|). |
249 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 254 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
250 | 255 |
251 // Extension1 response. Arrives first, but ignored due to install_time. | 256 // Extension1 response. Arrives first, but ignored due to install_time. |
252 response = new ExtensionWebRequestEventRouter::EventResponse( | 257 response = new ExtensionWebRequestEventRouter::EventResponse( |
253 extension1_id, base::Time::FromDoubleT(1)); | 258 extension1_id, base::Time::FromDoubleT(1)); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 | 292 |
288 EXPECT_TRUE(!request.is_pending()); | 293 EXPECT_TRUE(!request.is_pending()); |
289 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 294 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); |
290 EXPECT_EQ(0, request.status().error()); | 295 EXPECT_EQ(0, request.status().error()); |
291 EXPECT_EQ(redirect_url, request.url()); | 296 EXPECT_EQ(redirect_url, request.url()); |
292 EXPECT_EQ(2U, request.url_chain().size()); | 297 EXPECT_EQ(2U, request.url_chain().size()); |
293 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); | 298 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); |
294 } | 299 } |
295 | 300 |
296 // Now test the same thing but the extensions answer in reverse order. | 301 // Now test the same thing but the extensions answer in reverse order. |
297 net::URLRequest request2(GURL("about:blank"), &delegate_, context_.get()); | 302 net::URLRequest request2(GURL("about:blank"), |
| 303 net::DEFAULT_PRIORITY, |
| 304 &delegate_, |
| 305 context_.get(), |
| 306 network_delegate_.get()); |
298 { | 307 { |
299 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 308 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
300 | 309 |
301 // Extension2 response. Arrives first, and chosen because of install_time. | 310 // Extension2 response. Arrives first, and chosen because of install_time. |
302 response = new ExtensionWebRequestEventRouter::EventResponse( | 311 response = new ExtensionWebRequestEventRouter::EventResponse( |
303 extension2_id, base::Time::FromDoubleT(2)); | 312 extension2_id, base::Time::FromDoubleT(2)); |
304 response->new_url = redirect_url; | 313 response->new_url = redirect_url; |
305 ipc_sender_.PushTask( | 314 ipc_sender_.PushTask( |
306 base::Bind(&EventHandledOnIOThread, | 315 base::Bind(&EventHandledOnIOThread, |
307 &profile_, extension2_id, kEventName, kEventName + "/2", | 316 &profile_, extension2_id, kEventName, kEventName + "/2", |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 369 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
361 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", | 370 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", |
362 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 371 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
363 ipc_sender_factory.GetWeakPtr()); | 372 ipc_sender_factory.GetWeakPtr()); |
364 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 373 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
365 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", | 374 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", |
366 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 375 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
367 ipc_sender_factory.GetWeakPtr()); | 376 ipc_sender_factory.GetWeakPtr()); |
368 | 377 |
369 GURL request_url("about:blank"); | 378 GURL request_url("about:blank"); |
370 net::URLRequest request(request_url, &delegate_, context_.get()); | 379 net::URLRequest request(request_url, |
| 380 net::DEFAULT_PRIORITY, |
| 381 &delegate_, |
| 382 context_.get(), |
| 383 network_delegate_.get()); |
371 | 384 |
372 // onBeforeRequest will be dispatched twice. The second response - | 385 // onBeforeRequest will be dispatched twice. The second response - |
373 // the redirect - would win, since it has a later |install_time|, but | 386 // the redirect - would win, since it has a later |install_time|, but |
374 // the first response takes precedence because cancel >> redirect. | 387 // the first response takes precedence because cancel >> redirect. |
375 GURL redirect_url("about:redirected"); | 388 GURL redirect_url("about:redirected"); |
376 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 389 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
377 | 390 |
378 // Extension1 response. Arrives first, would be ignored in principle due to | 391 // Extension1 response. Arrives first, would be ignored in principle due to |
379 // install_time but "cancel" always wins. | 392 // install_time but "cancel" always wins. |
380 response = new ExtensionWebRequestEventRouter::EventResponse( | 393 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_); | 440 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
428 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 441 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
429 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 442 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
430 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, | 443 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
431 ipc_sender_factory.GetWeakPtr()); | 444 ipc_sender_factory.GetWeakPtr()); |
432 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 445 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
433 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", | 446 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", |
434 filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); | 447 filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); |
435 | 448 |
436 GURL request_url("about:blank"); | 449 GURL request_url("about:blank"); |
437 net::URLRequest request(request_url, &delegate_, context_.get()); | 450 net::URLRequest request(request_url, |
| 451 net::DEFAULT_PRIORITY, |
| 452 &delegate_, |
| 453 context_.get(), |
| 454 network_delegate_.get()); |
438 | 455 |
439 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 456 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
440 | 457 |
441 // Extension response for the OnBeforeRequest handler. This should not be | 458 // Extension response for the OnBeforeRequest handler. This should not be |
442 // processed because request is canceled before the handler responds. | 459 // processed because request is canceled before the handler responds. |
443 response = new ExtensionWebRequestEventRouter::EventResponse( | 460 response = new ExtensionWebRequestEventRouter::EventResponse( |
444 extension_id, base::Time::FromDoubleT(1)); | 461 extension_id, base::Time::FromDoubleT(1)); |
445 GURL redirect_url("about:redirected"); | 462 GURL redirect_url("about:redirected"); |
446 response->new_url = redirect_url; | 463 response->new_url = redirect_url; |
447 ipc_sender_.PushTask( | 464 ipc_sender_.PushTask( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 | 507 |
491 } // namespace | 508 } // namespace |
492 | 509 |
493 void ExtensionWebRequestTest::FireURLRequestWithData( | 510 void ExtensionWebRequestTest::FireURLRequestWithData( |
494 const std::string& method, | 511 const std::string& method, |
495 const char* content_type, | 512 const char* content_type, |
496 const std::vector<char>& bytes_1, | 513 const std::vector<char>& bytes_1, |
497 const std::vector<char>& bytes_2) { | 514 const std::vector<char>& bytes_2) { |
498 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 515 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
499 GURL request_url("http://www.example.com"); | 516 GURL request_url("http://www.example.com"); |
500 net::URLRequest request(request_url, &delegate_, context_.get()); | 517 net::URLRequest request(request_url, |
| 518 net::DEFAULT_PRIORITY, |
| 519 &delegate_, |
| 520 context_.get(), |
| 521 network_delegate_.get()); |
501 request.set_method(method); | 522 request.set_method(method); |
502 if (content_type != NULL) | 523 if (content_type != NULL) |
503 request.SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, | 524 request.SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, |
504 content_type, | 525 content_type, |
505 true /* overwrite */); | 526 true /* overwrite */); |
506 ScopedVector<net::UploadElementReader> element_readers; | 527 ScopedVector<net::UploadElementReader> element_readers; |
507 element_readers.push_back(new net::UploadBytesElementReader( | 528 element_readers.push_back(new net::UploadBytesElementReader( |
508 &(bytes_1[0]), bytes_1.size())); | 529 &(bytes_1[0]), bytes_1.size())); |
509 element_readers.push_back( | 530 element_readers.push_back( |
510 new net::UploadFileElementReader(base::MessageLoopProxy::current().get(), | 531 new net::UploadFileElementReader(base::MessageLoopProxy::current().get(), |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 | 724 |
704 // Subscribe to OnBeforeRequest with requestBody requirement. | 725 // Subscribe to OnBeforeRequest with requestBody requirement. |
705 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 726 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
706 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 727 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
707 filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); | 728 filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); |
708 | 729 |
709 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 730 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
710 const GURL request_url("http://www.example.com"); | 731 const GURL request_url("http://www.example.com"); |
711 | 732 |
712 for (size_t i = 0; i < arraysize(kMethods); ++i) { | 733 for (size_t i = 0; i < arraysize(kMethods); ++i) { |
713 net::URLRequest request(request_url, &delegate_, context_.get()); | 734 net::URLRequest request(request_url, |
| 735 net::DEFAULT_PRIORITY, |
| 736 &delegate_, |
| 737 context_.get(), |
| 738 network_delegate_.get()); |
714 request.set_method(kMethods[i]); | 739 request.set_method(kMethods[i]); |
715 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); | 740 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); |
716 request.Start(); | 741 request.Start(); |
717 } | 742 } |
718 | 743 |
719 // We inspect the result in the message list of |ipc_sender_| later. | 744 // We inspect the result in the message list of |ipc_sender_| later. |
720 base::MessageLoop::current()->RunUntilIdle(); | 745 base::MessageLoop::current()->RunUntilIdle(); |
721 | 746 |
722 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( | 747 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( |
723 &profile_, extension_id, kEventName + "/1"); | 748 &profile_, extension_id, kEventName + "/1"); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 ipc_sender_factory.GetWeakPtr()); | 847 ipc_sender_factory.GetWeakPtr()); |
823 | 848 |
824 // Install one extension that observes the final headers. | 849 // Install one extension that observes the final headers. |
825 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 850 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
826 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, | 851 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, |
827 std::string(keys::kOnSendHeadersEvent) + "/3", filter, | 852 std::string(keys::kOnSendHeadersEvent) + "/3", filter, |
828 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, | 853 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, |
829 ipc_sender_factory.GetWeakPtr()); | 854 ipc_sender_factory.GetWeakPtr()); |
830 | 855 |
831 GURL request_url("http://doesnotexist/does_not_exist.html"); | 856 GURL request_url("http://doesnotexist/does_not_exist.html"); |
832 net::URLRequest request(request_url, &delegate_, context_.get()); | 857 net::URLRequest request(request_url, |
| 858 net::DEFAULT_PRIORITY, |
| 859 &delegate_, |
| 860 context_.get(), |
| 861 network_delegate_.get()); |
833 | 862 |
834 // Initialize headers available before extensions are notified of the | 863 // Initialize headers available before extensions are notified of the |
835 // onBeforeSendHeaders event. | 864 // onBeforeSendHeaders event. |
836 HeaderModificationTest test = GetParam(); | 865 HeaderModificationTest test = GetParam(); |
837 net::HttpRequestHeaders before_headers; | 866 net::HttpRequestHeaders before_headers; |
838 for (int i = 0; i < test.before_size; ++i) | 867 for (int i = 0; i < test.before_size; ++i) |
839 before_headers.SetHeader(test.before[i].name, test.before[i].value); | 868 before_headers.SetHeader(test.before[i].name, test.before[i].value); |
840 request.SetExtraRequestHeaders(before_headers); | 869 request.SetExtraRequestHeaders(before_headers); |
841 | 870 |
842 // Gather the modifications to the headers for the respective extensions. | 871 // 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); | 2159 EXPECT_TRUE(credentials_set); |
2131 EXPECT_FALSE(auth3.Empty()); | 2160 EXPECT_FALSE(auth3.Empty()); |
2132 EXPECT_EQ(username, auth1.username()); | 2161 EXPECT_EQ(username, auth1.username()); |
2133 EXPECT_EQ(password, auth1.password()); | 2162 EXPECT_EQ(password, auth1.password()); |
2134 EXPECT_EQ(1u, warning_set.size()); | 2163 EXPECT_EQ(1u, warning_set.size()); |
2135 EXPECT_TRUE(HasWarning(warning_set, "extid2")); | 2164 EXPECT_TRUE(HasWarning(warning_set, "extid2")); |
2136 EXPECT_EQ(3u, capturing_net_log.GetSize()); | 2165 EXPECT_EQ(3u, capturing_net_log.GetSize()); |
2137 } | 2166 } |
2138 | 2167 |
2139 } // namespace extensions | 2168 } // namespace extensions |
OLD | NEW |