Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1790)

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc

Issue 23514016: <webview>: Cleanup WebRequest event listeners when embedder destroyed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed WebRequest unit test Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/web_request/web_request_api.cc ('k') | chrome/browser/extensions/extension_renderer_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698