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

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

Issue 864893003: <webview>: Fix WebRequest API crash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed tests Created 5 years, 11 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
« no previous file with comments | « no previous file | extensions/browser/api/web_request/web_request_api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | extensions/browser/api/web_request/web_request_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698