| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 base::SplitString(url.path(), ',', &parts); | 453 base::SplitString(url.path(), ',', &parts); |
| 454 | 454 |
| 455 if (parts.size() != 2) | 455 if (parts.size() != 2) |
| 456 return false; | 456 return false; |
| 457 | 457 |
| 458 *text = parts[0]; | 458 *text = parts[0]; |
| 459 return base::StringToInt(parts[1], count); | 459 return base::StringToInt(parts[1], count); |
| 460 } | 460 } |
| 461 }; | 461 }; |
| 462 | 462 |
| 463 class TestURLRequestJobFactory : public net::URLRequestJobFactory { |
| 464 public: |
| 465 explicit TestURLRequestJobFactory(ResourceDispatcherHostTest* test_fixture) : |
| 466 test_fixture_(test_fixture), |
| 467 delay_start_(false), |
| 468 delay_complete_(false), |
| 469 network_start_notification_(false), |
| 470 url_request_jobs_created_count_(0) { |
| 471 } |
| 472 |
| 473 void HandleScheme(const std::string& scheme) { |
| 474 supported_schemes_.insert(scheme); |
| 475 } |
| 476 |
| 477 int url_request_jobs_created_count() const { |
| 478 return url_request_jobs_created_count_; |
| 479 } |
| 480 |
| 481 void SetDelayedStartJobGeneration(bool delay_job_start) { |
| 482 delay_start_ = delay_job_start; |
| 483 } |
| 484 |
| 485 void SetDelayedCompleteJobGeneration(bool delay_job_complete) { |
| 486 delay_complete_ = delay_job_complete; |
| 487 } |
| 488 |
| 489 void SetNetworkStartNotificationJobGeneration(bool notification) { |
| 490 network_start_notification_ = notification; |
| 491 } |
| 492 |
| 493 virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( |
| 494 const std::string& scheme, |
| 495 net::URLRequest* request, |
| 496 net::NetworkDelegate* network_delegate) const OVERRIDE; |
| 497 |
| 498 virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE { |
| 499 return supported_schemes_.count(scheme) > 0; |
| 500 } |
| 501 |
| 502 virtual bool IsHandledURL(const GURL& url) const OVERRIDE { |
| 503 return supported_schemes_.count(url.scheme()) > 0; |
| 504 } |
| 505 |
| 506 virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE { |
| 507 return false; |
| 508 } |
| 509 |
| 510 private: |
| 511 ResourceDispatcherHostTest* test_fixture_; |
| 512 bool delay_start_; |
| 513 bool delay_complete_; |
| 514 bool network_start_notification_; |
| 515 mutable int url_request_jobs_created_count_; |
| 516 std::set<std::string> supported_schemes_; |
| 517 |
| 518 DISALLOW_COPY_AND_ASSIGN(TestURLRequestJobFactory); |
| 519 }; |
| 520 |
| 463 // Associated with an URLRequest to determine if the URLRequest gets deleted. | 521 // Associated with an URLRequest to determine if the URLRequest gets deleted. |
| 464 class TestUserData : public base::SupportsUserData::Data { | 522 class TestUserData : public base::SupportsUserData::Data { |
| 465 public: | 523 public: |
| 466 explicit TestUserData(bool* was_deleted) | 524 explicit TestUserData(bool* was_deleted) |
| 467 : was_deleted_(was_deleted) { | 525 : was_deleted_(was_deleted) { |
| 468 } | 526 } |
| 469 | 527 |
| 470 virtual ~TestUserData() { | 528 virtual ~TestUserData() { |
| 471 *was_deleted_ = true; | 529 *was_deleted_ = true; |
| 472 } | 530 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 public IPC::Sender { | 714 public IPC::Sender { |
| 657 public: | 715 public: |
| 658 ResourceDispatcherHostTest() | 716 ResourceDispatcherHostTest() |
| 659 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 717 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 660 old_factory_(NULL), | 718 old_factory_(NULL), |
| 661 send_data_received_acks_(false) { | 719 send_data_received_acks_(false) { |
| 662 browser_context_.reset(new TestBrowserContext()); | 720 browser_context_.reset(new TestBrowserContext()); |
| 663 BrowserContext::EnsureResourceContextInitialized(browser_context_.get()); | 721 BrowserContext::EnsureResourceContextInitialized(browser_context_.get()); |
| 664 base::RunLoop().RunUntilIdle(); | 722 base::RunLoop().RunUntilIdle(); |
| 665 filter_ = MakeForwardingFilter(); | 723 filter_ = MakeForwardingFilter(); |
| 666 ResourceContext* resource_context = browser_context_->GetResourceContext(); | 724 // TODO(cbentzel): Better way to get URLRequestContext? |
| 667 resource_context->GetRequestContext()->set_network_delegate( | 725 net::URLRequestContext* request_context = |
| 668 &network_delegate_); | 726 browser_context_->GetResourceContext()->GetRequestContext(); |
| 727 job_factory_.reset(new TestURLRequestJobFactory(this)); |
| 728 request_context->set_job_factory(job_factory_.get()); |
| 729 request_context->set_network_delegate(&network_delegate_); |
| 669 } | 730 } |
| 670 | 731 |
| 671 // IPC::Sender implementation | 732 // IPC::Sender implementation |
| 672 virtual bool Send(IPC::Message* msg) OVERRIDE { | 733 virtual bool Send(IPC::Message* msg) OVERRIDE { |
| 673 accum_.AddMessage(*msg); | 734 accum_.AddMessage(*msg); |
| 674 | 735 |
| 675 if (send_data_received_acks_ && | 736 if (send_data_received_acks_ && |
| 676 msg->type() == ResourceMsg_DataReceived::ID) { | 737 msg->type() == ResourceMsg_DataReceived::ID) { |
| 677 GenerateDataReceivedACK(*msg); | 738 GenerateDataReceivedACK(*msg); |
| 678 } | 739 } |
| 679 | 740 |
| 680 if (wait_for_request_complete_loop_ && | 741 if (wait_for_request_complete_loop_ && |
| 681 msg->type() == ResourceMsg_RequestComplete::ID) { | 742 msg->type() == ResourceMsg_RequestComplete::ID) { |
| 682 wait_for_request_complete_loop_->Quit(); | 743 wait_for_request_complete_loop_->Quit(); |
| 683 } | 744 } |
| 684 | 745 |
| 685 // Do not release handles in it yet; the accumulator owns them now. | 746 // Do not release handles in it yet; the accumulator owns them now. |
| 686 delete msg; | 747 delete msg; |
| 687 return true; | 748 return true; |
| 688 } | 749 } |
| 689 | 750 |
| 690 protected: | 751 protected: |
| 752 friend class TestURLRequestJobFactory; |
| 753 |
| 691 // testing::Test | 754 // testing::Test |
| 692 virtual void SetUp() OVERRIDE { | 755 virtual void SetUp() OVERRIDE { |
| 693 DCHECK(!test_fixture_); | |
| 694 test_fixture_ = this; | |
| 695 ChildProcessSecurityPolicyImpl::GetInstance()->Add(0); | 756 ChildProcessSecurityPolicyImpl::GetInstance()->Add(0); |
| 696 net::URLRequest::Deprecated::RegisterProtocolFactory( | 757 HandleScheme("test"); |
| 697 "test", | |
| 698 &ResourceDispatcherHostTest::Factory); | |
| 699 EnsureTestSchemeIsAllowed(); | |
| 700 delay_start_ = false; | |
| 701 delay_complete_ = false; | |
| 702 network_start_notification_ = false; | |
| 703 url_request_jobs_created_count_ = 0; | |
| 704 } | 758 } |
| 705 | 759 |
| 706 virtual void TearDown() { | 760 virtual void TearDown() { |
| 707 net::URLRequest::Deprecated::RegisterProtocolFactory("test", NULL); | |
| 708 if (!scheme_.empty()) | |
| 709 net::URLRequest::Deprecated::RegisterProtocolFactory( | |
| 710 scheme_, old_factory_); | |
| 711 | |
| 712 EXPECT_TRUE(URLRequestTestDelayedStartJob::DelayedStartQueueEmpty()); | 761 EXPECT_TRUE(URLRequestTestDelayedStartJob::DelayedStartQueueEmpty()); |
| 713 URLRequestTestDelayedStartJob::ClearQueue(); | 762 URLRequestTestDelayedStartJob::ClearQueue(); |
| 714 | 763 |
| 715 DCHECK(test_fixture_ == this); | |
| 716 test_fixture_ = NULL; | |
| 717 | |
| 718 for (std::set<int>::iterator it = child_ids_.begin(); | 764 for (std::set<int>::iterator it = child_ids_.begin(); |
| 719 it != child_ids_.end(); ++it) { | 765 it != child_ids_.end(); ++it) { |
| 720 host_.CancelRequestsForProcess(*it); | 766 host_.CancelRequestsForProcess(*it); |
| 721 } | 767 } |
| 722 | 768 |
| 723 host_.Shutdown(); | 769 host_.Shutdown(); |
| 724 | 770 |
| 725 ChildProcessSecurityPolicyImpl::GetInstance()->Remove(0); | 771 ChildProcessSecurityPolicyImpl::GetInstance()->Remove(0); |
| 726 | 772 |
| 727 // Flush the message loop to make application verifiers happy. | 773 // Flush the message loop to make application verifiers happy. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 | 814 |
| 769 net::TestNetworkDelegate* network_delegate() { return &network_delegate_; } | 815 net::TestNetworkDelegate* network_delegate() { return &network_delegate_; } |
| 770 | 816 |
| 771 void EnsureSchemeIsAllowed(const std::string& scheme) { | 817 void EnsureSchemeIsAllowed(const std::string& scheme) { |
| 772 ChildProcessSecurityPolicyImpl* policy = | 818 ChildProcessSecurityPolicyImpl* policy = |
| 773 ChildProcessSecurityPolicyImpl::GetInstance(); | 819 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 774 if (!policy->IsWebSafeScheme(scheme)) | 820 if (!policy->IsWebSafeScheme(scheme)) |
| 775 policy->RegisterWebSafeScheme(scheme); | 821 policy->RegisterWebSafeScheme(scheme); |
| 776 } | 822 } |
| 777 | 823 |
| 778 void EnsureTestSchemeIsAllowed() { | |
| 779 EnsureSchemeIsAllowed("test"); | |
| 780 } | |
| 781 | |
| 782 // Sets a particular response for any request from now on. To switch back to | 824 // Sets a particular response for any request from now on. To switch back to |
| 783 // the default bahavior, pass an empty |headers|. |headers| should be raw- | 825 // the default bahavior, pass an empty |headers|. |headers| should be raw- |
| 784 // formatted (NULLs instead of EOLs). | 826 // formatted (NULLs instead of EOLs). |
| 785 void SetResponse(const std::string& headers, const std::string& data) { | 827 void SetResponse(const std::string& headers, const std::string& data) { |
| 786 response_headers_ = net::HttpUtil::AssembleRawHeaders(headers.data(), | 828 response_headers_ = net::HttpUtil::AssembleRawHeaders(headers.data(), |
| 787 headers.size()); | 829 headers.size()); |
| 788 response_data_ = data; | 830 response_data_ = data; |
| 789 } | 831 } |
| 790 void SetResponse(const std::string& headers) { | 832 void SetResponse(const std::string& headers) { |
| 791 SetResponse(headers, std::string()); | 833 SetResponse(headers, std::string()); |
| 792 } | 834 } |
| 793 | 835 |
| 794 void SendDataReceivedACKs(bool send_acks) { | 836 void SendDataReceivedACKs(bool send_acks) { |
| 795 send_data_received_acks_ = send_acks; | 837 send_data_received_acks_ = send_acks; |
| 796 } | 838 } |
| 797 | 839 |
| 798 // Intercepts requests for the given protocol. | 840 // Intercepts requests for the given protocol. |
| 799 void HandleScheme(const std::string& scheme) { | 841 void HandleScheme(const std::string& scheme) { |
| 800 DCHECK(scheme_.empty()); | 842 job_factory_->HandleScheme(scheme); |
| 801 DCHECK(!old_factory_); | |
| 802 scheme_ = scheme; | |
| 803 old_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory( | |
| 804 scheme_, &ResourceDispatcherHostTest::Factory); | |
| 805 EnsureSchemeIsAllowed(scheme); | 843 EnsureSchemeIsAllowed(scheme); |
| 806 } | 844 } |
| 807 | 845 |
| 808 // Our own net::URLRequestJob factory. | |
| 809 static net::URLRequestJob* Factory(net::URLRequest* request, | |
| 810 net::NetworkDelegate* network_delegate, | |
| 811 const std::string& scheme) { | |
| 812 url_request_jobs_created_count_++; | |
| 813 if (test_fixture_->response_headers_.empty()) { | |
| 814 if (delay_start_) { | |
| 815 return new URLRequestTestDelayedStartJob(request, network_delegate); | |
| 816 } else if (delay_complete_) { | |
| 817 return new URLRequestTestDelayedCompletionJob(request, | |
| 818 network_delegate); | |
| 819 } else if (network_start_notification_) { | |
| 820 return new URLRequestTestDelayedNetworkJob(request, network_delegate); | |
| 821 } else if (scheme == "big-job") { | |
| 822 return new URLRequestBigJob(request, network_delegate); | |
| 823 } else { | |
| 824 return new net::URLRequestTestJob(request, network_delegate); | |
| 825 } | |
| 826 } else { | |
| 827 if (delay_start_) { | |
| 828 return new URLRequestTestDelayedStartJob( | |
| 829 request, network_delegate, | |
| 830 test_fixture_->response_headers_, test_fixture_->response_data_, | |
| 831 false); | |
| 832 } else if (delay_complete_) { | |
| 833 return new URLRequestTestDelayedCompletionJob( | |
| 834 request, network_delegate, | |
| 835 test_fixture_->response_headers_, test_fixture_->response_data_, | |
| 836 false); | |
| 837 } else { | |
| 838 return new net::URLRequestTestJob( | |
| 839 request, network_delegate, | |
| 840 test_fixture_->response_headers_, test_fixture_->response_data_, | |
| 841 false); | |
| 842 } | |
| 843 } | |
| 844 } | |
| 845 | |
| 846 void SetDelayedStartJobGeneration(bool delay_job_start) { | |
| 847 delay_start_ = delay_job_start; | |
| 848 } | |
| 849 | |
| 850 void SetDelayedCompleteJobGeneration(bool delay_job_complete) { | |
| 851 delay_complete_ = delay_job_complete; | |
| 852 } | |
| 853 | |
| 854 void SetNetworkStartNotificationJobGeneration(bool notification) { | |
| 855 network_start_notification_ = notification; | |
| 856 } | |
| 857 | |
| 858 void GenerateDataReceivedACK(const IPC::Message& msg) { | 846 void GenerateDataReceivedACK(const IPC::Message& msg) { |
| 859 EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type()); | 847 EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type()); |
| 860 | 848 |
| 861 int request_id = -1; | 849 int request_id = -1; |
| 862 bool result = PickleIterator(msg).ReadInt(&request_id); | 850 bool result = PickleIterator(msg).ReadInt(&request_id); |
| 863 DCHECK(result); | 851 DCHECK(result); |
| 864 scoped_ptr<IPC::Message> ack( | 852 scoped_ptr<IPC::Message> ack( |
| 865 new ResourceHostMsg_DataReceived_ACK(request_id)); | 853 new ResourceHostMsg_DataReceived_ACK(request_id)); |
| 866 | 854 |
| 867 base::MessageLoop::current()->PostTask( | 855 base::MessageLoop::current()->PostTask( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 879 | 867 |
| 880 void WaitForRequestComplete() { | 868 void WaitForRequestComplete() { |
| 881 DCHECK(!wait_for_request_complete_loop_); | 869 DCHECK(!wait_for_request_complete_loop_); |
| 882 wait_for_request_complete_loop_.reset(new base::RunLoop); | 870 wait_for_request_complete_loop_.reset(new base::RunLoop); |
| 883 wait_for_request_complete_loop_->Run(); | 871 wait_for_request_complete_loop_->Run(); |
| 884 wait_for_request_complete_loop_.reset(); | 872 wait_for_request_complete_loop_.reset(); |
| 885 } | 873 } |
| 886 | 874 |
| 887 content::TestBrowserThreadBundle thread_bundle_; | 875 content::TestBrowserThreadBundle thread_bundle_; |
| 888 scoped_ptr<TestBrowserContext> browser_context_; | 876 scoped_ptr<TestBrowserContext> browser_context_; |
| 877 scoped_ptr<TestURLRequestJobFactory> job_factory_; |
| 889 scoped_refptr<ForwardingFilter> filter_; | 878 scoped_refptr<ForwardingFilter> filter_; |
| 890 net::TestNetworkDelegate network_delegate_; | 879 net::TestNetworkDelegate network_delegate_; |
| 891 ResourceDispatcherHostImpl host_; | 880 ResourceDispatcherHostImpl host_; |
| 892 ResourceIPCAccumulator accum_; | 881 ResourceIPCAccumulator accum_; |
| 893 std::string response_headers_; | 882 std::string response_headers_; |
| 894 std::string response_data_; | 883 std::string response_data_; |
| 895 std::string scheme_; | 884 std::string scheme_; |
| 896 net::URLRequest::ProtocolFactory* old_factory_; | 885 net::URLRequest::ProtocolFactory* old_factory_; |
| 897 bool send_data_received_acks_; | 886 bool send_data_received_acks_; |
| 898 std::set<int> child_ids_; | 887 std::set<int> child_ids_; |
| 899 scoped_ptr<base::RunLoop> wait_for_request_complete_loop_; | 888 scoped_ptr<base::RunLoop> wait_for_request_complete_loop_; |
| 900 static ResourceDispatcherHostTest* test_fixture_; | |
| 901 static bool delay_start_; | |
| 902 static bool delay_complete_; | |
| 903 static bool network_start_notification_; | |
| 904 static int url_request_jobs_created_count_; | |
| 905 }; | 889 }; |
| 906 // Static. | |
| 907 ResourceDispatcherHostTest* ResourceDispatcherHostTest::test_fixture_ = NULL; | |
| 908 bool ResourceDispatcherHostTest::delay_start_ = false; | |
| 909 bool ResourceDispatcherHostTest::delay_complete_ = false; | |
| 910 bool ResourceDispatcherHostTest::network_start_notification_ = false; | |
| 911 int ResourceDispatcherHostTest::url_request_jobs_created_count_ = 0; | |
| 912 | 890 |
| 913 void ResourceDispatcherHostTest::MakeTestRequest(int render_view_id, | 891 void ResourceDispatcherHostTest::MakeTestRequest(int render_view_id, |
| 914 int request_id, | 892 int request_id, |
| 915 const GURL& url) { | 893 const GURL& url) { |
| 916 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 894 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 917 url, ResourceType::SUB_RESOURCE); | 895 url, ResourceType::SUB_RESOURCE); |
| 918 } | 896 } |
| 919 | 897 |
| 920 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( | 898 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( |
| 921 ResourceMessageFilter* filter, | 899 ResourceMessageFilter* filter, |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1362 base::MessageLoop::current()->RunUntilIdle(); | 1340 base::MessageLoop::current()->RunUntilIdle(); |
| 1363 | 1341 |
| 1364 ResourceIPCAccumulator::ClassifiedMessages msgs; | 1342 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 1365 accum_.GetClassifiedMessages(&msgs); | 1343 accum_.GetClassifiedMessages(&msgs); |
| 1366 | 1344 |
| 1367 // Check that request got canceled. | 1345 // Check that request got canceled. |
| 1368 ASSERT_EQ(1U, msgs[0].size()); | 1346 ASSERT_EQ(1U, msgs[0].size()); |
| 1369 CheckRequestCompleteErrorCode(msgs[0][0], net::ERR_ABORTED); | 1347 CheckRequestCompleteErrorCode(msgs[0][0], net::ERR_ABORTED); |
| 1370 | 1348 |
| 1371 // Make sure URLRequest is never started. | 1349 // Make sure URLRequest is never started. |
| 1372 EXPECT_EQ(0, url_request_jobs_created_count_); | 1350 EXPECT_EQ(0, job_factory_->url_request_jobs_created_count()); |
| 1373 } | 1351 } |
| 1374 | 1352 |
| 1375 TEST_F(ResourceDispatcherHostTest, PausedStartError) { | 1353 TEST_F(ResourceDispatcherHostTest, PausedStartError) { |
| 1376 // Arrange to have requests deferred before processing response headers. | 1354 // Arrange to have requests deferred before processing response headers. |
| 1377 TestResourceDispatcherHostDelegate delegate; | 1355 TestResourceDispatcherHostDelegate delegate; |
| 1378 delegate.set_flags(DEFER_PROCESSING_RESPONSE); | 1356 delegate.set_flags(DEFER_PROCESSING_RESPONSE); |
| 1379 host_.SetDelegate(&delegate); | 1357 host_.SetDelegate(&delegate); |
| 1380 | 1358 |
| 1381 SetDelayedStartJobGeneration(true); | 1359 job_factory_->SetDelayedStartJobGeneration(true); |
| 1382 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_error()); | 1360 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_error()); |
| 1383 CompleteStartRequest(1); | 1361 CompleteStartRequest(1); |
| 1384 | 1362 |
| 1385 // flush all the pending requests | 1363 // flush all the pending requests |
| 1386 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 1364 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 1387 base::MessageLoop::current()->RunUntilIdle(); | 1365 base::MessageLoop::current()->RunUntilIdle(); |
| 1388 | 1366 |
| 1389 EXPECT_EQ(0, host_.pending_requests()); | 1367 EXPECT_EQ(0, host_.pending_requests()); |
| 1390 } | 1368 } |
| 1391 | 1369 |
| 1392 // Test the OnBeforeNetworkStart throttle. | 1370 // Test the OnBeforeNetworkStart throttle. |
| 1393 TEST_F(ResourceDispatcherHostTest, ThrottleNetworkStart) { | 1371 TEST_F(ResourceDispatcherHostTest, ThrottleNetworkStart) { |
| 1394 // Arrange to have requests deferred before processing response headers. | 1372 // Arrange to have requests deferred before processing response headers. |
| 1395 TestResourceDispatcherHostDelegate delegate; | 1373 TestResourceDispatcherHostDelegate delegate; |
| 1396 delegate.set_flags(DEFER_NETWORK_START); | 1374 delegate.set_flags(DEFER_NETWORK_START); |
| 1397 host_.SetDelegate(&delegate); | 1375 host_.SetDelegate(&delegate); |
| 1398 | 1376 |
| 1399 SetNetworkStartNotificationJobGeneration(true); | 1377 job_factory_->SetNetworkStartNotificationJobGeneration(true); |
| 1400 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_2()); | 1378 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_2()); |
| 1401 | 1379 |
| 1402 // Should have deferred for network start. | 1380 // Should have deferred for network start. |
| 1403 GenericResourceThrottle* first_throttle = | 1381 GenericResourceThrottle* first_throttle = |
| 1404 GenericResourceThrottle::active_throttle(); | 1382 GenericResourceThrottle::active_throttle(); |
| 1405 ASSERT_TRUE(first_throttle); | 1383 ASSERT_TRUE(first_throttle); |
| 1406 EXPECT_EQ(0, network_delegate()->completed_requests()); | 1384 EXPECT_EQ(0, network_delegate()->completed_requests()); |
| 1407 EXPECT_EQ(1, host_.pending_requests()); | 1385 EXPECT_EQ(1, host_.pending_requests()); |
| 1408 | 1386 |
| 1409 first_throttle->Resume(); | 1387 first_throttle->Resume(); |
| (...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2099 std::string response_data("01234567890123456789\x01foobar"); | 2077 std::string response_data("01234567890123456789\x01foobar"); |
| 2100 | 2078 |
| 2101 // Get past sniffing metrics in the BufferedResourceHandler. Note that | 2079 // Get past sniffing metrics in the BufferedResourceHandler. Note that |
| 2102 // if we don't get past the sniffing metrics, the result will be that | 2080 // if we don't get past the sniffing metrics, the result will be that |
| 2103 // the BufferedResourceHandler won't have figured out that it's a download, | 2081 // the BufferedResourceHandler won't have figured out that it's a download, |
| 2104 // won't have constructed a DownloadResourceHandler, and and the request | 2082 // won't have constructed a DownloadResourceHandler, and and the request |
| 2105 // will be successfully canceled below, failing the test. | 2083 // will be successfully canceled below, failing the test. |
| 2106 response_data.resize(1025, ' '); | 2084 response_data.resize(1025, ' '); |
| 2107 | 2085 |
| 2108 SetResponse(raw_headers, response_data); | 2086 SetResponse(raw_headers, response_data); |
| 2109 SetDelayedCompleteJobGeneration(true); | 2087 job_factory_->SetDelayedCompleteJobGeneration(true); |
| 2110 HandleScheme("http"); | 2088 HandleScheme("http"); |
| 2111 | 2089 |
| 2112 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2090 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2113 GURL("http://example.com/blah"), | 2091 GURL("http://example.com/blah"), |
| 2114 ResourceType::MAIN_FRAME); | 2092 ResourceType::MAIN_FRAME); |
| 2115 // Return some data so that the request is identified as a download | 2093 // Return some data so that the request is identified as a download |
| 2116 // and the proper resource handlers are created. | 2094 // and the proper resource handlers are created. |
| 2117 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2095 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2118 | 2096 |
| 2119 // And now simulate a cancellation coming from the renderer. | 2097 // And now simulate a cancellation coming from the renderer. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2134 int render_view_id = 0; | 2112 int render_view_id = 0; |
| 2135 int request_id = 1; | 2113 int request_id = 1; |
| 2136 | 2114 |
| 2137 std::string raw_headers("HTTP\n" | 2115 std::string raw_headers("HTTP\n" |
| 2138 "Content-disposition: attachment; filename=foo\n\n"); | 2116 "Content-disposition: attachment; filename=foo\n\n"); |
| 2139 std::string response_data("01234567890123456789\x01foobar"); | 2117 std::string response_data("01234567890123456789\x01foobar"); |
| 2140 // Get past sniffing metrics. | 2118 // Get past sniffing metrics. |
| 2141 response_data.resize(1025, ' '); | 2119 response_data.resize(1025, ' '); |
| 2142 | 2120 |
| 2143 SetResponse(raw_headers, response_data); | 2121 SetResponse(raw_headers, response_data); |
| 2144 SetDelayedCompleteJobGeneration(true); | 2122 job_factory_->SetDelayedCompleteJobGeneration(true); |
| 2145 HandleScheme("http"); | 2123 HandleScheme("http"); |
| 2146 | 2124 |
| 2147 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2125 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2148 GURL("http://example.com/blah"), | 2126 GURL("http://example.com/blah"), |
| 2149 ResourceType::MAIN_FRAME); | 2127 ResourceType::MAIN_FRAME); |
| 2150 // Return some data so that the request is identified as a download | 2128 // Return some data so that the request is identified as a download |
| 2151 // and the proper resource handlers are created. | 2129 // and the proper resource handlers are created. |
| 2152 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2130 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2153 | 2131 |
| 2154 // And now simulate a cancellation coming from the renderer. | 2132 // And now simulate a cancellation coming from the renderer. |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2612 std::string raw_headers("HTTP\n" | 2590 std::string raw_headers("HTTP\n" |
| 2613 "Content-type: image/jpeg\n\n"); | 2591 "Content-type: image/jpeg\n\n"); |
| 2614 std::string response_data("01234567890123456789\x01foobar"); | 2592 std::string response_data("01234567890123456789\x01foobar"); |
| 2615 | 2593 |
| 2616 // Create a response larger than kMaxAllocationSize (currently 32K). Note | 2594 // Create a response larger than kMaxAllocationSize (currently 32K). Note |
| 2617 // that if this increase beyond 512K we'll need to make the response longer. | 2595 // that if this increase beyond 512K we'll need to make the response longer. |
| 2618 const int kAllocSize = 1024*512; | 2596 const int kAllocSize = 1024*512; |
| 2619 response_data.resize(kAllocSize, ' '); | 2597 response_data.resize(kAllocSize, ' '); |
| 2620 | 2598 |
| 2621 SetResponse(raw_headers, response_data); | 2599 SetResponse(raw_headers, response_data); |
| 2622 SetDelayedCompleteJobGeneration(true); | 2600 job_factory_->SetDelayedCompleteJobGeneration(true); |
| 2623 HandleScheme("http"); | 2601 HandleScheme("http"); |
| 2624 | 2602 |
| 2625 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2603 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2626 GURL("http://example.com/blah"), | 2604 GURL("http://example.com/blah"), |
| 2627 ResourceType::PREFETCH); | 2605 ResourceType::PREFETCH); |
| 2628 | 2606 |
| 2629 // Get a bit of data before cancelling. | 2607 // Get a bit of data before cancelling. |
| 2630 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2608 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2631 | 2609 |
| 2632 // Simulate a cancellation coming from the renderer. | 2610 // Simulate a cancellation coming from the renderer. |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2901 // The release callback runs before the delete is scheduled, so pump the | 2879 // The release callback runs before the delete is scheduled, so pump the |
| 2902 // message loop for the delete itself. (This relies on the delete happening on | 2880 // message loop for the delete itself. (This relies on the delete happening on |
| 2903 // the FILE thread which is mapped to main thread in this test.) | 2881 // the FILE thread which is mapped to main thread in this test.) |
| 2904 base::RunLoop().RunUntilIdle(); | 2882 base::RunLoop().RunUntilIdle(); |
| 2905 | 2883 |
| 2906 EXPECT_FALSE(base::PathExists(response_head.download_file_path)); | 2884 EXPECT_FALSE(base::PathExists(response_head.download_file_path)); |
| 2907 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 2885 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 2908 filter_->child_id(), response_head.download_file_path)); | 2886 filter_->child_id(), response_head.download_file_path)); |
| 2909 } | 2887 } |
| 2910 | 2888 |
| 2889 net::URLRequestJob* TestURLRequestJobFactory::MaybeCreateJobWithProtocolHandler( |
| 2890 const std::string& scheme, |
| 2891 net::URLRequest* request, |
| 2892 net::NetworkDelegate* network_delegate) const { |
| 2893 url_request_jobs_created_count_++; |
| 2894 if (test_fixture_->response_headers_.empty()) { |
| 2895 if (delay_start_) { |
| 2896 return new URLRequestTestDelayedStartJob(request, network_delegate); |
| 2897 } else if (delay_complete_) { |
| 2898 return new URLRequestTestDelayedCompletionJob(request, |
| 2899 network_delegate); |
| 2900 } else if (network_start_notification_) { |
| 2901 return new URLRequestTestDelayedNetworkJob(request, network_delegate); |
| 2902 } else if (scheme == "big-job") { |
| 2903 return new URLRequestBigJob(request, network_delegate); |
| 2904 } else { |
| 2905 return new net::URLRequestTestJob(request, network_delegate); |
| 2906 } |
| 2907 } else { |
| 2908 if (delay_start_) { |
| 2909 return new URLRequestTestDelayedStartJob( |
| 2910 request, network_delegate, |
| 2911 test_fixture_->response_headers_, test_fixture_->response_data_, |
| 2912 false); |
| 2913 } else if (delay_complete_) { |
| 2914 return new URLRequestTestDelayedCompletionJob( |
| 2915 request, network_delegate, |
| 2916 test_fixture_->response_headers_, test_fixture_->response_data_, |
| 2917 false); |
| 2918 } else { |
| 2919 return new net::URLRequestTestJob( |
| 2920 request, network_delegate, |
| 2921 test_fixture_->response_headers_, test_fixture_->response_data_, |
| 2922 false); |
| 2923 } |
| 2924 } |
| 2925 } |
| 2926 |
| 2911 } // namespace content | 2927 } // namespace content |
| OLD | NEW |