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