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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 // blocking events (redirection) by choosing the response from the | 217 // blocking events (redirection) by choosing the response from the |
218 // most-recently-installed extension. | 218 // most-recently-installed extension. |
219 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { | 219 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { |
220 std::string extension1_id("1"); | 220 std::string extension1_id("1"); |
221 std::string extension2_id("2"); | 221 std::string extension2_id("2"); |
222 ExtensionWebRequestEventRouter::RequestFilter filter; | 222 ExtensionWebRequestEventRouter::RequestFilter filter; |
223 const std::string kEventName(web_request::OnBeforeRequest::kEventName); | 223 const std::string kEventName(web_request::OnBeforeRequest::kEventName); |
224 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 224 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
225 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 225 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
226 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", | 226 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", |
227 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 227 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
228 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 228 ipc_sender_factory.GetWeakPtr()); |
229 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 229 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
230 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", | 230 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", |
231 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 231 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
232 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 232 ipc_sender_factory.GetWeakPtr()); |
233 | 233 |
234 net::URLRequestJobFactoryImpl job_factory; | 234 net::URLRequestJobFactoryImpl job_factory; |
235 job_factory.SetProtocolHandler( | 235 job_factory.SetProtocolHandler( |
236 chrome::kAboutScheme, | 236 chrome::kAboutScheme, |
237 new chrome_browser_net::AboutProtocolHandler()); | 237 new chrome_browser_net::AboutProtocolHandler()); |
238 context_->set_job_factory(&job_factory); | 238 context_->set_job_factory(&job_factory); |
239 | 239 |
240 GURL redirect_url("about:redirected"); | 240 GURL redirect_url("about:redirected"); |
241 GURL not_chosen_redirect_url("about:not_chosen"); | 241 GURL not_chosen_redirect_url("about:not_chosen"); |
242 | 242 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 // Test that a request is canceled if this is requested by any extension | 352 // Test that a request is canceled if this is requested by any extension |
353 // regardless whether it is the extension with the highest precedence. | 353 // regardless whether it is the extension with the highest precedence. |
354 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceCancel) { | 354 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceCancel) { |
355 std::string extension1_id("1"); | 355 std::string extension1_id("1"); |
356 std::string extension2_id("2"); | 356 std::string extension2_id("2"); |
357 ExtensionWebRequestEventRouter::RequestFilter filter; | 357 ExtensionWebRequestEventRouter::RequestFilter filter; |
358 const std::string kEventName(web_request::OnBeforeRequest::kEventName); | 358 const std::string kEventName(web_request::OnBeforeRequest::kEventName); |
359 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 359 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
360 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 360 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
361 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", | 361 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", |
362 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 362 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
363 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 363 ipc_sender_factory.GetWeakPtr()); |
364 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 364 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
365 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", | 365 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", |
366 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 366 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
367 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 367 ipc_sender_factory.GetWeakPtr()); |
368 | 368 |
369 GURL request_url("about:blank"); | 369 GURL request_url("about:blank"); |
370 net::URLRequest request(request_url, &delegate_, context_.get()); | 370 net::URLRequest request(request_url, &delegate_, context_.get()); |
371 | 371 |
372 // onBeforeRequest will be dispatched twice. The second response - | 372 // onBeforeRequest will be dispatched twice. The second response - |
373 // the redirect - would win, since it has a later |install_time|, but | 373 // the redirect - would win, since it has a later |install_time|, but |
374 // the first response takes precedence because cancel >> redirect. | 374 // the first response takes precedence because cancel >> redirect. |
375 GURL redirect_url("about:redirected"); | 375 GURL redirect_url("about:redirected"); |
376 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 376 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
377 | 377 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 | 420 |
421 std::string extension_id("1"); | 421 std::string extension_id("1"); |
422 ExtensionWebRequestEventRouter::RequestFilter filter; | 422 ExtensionWebRequestEventRouter::RequestFilter filter; |
423 | 423 |
424 // Subscribe to OnBeforeRequest and OnErrorOccurred. | 424 // Subscribe to OnBeforeRequest and OnErrorOccurred. |
425 const std::string kEventName(web_request::OnBeforeRequest::kEventName); | 425 const std::string kEventName(web_request::OnBeforeRequest::kEventName); |
426 const std::string kEventName2(web_request::OnErrorOccurred::kEventName); | 426 const std::string kEventName2(web_request::OnErrorOccurred::kEventName); |
427 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 427 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
428 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 428 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
429 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 429 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
430 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 430 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
431 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 431 ipc_sender_factory.GetWeakPtr()); |
432 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 432 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
433 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", | 433 &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", |
434 filter, 0, -1, MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 434 filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); |
435 | 435 |
436 GURL request_url("about:blank"); | 436 GURL request_url("about:blank"); |
437 net::URLRequest request(request_url, &delegate_, context_.get()); | 437 net::URLRequest request(request_url, &delegate_, context_.get()); |
438 | 438 |
439 ExtensionWebRequestEventRouter::EventResponse* response = NULL; | 439 ExtensionWebRequestEventRouter::EventResponse* response = NULL; |
440 | 440 |
441 // Extension response for the OnBeforeRequest handler. This should not be | 441 // Extension response for the OnBeforeRequest handler. This should not be |
442 // processed because request is canceled before the handler responds. | 442 // processed because request is canceled before the handler responds. |
443 response = new ExtensionWebRequestEventRouter::EventResponse( | 443 response = new ExtensionWebRequestEventRouter::EventResponse( |
444 extension_id, base::Time::FromDoubleT(1)); | 444 extension_id, base::Time::FromDoubleT(1)); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 const std::string string_spec_no_post("blocking"); | 613 const std::string string_spec_no_post("blocking"); |
614 int extra_info_spec_empty = 0; | 614 int extra_info_spec_empty = 0; |
615 int extra_info_spec_body = 0; | 615 int extra_info_spec_body = 0; |
616 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 616 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
617 | 617 |
618 // Part 1. | 618 // Part 1. |
619 // Subscribe to OnBeforeRequest with requestBody requirement. | 619 // Subscribe to OnBeforeRequest with requestBody requirement. |
620 ASSERT_TRUE(GenerateInfoSpec(string_spec_post, &extra_info_spec_body)); | 620 ASSERT_TRUE(GenerateInfoSpec(string_spec_post, &extra_info_spec_body)); |
621 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 621 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
622 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 622 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
623 filter, extra_info_spec_body, -1, MSG_ROUTING_NONE, -1, | 623 filter, extra_info_spec_body, -1, -1, ipc_sender_factory.GetWeakPtr()); |
624 ipc_sender_factory.GetWeakPtr()); | |
625 | 624 |
626 FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); | 625 FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); |
627 | 626 |
628 // We inspect the result in the message list of |ipc_sender_| later. | 627 // We inspect the result in the message list of |ipc_sender_| later. |
629 base::MessageLoop::current()->RunUntilIdle(); | 628 base::MessageLoop::current()->RunUntilIdle(); |
630 | 629 |
631 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( | 630 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( |
632 &profile_, extension_id, kEventName + "/1"); | 631 &profile_, extension_id, kEventName + "/1"); |
633 | 632 |
634 // Part 2. | 633 // Part 2. |
635 // Now subscribe to OnBeforeRequest *without* the requestBody requirement. | 634 // Now subscribe to OnBeforeRequest *without* the requestBody requirement. |
636 ASSERT_TRUE( | 635 ASSERT_TRUE( |
637 GenerateInfoSpec(string_spec_no_post, &extra_info_spec_empty)); | 636 GenerateInfoSpec(string_spec_no_post, &extra_info_spec_empty)); |
638 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 637 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
639 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 638 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
640 filter, extra_info_spec_empty, -1, MSG_ROUTING_NONE, -1, | 639 filter, extra_info_spec_empty, -1, -1, ipc_sender_factory.GetWeakPtr()); |
641 ipc_sender_factory.GetWeakPtr()); | |
642 | 640 |
643 FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); | 641 FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); |
644 | 642 |
645 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( | 643 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( |
646 &profile_, extension_id, kEventName + "/1"); | 644 &profile_, extension_id, kEventName + "/1"); |
647 | 645 |
648 // Subscribe to OnBeforeRequest with requestBody requirement. | 646 // Subscribe to OnBeforeRequest with requestBody requirement. |
649 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 647 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
650 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 648 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
651 filter, extra_info_spec_body, -1, MSG_ROUTING_NONE, -1, | 649 filter, extra_info_spec_body, -1, -1, ipc_sender_factory.GetWeakPtr()); |
652 ipc_sender_factory.GetWeakPtr()); | |
653 | 650 |
654 // Part 3. | 651 // Part 3. |
655 // Now send a POST request with body which is not parseable as a form. | 652 // Now send a POST request with body which is not parseable as a form. |
656 FireURLRequestWithData(kMethodPost, NULL /*no header*/, plain_1, plain_2); | 653 FireURLRequestWithData(kMethodPost, NULL /*no header*/, plain_1, plain_2); |
657 | 654 |
658 // Part 4. | 655 // Part 4. |
659 // Now send a PUT request with the same body as above. | 656 // Now send a PUT request with the same body as above. |
660 FireURLRequestWithData(kMethodPut, NULL /*no header*/, plain_1, plain_2); | 657 FireURLRequestWithData(kMethodPut, NULL /*no header*/, plain_1, plain_2); |
661 | 658 |
662 base::MessageLoop::current()->RunUntilIdle(); | 659 base::MessageLoop::current()->RunUntilIdle(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 const std::string kEventName(web_request::OnBeforeRequest::kEventName); | 697 const std::string kEventName(web_request::OnBeforeRequest::kEventName); |
701 ExtensionWebRequestEventRouter::RequestFilter filter; | 698 ExtensionWebRequestEventRouter::RequestFilter filter; |
702 const std::string extension_id("1"); | 699 const std::string extension_id("1"); |
703 int extra_info_spec = 0; | 700 int extra_info_spec = 0; |
704 ASSERT_TRUE(GenerateInfoSpec("blocking,requestBody", &extra_info_spec)); | 701 ASSERT_TRUE(GenerateInfoSpec("blocking,requestBody", &extra_info_spec)); |
705 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 702 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
706 | 703 |
707 // Subscribe to OnBeforeRequest with requestBody requirement. | 704 // Subscribe to OnBeforeRequest with requestBody requirement. |
708 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 705 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
709 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", | 706 &profile_, extension_id, extension_id, kEventName, kEventName + "/1", |
710 filter, extra_info_spec, -1, MSG_ROUTING_NONE, -1, | 707 filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); |
711 ipc_sender_factory.GetWeakPtr()); | |
712 | 708 |
713 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. | 709 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. |
714 const GURL request_url("http://www.example.com"); | 710 const GURL request_url("http://www.example.com"); |
715 | 711 |
716 for (size_t i = 0; i < arraysize(kMethods); ++i) { | 712 for (size_t i = 0; i < arraysize(kMethods); ++i) { |
717 net::URLRequest request(request_url, &delegate_, context_.get()); | 713 net::URLRequest request(request_url, &delegate_, context_.get()); |
718 request.set_method(kMethods[i]); | 714 request.set_method(kMethods[i]); |
719 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); | 715 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); |
720 request.Start(); | 716 request.Start(); |
721 } | 717 } |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 std::string extension2_id("2"); | 807 std::string extension2_id("2"); |
812 std::string extension3_id("3"); | 808 std::string extension3_id("3"); |
813 ExtensionWebRequestEventRouter::RequestFilter filter; | 809 ExtensionWebRequestEventRouter::RequestFilter filter; |
814 const std::string kEventName(keys::kOnBeforeSendHeadersEvent); | 810 const std::string kEventName(keys::kOnBeforeSendHeadersEvent); |
815 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 811 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
816 | 812 |
817 // Install two extensions that can modify headers. Extension 2 has | 813 // Install two extensions that can modify headers. Extension 2 has |
818 // higher precedence than extension 1. | 814 // higher precedence than extension 1. |
819 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 815 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
820 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", | 816 &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", |
821 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 817 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
822 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 818 ipc_sender_factory.GetWeakPtr()); |
823 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 819 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
824 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", | 820 &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", |
825 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, | 821 filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, |
826 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 822 ipc_sender_factory.GetWeakPtr()); |
827 | 823 |
828 // Install one extension that observes the final headers. | 824 // Install one extension that observes the final headers. |
829 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 825 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
830 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, | 826 &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, |
831 std::string(keys::kOnSendHeadersEvent) + "/3", filter, | 827 std::string(keys::kOnSendHeadersEvent) + "/3", filter, |
832 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, | 828 ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, |
833 MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); | 829 ipc_sender_factory.GetWeakPtr()); |
834 | 830 |
835 GURL request_url("http://doesnotexist/does_not_exist.html"); | 831 GURL request_url("http://doesnotexist/does_not_exist.html"); |
836 net::URLRequest request(request_url, &delegate_, context_.get()); | 832 net::URLRequest request(request_url, &delegate_, context_.get()); |
837 | 833 |
838 // Initialize headers available before extensions are notified of the | 834 // Initialize headers available before extensions are notified of the |
839 // onBeforeSendHeaders event. | 835 // onBeforeSendHeaders event. |
840 HeaderModificationTest test = GetParam(); | 836 HeaderModificationTest test = GetParam(); |
841 net::HttpRequestHeaders before_headers; | 837 net::HttpRequestHeaders before_headers; |
842 for (int i = 0; i < test.before_size; ++i) | 838 for (int i = 0; i < test.before_size; ++i) |
843 before_headers.SetHeader(test.before[i].name, test.before[i].value); | 839 before_headers.SetHeader(test.before[i].name, test.before[i].value); |
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2134 EXPECT_TRUE(credentials_set); | 2130 EXPECT_TRUE(credentials_set); |
2135 EXPECT_FALSE(auth3.Empty()); | 2131 EXPECT_FALSE(auth3.Empty()); |
2136 EXPECT_EQ(username, auth1.username()); | 2132 EXPECT_EQ(username, auth1.username()); |
2137 EXPECT_EQ(password, auth1.password()); | 2133 EXPECT_EQ(password, auth1.password()); |
2138 EXPECT_EQ(1u, warning_set.size()); | 2134 EXPECT_EQ(1u, warning_set.size()); |
2139 EXPECT_TRUE(HasWarning(warning_set, "extid2")); | 2135 EXPECT_TRUE(HasWarning(warning_set, "extid2")); |
2140 EXPECT_EQ(3u, capturing_net_log.GetSize()); | 2136 EXPECT_EQ(3u, capturing_net_log.GetSize()); |
2141 } | 2137 } |
2142 | 2138 |
2143 } // namespace extensions | 2139 } // namespace extensions |
OLD | NEW |