OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/loader/resource_loader.h" | 5 #include "content/browser/loader/resource_loader.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 private: | 482 private: |
483 net::CertificateList passed_certs_; | 483 net::CertificateList passed_certs_; |
484 int call_count_; | 484 int call_count_; |
485 std::unique_ptr<ClientCertificateDelegate> delegate_; | 485 std::unique_ptr<ClientCertificateDelegate> delegate_; |
486 | 486 |
487 base::RunLoop select_certificate_run_loop_; | 487 base::RunLoop select_certificate_run_loop_; |
488 | 488 |
489 DISALLOW_COPY_AND_ASSIGN(SelectCertificateBrowserClient); | 489 DISALLOW_COPY_AND_ASSIGN(SelectCertificateBrowserClient); |
490 }; | 490 }; |
491 | 491 |
492 class ResourceContextStub : public MockResourceContext { | |
493 public: | |
494 explicit ResourceContextStub(net::URLRequestContext* test_request_context) | |
495 : MockResourceContext(test_request_context) {} | |
496 | |
497 std::unique_ptr<net::ClientCertStore> CreateClientCertStore() override { | |
498 return std::move(dummy_cert_store_); | |
499 } | |
500 | |
501 void SetClientCertStore(std::unique_ptr<net::ClientCertStore> store) { | |
502 dummy_cert_store_ = std::move(store); | |
503 } | |
504 | |
505 private: | |
506 std::unique_ptr<net::ClientCertStore> dummy_cert_store_; | |
507 }; | |
508 | |
509 // Wraps a ChunkedUploadDataStream to behave as non-chunked to enable upload | 492 // Wraps a ChunkedUploadDataStream to behave as non-chunked to enable upload |
510 // progress reporting. | 493 // progress reporting. |
511 class NonChunkedUploadDataStream : public net::UploadDataStream { | 494 class NonChunkedUploadDataStream : public net::UploadDataStream { |
512 public: | 495 public: |
513 explicit NonChunkedUploadDataStream(uint64_t size) | 496 explicit NonChunkedUploadDataStream(uint64_t size) |
514 : net::UploadDataStream(false, 0), stream_(0), size_(size) {} | 497 : net::UploadDataStream(false, 0), stream_(0), size_(size) {} |
515 | 498 |
516 void AppendData(const char* data) { | 499 void AppendData(const char* data) { |
517 stream_.AppendData(data, strlen(data), false); | 500 stream_.AppendData(data, strlen(data), false); |
518 } | 501 } |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 } | 635 } |
653 | 636 |
654 void TearDown() override { | 637 void TearDown() override { |
655 // Destroy the WebContents and pump the event loop before destroying | 638 // Destroy the WebContents and pump the event loop before destroying |
656 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup | 639 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup |
657 // tasks complete. | 640 // tasks complete. |
658 web_contents_.reset(); | 641 web_contents_.reset(); |
659 base::RunLoop().RunUntilIdle(); | 642 base::RunLoop().RunUntilIdle(); |
660 } | 643 } |
661 | 644 |
| 645 void SetClientCertStore(std::unique_ptr<net::ClientCertStore> store) { |
| 646 dummy_cert_store_ = std::move(store); |
| 647 } |
| 648 |
662 // ResourceLoaderDelegate: | 649 // ResourceLoaderDelegate: |
663 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( | 650 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( |
664 ResourceLoader* loader, | 651 ResourceLoader* loader, |
665 net::AuthChallengeInfo* auth_info) override { | 652 net::AuthChallengeInfo* auth_info) override { |
666 return NULL; | 653 return NULL; |
667 } | 654 } |
668 bool HandleExternalProtocol(ResourceLoader* loader, | 655 bool HandleExternalProtocol(ResourceLoader* loader, |
669 const GURL& url) override { | 656 const GURL& url) override { |
670 return false; | 657 return false; |
671 } | 658 } |
672 void DidStartRequest(ResourceLoader* loader) override {} | 659 void DidStartRequest(ResourceLoader* loader) override {} |
673 void DidReceiveRedirect(ResourceLoader* loader, | 660 void DidReceiveRedirect(ResourceLoader* loader, |
674 const GURL& new_url) override {} | 661 const GURL& new_url) override {} |
675 void DidReceiveResponse(ResourceLoader* loader) override {} | 662 void DidReceiveResponse(ResourceLoader* loader) override {} |
676 void DidFinishLoading(ResourceLoader* loader) override {} | 663 void DidFinishLoading(ResourceLoader* loader) override {} |
| 664 std::unique_ptr<net::ClientCertStore> CreateClientCertStore( |
| 665 ResourceLoader* loader) override { |
| 666 return std::move(dummy_cert_store_); |
| 667 } |
677 | 668 |
678 TestBrowserThreadBundle thread_bundle_; | 669 TestBrowserThreadBundle thread_bundle_; |
679 RenderViewHostTestEnabler rvh_test_enabler_; | 670 RenderViewHostTestEnabler rvh_test_enabler_; |
680 | 671 |
681 net::URLRequestJobFactoryImpl job_factory_; | 672 net::URLRequestJobFactoryImpl job_factory_; |
682 TestNetworkQualityEstimator network_quality_estimator_; | 673 TestNetworkQualityEstimator network_quality_estimator_; |
683 net::TestURLRequestContext test_url_request_context_; | 674 net::TestURLRequestContext test_url_request_context_; |
684 ResourceContextStub resource_context_; | 675 MockResourceContext resource_context_; |
685 std::unique_ptr<TestBrowserContext> browser_context_; | 676 std::unique_ptr<TestBrowserContext> browser_context_; |
686 std::unique_ptr<TestWebContents> web_contents_; | 677 std::unique_ptr<TestWebContents> web_contents_; |
| 678 std::unique_ptr<net::ClientCertStore> dummy_cert_store_; |
687 | 679 |
688 // The ResourceLoader owns the URLRequest and the ResourceHandler. | 680 // The ResourceLoader owns the URLRequest and the ResourceHandler. |
689 ResourceHandlerStub* raw_ptr_resource_handler_; | 681 ResourceHandlerStub* raw_ptr_resource_handler_; |
690 net::URLRequest* raw_ptr_to_request_; | 682 net::URLRequest* raw_ptr_to_request_; |
691 std::unique_ptr<ResourceLoader> loader_; | 683 std::unique_ptr<ResourceLoader> loader_; |
692 }; | 684 }; |
693 | 685 |
694 class ClientCertResourceLoaderTest : public ResourceLoaderTest { | 686 class ClientCertResourceLoaderTest : public ResourceLoaderTest { |
695 protected: | 687 protected: |
696 std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler> | 688 std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler> |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
737 | 729 |
738 // Tests that client certificates are requested with ClientCertStore lookup. | 730 // Tests that client certificates are requested with ClientCertStore lookup. |
739 TEST_F(ClientCertResourceLoaderTest, WithStoreLookup) { | 731 TEST_F(ClientCertResourceLoaderTest, WithStoreLookup) { |
740 // Set up the test client cert store. | 732 // Set up the test client cert store. |
741 int store_request_count; | 733 int store_request_count; |
742 std::vector<std::string> store_requested_authorities; | 734 std::vector<std::string> store_requested_authorities; |
743 net::CertificateList dummy_certs(1, scoped_refptr<net::X509Certificate>( | 735 net::CertificateList dummy_certs(1, scoped_refptr<net::X509Certificate>( |
744 new net::X509Certificate("test", "test", base::Time(), base::Time()))); | 736 new net::X509Certificate("test", "test", base::Time(), base::Time()))); |
745 std::unique_ptr<ClientCertStoreStub> test_store(new ClientCertStoreStub( | 737 std::unique_ptr<ClientCertStoreStub> test_store(new ClientCertStoreStub( |
746 dummy_certs, &store_request_count, &store_requested_authorities)); | 738 dummy_certs, &store_request_count, &store_requested_authorities)); |
747 resource_context_.SetClientCertStore(std::move(test_store)); | 739 SetClientCertStore(std::move(test_store)); |
748 | 740 |
749 // Plug in test content browser client. | 741 // Plug in test content browser client. |
750 SelectCertificateBrowserClient test_client; | 742 SelectCertificateBrowserClient test_client; |
751 ContentBrowserClient* old_client = SetBrowserClientForTesting(&test_client); | 743 ContentBrowserClient* old_client = SetBrowserClientForTesting(&test_client); |
752 | 744 |
753 // Start the request and wait for it to pause. | 745 // Start the request and wait for it to pause. |
754 loader_->StartRequest(); | 746 loader_->StartRequest(); |
755 test_client.WaitForSelectCertificate(); | 747 test_client.WaitForSelectCertificate(); |
756 | 748 |
757 EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); | 749 EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 SetBrowserClientForTesting(old_client); | 839 SetBrowserClientForTesting(old_client); |
848 } | 840 } |
849 | 841 |
850 // Verifies that ClientCertStore's callback doesn't crash if called after the | 842 // Verifies that ClientCertStore's callback doesn't crash if called after the |
851 // loader is destroyed. | 843 // loader is destroyed. |
852 TEST_F(ClientCertResourceLoaderTest, StoreAsyncCancel) { | 844 TEST_F(ClientCertResourceLoaderTest, StoreAsyncCancel) { |
853 base::RunLoop loader_destroyed_run_loop; | 845 base::RunLoop loader_destroyed_run_loop; |
854 LoaderDestroyingCertStore* test_store = | 846 LoaderDestroyingCertStore* test_store = |
855 new LoaderDestroyingCertStore(&loader_, | 847 new LoaderDestroyingCertStore(&loader_, |
856 loader_destroyed_run_loop.QuitClosure()); | 848 loader_destroyed_run_loop.QuitClosure()); |
857 resource_context_.SetClientCertStore(base::WrapUnique(test_store)); | 849 SetClientCertStore(base::WrapUnique(test_store)); |
858 | 850 |
859 loader_->StartRequest(); | 851 loader_->StartRequest(); |
860 loader_destroyed_run_loop.Run(); | 852 loader_destroyed_run_loop.Run(); |
861 EXPECT_FALSE(loader_); | 853 EXPECT_FALSE(loader_); |
862 | 854 |
863 // Pump the event loop to ensure nothing asynchronous crashes either. | 855 // Pump the event loop to ensure nothing asynchronous crashes either. |
864 base::RunLoop().RunUntilIdle(); | 856 base::RunLoop().RunUntilIdle(); |
865 } | 857 } |
866 | 858 |
867 TEST_F(ResourceLoaderTest, ResumeCancelledRequest) { | 859 TEST_F(ResourceLoaderTest, ResumeCancelledRequest) { |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1243 | 1235 |
1244 // Tests that the effective connection type is not set on non-main frame | 1236 // Tests that the effective connection type is not set on non-main frame |
1245 // requests. | 1237 // requests. |
1246 TEST_F(EffectiveConnectionTypeResourceLoaderTest, NotAMainFrame) { | 1238 TEST_F(EffectiveConnectionTypeResourceLoaderTest, NotAMainFrame) { |
1247 VerifyEffectiveConnectionType( | 1239 VerifyEffectiveConnectionType( |
1248 false, net::NetworkQualityEstimator::EFFECTIVE_CONNECTION_TYPE_3G, | 1240 false, net::NetworkQualityEstimator::EFFECTIVE_CONNECTION_TYPE_3G, |
1249 net::NetworkQualityEstimator::EFFECTIVE_CONNECTION_TYPE_UNKNOWN); | 1241 net::NetworkQualityEstimator::EFFECTIVE_CONNECTION_TYPE_UNKNOWN); |
1250 } | 1242 } |
1251 | 1243 |
1252 } // namespace content | 1244 } // namespace content |
OLD | NEW |