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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <queue> | 10 #include <queue> |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "extensions/common/extension_messages.h" | 49 #include "extensions/common/extension_messages.h" |
50 #include "extensions/common/features/feature.h" | 50 #include "extensions/common/features/feature.h" |
51 #include "net/base/auth.h" | 51 #include "net/base/auth.h" |
52 #include "net/base/elements_upload_data_stream.h" | 52 #include "net/base/elements_upload_data_stream.h" |
53 #include "net/base/request_priority.h" | 53 #include "net/base/request_priority.h" |
54 #include "net/base/upload_bytes_element_reader.h" | 54 #include "net/base/upload_bytes_element_reader.h" |
55 #include "net/base/upload_file_element_reader.h" | 55 #include "net/base/upload_file_element_reader.h" |
56 #include "net/dns/mock_host_resolver.h" | 56 #include "net/dns/mock_host_resolver.h" |
57 #include "net/log/net_log_with_source.h" | 57 #include "net/log/net_log_with_source.h" |
58 #include "net/log/test_net_log.h" | 58 #include "net/log/test_net_log.h" |
| 59 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" |
59 #include "net/url_request/url_request_job_factory_impl.h" | 60 #include "net/url_request/url_request_job_factory_impl.h" |
60 #include "net/url_request/url_request_test_util.h" | 61 #include "net/url_request/url_request_test_util.h" |
61 #include "testing/gtest/include/gtest/gtest-message.h" | 62 #include "testing/gtest/include/gtest/gtest-message.h" |
62 #include "testing/gtest/include/gtest/gtest.h" | 63 #include "testing/gtest/include/gtest/gtest.h" |
63 | 64 |
64 namespace helpers = extension_web_request_api_helpers; | 65 namespace helpers = extension_web_request_api_helpers; |
65 namespace keys = extension_web_request_api_constants; | 66 namespace keys = extension_web_request_api_constants; |
66 namespace web_request = extensions::api::web_request; | 67 namespace web_request = extensions::api::web_request; |
67 | 68 |
68 using base::BinaryValue; | 69 using base::BinaryValue; |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 | 243 |
243 net::URLRequestJobFactoryImpl job_factory; | 244 net::URLRequestJobFactoryImpl job_factory; |
244 job_factory.SetProtocolHandler( | 245 job_factory.SetProtocolHandler( |
245 url::kAboutScheme, | 246 url::kAboutScheme, |
246 base::WrapUnique(new about_handler::AboutProtocolHandler())); | 247 base::WrapUnique(new about_handler::AboutProtocolHandler())); |
247 context_->set_job_factory(&job_factory); | 248 context_->set_job_factory(&job_factory); |
248 | 249 |
249 GURL redirect_url("about:redirected"); | 250 GURL redirect_url("about:redirected"); |
250 GURL not_chosen_redirect_url("about:not_chosen"); | 251 GURL not_chosen_redirect_url("about:not_chosen"); |
251 | 252 |
252 std::unique_ptr<net::URLRequest> request(context_->CreateRequest( | 253 std::unique_ptr<net::URLRequest> request( |
253 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_)); | 254 context_->CreateRequest(GURL("about:blank"), net::DEFAULT_PRIORITY, |
| 255 &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
254 { | 256 { |
255 // onBeforeRequest will be dispatched twice initially. The second response - | 257 // onBeforeRequest will be dispatched twice initially. The second response - |
256 // the redirect - should win, since it has a later |install_time|. The | 258 // the redirect - should win, since it has a later |install_time|. The |
257 // redirect will dispatch another pair of onBeforeRequest. There, the first | 259 // redirect will dispatch another pair of onBeforeRequest. There, the first |
258 // response should win (later |install_time|). | 260 // response should win (later |install_time|). |
259 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 261 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
260 | 262 |
261 // Extension1 response. Arrives first, but ignored due to install_time. | 263 // Extension1 response. Arrives first, but ignored due to install_time. |
262 response = new ExtensionWebRequestEventRouter::EventResponse( | 264 response = new ExtensionWebRequestEventRouter::EventResponse( |
263 extension1_id, base::Time::FromDoubleT(1)); | 265 extension1_id, base::Time::FromDoubleT(1)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 base::RunLoop().Run(); | 298 base::RunLoop().Run(); |
297 | 299 |
298 EXPECT_TRUE(!request->is_pending()); | 300 EXPECT_TRUE(!request->is_pending()); |
299 EXPECT_EQ(net::OK, delegate_.request_status()); | 301 EXPECT_EQ(net::OK, delegate_.request_status()); |
300 EXPECT_EQ(redirect_url, request->url()); | 302 EXPECT_EQ(redirect_url, request->url()); |
301 EXPECT_EQ(2U, request->url_chain().size()); | 303 EXPECT_EQ(2U, request->url_chain().size()); |
302 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); | 304 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); |
303 } | 305 } |
304 | 306 |
305 // Now test the same thing but the extensions answer in reverse order. | 307 // Now test the same thing but the extensions answer in reverse order. |
306 std::unique_ptr<net::URLRequest> request2(context_->CreateRequest( | 308 std::unique_ptr<net::URLRequest> request2( |
307 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_)); | 309 context_->CreateRequest(GURL("about:blank"), net::DEFAULT_PRIORITY, |
| 310 &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
308 { | 311 { |
309 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 312 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
310 | 313 |
311 // Extension2 response. Arrives first, and chosen because of install_time. | 314 // Extension2 response. Arrives first, and chosen because of install_time. |
312 response = new ExtensionWebRequestEventRouter::EventResponse( | 315 response = new ExtensionWebRequestEventRouter::EventResponse( |
313 extension2_id, base::Time::FromDoubleT(2)); | 316 extension2_id, base::Time::FromDoubleT(2)); |
314 response->new_url = redirect_url; | 317 response->new_url = redirect_url; |
315 ipc_sender_.PushTask( | 318 ipc_sender_.PushTask( |
316 base::Bind(&EventHandledOnIOThread, | 319 base::Bind(&EventHandledOnIOThread, |
317 &profile_, extension2_id, kEventName, kEventName + "/2", | 320 &profile_, extension2_id, kEventName, kEventName + "/2", |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName, | 377 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName, |
375 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, | 378 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, |
376 ipc_sender_factory.GetWeakPtr()); | 379 ipc_sender_factory.GetWeakPtr()); |
377 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 380 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
378 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName, | 381 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName, |
379 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0, | 382 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0, |
380 ipc_sender_factory.GetWeakPtr()); | 383 ipc_sender_factory.GetWeakPtr()); |
381 | 384 |
382 GURL request_url("about:blank"); | 385 GURL request_url("about:blank"); |
383 std::unique_ptr<net::URLRequest> request( | 386 std::unique_ptr<net::URLRequest> request( |
384 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_)); | 387 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 388 TRAFFIC_ANNOTATION_FOR_TESTS)); |
385 | 389 |
386 // onBeforeRequest will be dispatched twice. The second response - | 390 // onBeforeRequest will be dispatched twice. The second response - |
387 // the redirect - would win, since it has a later |install_time|, but | 391 // the redirect - would win, since it has a later |install_time|, but |
388 // the first response takes precedence because cancel >> redirect. | 392 // the first response takes precedence because cancel >> redirect. |
389 GURL redirect_url("about:redirected"); | 393 GURL redirect_url("about:redirected"); |
390 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 394 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
391 | 395 |
392 // Extension1 response. Arrives first, would be ignored in principle due to | 396 // Extension1 response. Arrives first, would be ignored in principle due to |
393 // install_time but "cancel" always wins. | 397 // install_time but "cancel" always wins. |
394 response = new ExtensionWebRequestEventRouter::EventResponse( | 398 response = new ExtensionWebRequestEventRouter::EventResponse( |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 449 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
446 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, | 450 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, |
447 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, | 451 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, |
448 ipc_sender_factory.GetWeakPtr()); | 452 ipc_sender_factory.GetWeakPtr()); |
449 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 453 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
450 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName2, | 454 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName2, |
451 kEventName2 + "/1", filter, 0, 0, 0, ipc_sender_factory.GetWeakPtr()); | 455 kEventName2 + "/1", filter, 0, 0, 0, ipc_sender_factory.GetWeakPtr()); |
452 | 456 |
453 GURL request_url("about:blank"); | 457 GURL request_url("about:blank"); |
454 std::unique_ptr<net::URLRequest> request( | 458 std::unique_ptr<net::URLRequest> request( |
455 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_)); | 459 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 460 TRAFFIC_ANNOTATION_FOR_TESTS)); |
456 | 461 |
457 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 462 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
458 | 463 |
459 // Extension response for the OnBeforeRequest handler. This should not be | 464 // Extension response for the OnBeforeRequest handler. This should not be |
460 // processed because request is canceled before the handler responds. | 465 // processed because request is canceled before the handler responds. |
461 response = new ExtensionWebRequestEventRouter::EventResponse( | 466 response = new ExtensionWebRequestEventRouter::EventResponse( |
462 extension_id, base::Time::FromDoubleT(1)); | 467 extension_id, base::Time::FromDoubleT(1)); |
463 GURL redirect_url("about:redirected"); | 468 GURL redirect_url("about:redirected"); |
464 response->new_url = redirect_url; | 469 response->new_url = redirect_url; |
465 ipc_sender_.PushTask( | 470 ipc_sender_.PushTask( |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 } // namespace | 518 } // namespace |
514 | 519 |
515 void ExtensionWebRequestTest::FireURLRequestWithData( | 520 void ExtensionWebRequestTest::FireURLRequestWithData( |
516 const std::string& method, | 521 const std::string& method, |
517 const char* content_type, | 522 const char* content_type, |
518 const std::vector<char>& bytes_1, | 523 const std::vector<char>& bytes_1, |
519 const std::vector<char>& bytes_2) { | 524 const std::vector<char>& bytes_2) { |
520 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 525 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
521 GURL request_url("http://www.example.com"); | 526 GURL request_url("http://www.example.com"); |
522 std::unique_ptr<net::URLRequest> request( | 527 std::unique_ptr<net::URLRequest> request( |
523 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_)); | 528 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 529 TRAFFIC_ANNOTATION_FOR_TESTS)); |
524 request->set_method(method); | 530 request->set_method(method); |
525 if (content_type != NULL) { | 531 if (content_type != NULL) { |
526 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, | 532 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, |
527 content_type, | 533 content_type, |
528 true /* overwrite */); | 534 true /* overwrite */); |
529 } | 535 } |
530 std::vector<std::unique_ptr<net::UploadElementReader>> element_readers; | 536 std::vector<std::unique_ptr<net::UploadElementReader>> element_readers; |
531 element_readers.push_back(base::MakeUnique<net::UploadBytesElementReader>( | 537 element_readers.push_back(base::MakeUnique<net::UploadBytesElementReader>( |
532 &(bytes_1[0]), bytes_1.size())); | 538 &(bytes_1[0]), bytes_1.size())); |
533 element_readers.push_back(base::MakeUnique<net::UploadFileElementReader>( | 539 element_readers.push_back(base::MakeUnique<net::UploadFileElementReader>( |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 // Subscribe to OnBeforeRequest with requestBody requirement. | 822 // Subscribe to OnBeforeRequest with requestBody requirement. |
817 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 823 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
818 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, | 824 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, |
819 kEventName + "/1", filter, extra_info_spec, 0, 0, | 825 kEventName + "/1", filter, extra_info_spec, 0, 0, |
820 ipc_sender_factory.GetWeakPtr()); | 826 ipc_sender_factory.GetWeakPtr()); |
821 | 827 |
822 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 828 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
823 const GURL request_url("http://www.example.com"); | 829 const GURL request_url("http://www.example.com"); |
824 | 830 |
825 for (size_t i = 0; i < arraysize(kMethods); ++i) { | 831 for (size_t i = 0; i < arraysize(kMethods); ++i) { |
826 std::unique_ptr<net::URLRequest> request(context_->CreateRequest( | 832 std::unique_ptr<net::URLRequest> request( |
827 request_url, net::DEFAULT_PRIORITY, &delegate_)); | 833 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 834 TRAFFIC_ANNOTATION_FOR_TESTS)); |
828 request->set_method(kMethods[i]); | 835 request->set_method(kMethods[i]); |
829 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); | 836 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); |
830 request->Start(); | 837 request->Start(); |
831 } | 838 } |
832 | 839 |
833 // We inspect the result in the message list of |ipc_sender_| later. | 840 // We inspect the result in the message list of |ipc_sender_| later. |
834 base::RunLoop().RunUntilIdle(); | 841 base::RunLoop().RunUntilIdle(); |
835 | 842 |
836 ExtensionWebRequestEventRouter::EventListener::ID id1( | 843 ExtensionWebRequestEventRouter::EventListener::ID id1( |
837 &profile_, extension_id, kEventName + "/1", 0, 0); | 844 &profile_, extension_id, kEventName + "/1", 0, 0); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 ExtensionWebRequestEventRouter::EventListener::ID id(&profile_, extension_id, | 920 ExtensionWebRequestEventRouter::EventListener::ID id(&profile_, extension_id, |
914 kEventName + "/1", 0, 0); | 921 kEventName + "/1", 0, 0); |
915 ExtensionWebRequestEventRouter::EventListener* listener = | 922 ExtensionWebRequestEventRouter::EventListener* listener = |
916 ExtensionWebRequestEventRouter::GetInstance()->FindEventListener(id); | 923 ExtensionWebRequestEventRouter::GetInstance()->FindEventListener(id); |
917 ASSERT_NE(nullptr, listener); | 924 ASSERT_NE(nullptr, listener); |
918 EXPECT_EQ(0u, listener->blocked_requests.size()); | 925 EXPECT_EQ(0u, listener->blocked_requests.size()); |
919 | 926 |
920 // Send a request. It should block. Wait for the run loop to become idle. | 927 // Send a request. It should block. Wait for the run loop to become idle. |
921 GURL request_url("about:blank"); | 928 GURL request_url("about:blank"); |
922 std::unique_ptr<net::URLRequest> request( | 929 std::unique_ptr<net::URLRequest> request( |
923 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_)); | 930 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 931 TRAFFIC_ANNOTATION_FOR_TESTS)); |
924 // Extension response for OnErrorOccurred: Terminate the message loop. | 932 // Extension response for OnErrorOccurred: Terminate the message loop. |
925 { | 933 { |
926 base::RunLoop run_loop; | 934 base::RunLoop run_loop; |
927 ipc_sender_.PushTask( | 935 ipc_sender_.PushTask( |
928 base::Bind(base::IgnoreResult(&base::SingleThreadTaskRunner::PostTask), | 936 base::Bind(base::IgnoreResult(&base::SingleThreadTaskRunner::PostTask), |
929 base::ThreadTaskRunnerHandle::Get(), FROM_HERE, | 937 base::ThreadTaskRunnerHandle::Get(), FROM_HERE, |
930 run_loop.QuitWhenIdleClosure())); | 938 run_loop.QuitWhenIdleClosure())); |
931 request->Start(); | 939 request->Start(); |
932 run_loop.Run(); | 940 run_loop.Run(); |
933 } | 941 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1046 | 1054 |
1047 // Install one extension that observes the final headers. | 1055 // Install one extension that observes the final headers. |
1048 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 1056 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
1049 &profile_, extension3_id, extension3_id, events::FOR_TEST, | 1057 &profile_, extension3_id, extension3_id, events::FOR_TEST, |
1050 keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3", | 1058 keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3", |
1051 filter, ExtraInfoSpec::REQUEST_HEADERS, 0, 0, | 1059 filter, ExtraInfoSpec::REQUEST_HEADERS, 0, 0, |
1052 ipc_sender_factory.GetWeakPtr()); | 1060 ipc_sender_factory.GetWeakPtr()); |
1053 | 1061 |
1054 GURL request_url("http://doesnotexist/does_not_exist.html"); | 1062 GURL request_url("http://doesnotexist/does_not_exist.html"); |
1055 std::unique_ptr<net::URLRequest> request( | 1063 std::unique_ptr<net::URLRequest> request( |
1056 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_)); | 1064 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_, |
| 1065 TRAFFIC_ANNOTATION_FOR_TESTS)); |
1057 | 1066 |
1058 // Initialize headers available before extensions are notified of the | 1067 // Initialize headers available before extensions are notified of the |
1059 // onBeforeSendHeaders event. | 1068 // onBeforeSendHeaders event. |
1060 HeaderModificationTest test = GetParam(); | 1069 HeaderModificationTest test = GetParam(); |
1061 net::HttpRequestHeaders before_headers; | 1070 net::HttpRequestHeaders before_headers; |
1062 for (int i = 0; i < test.before_size; ++i) | 1071 for (int i = 0; i < test.before_size; ++i) |
1063 before_headers.SetHeader(test.before[i].name, test.before[i].value); | 1072 before_headers.SetHeader(test.before[i].name, test.before[i].value); |
1064 request->SetExtraRequestHeaders(before_headers); | 1073 request->SetExtraRequestHeaders(before_headers); |
1065 | 1074 |
1066 // Gather the modifications to the headers for the respective extensions. | 1075 // Gather the modifications to the headers for the respective extensions. |
(...skipping 1407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2474 EXPECT_TRUE(credentials_set); | 2483 EXPECT_TRUE(credentials_set); |
2475 EXPECT_FALSE(auth3.Empty()); | 2484 EXPECT_FALSE(auth3.Empty()); |
2476 EXPECT_EQ(username, auth1.username()); | 2485 EXPECT_EQ(username, auth1.username()); |
2477 EXPECT_EQ(password, auth1.password()); | 2486 EXPECT_EQ(password, auth1.password()); |
2478 EXPECT_EQ(1u, warning_set.size()); | 2487 EXPECT_EQ(1u, warning_set.size()); |
2479 EXPECT_TRUE(HasWarning(warning_set, "extid2")); | 2488 EXPECT_TRUE(HasWarning(warning_set, "extid2")); |
2480 EXPECT_EQ(3u, capturing_net_log.GetSize()); | 2489 EXPECT_EQ(3u, capturing_net_log.GetSize()); |
2481 } | 2490 } |
2482 | 2491 |
2483 } // namespace extensions | 2492 } // namespace extensions |
OLD | NEW |