Chromium Code Reviews| Index: content/browser/loader/resource_loader_unittest.cc |
| diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc |
| index bf4f52f27c47089c9381558dee3229eda0b3defc..409923745d838e088f6e896d1066bfdd8ad3951c 100644 |
| --- a/content/browser/loader/resource_loader_unittest.cc |
| +++ b/content/browser/loader/resource_loader_unittest.cc |
| @@ -48,12 +48,13 @@ class ClientCertStoreStub : public net::ClientCertStore { |
| } |
| // net::ClientCertStore: |
| - virtual bool GetClientCerts(const net::SSLCertRequestInfo& cert_request_info, |
| - net::CertificateList* selected_certs) OVERRIDE { |
| + virtual void GetClientCerts(const net::SSLCertRequestInfo& cert_request_info, |
| + net::CertificateList* selected_certs, |
| + const base::Closure& callback) OVERRIDE { |
| ++request_count_; |
| requested_authorities_ = cert_request_info.cert_authorities; |
| *selected_certs = response_; |
| - return true; |
| + callback.Run(); |
| } |
| private: |
| @@ -143,6 +144,23 @@ class SelectCertificateBrowserClient : public TestContentBrowserClient { |
| int call_count_; |
| }; |
| +class ResourceContextStub : public MockResourceContext { |
| + public: |
| + explicit ResourceContextStub(net::URLRequestContext* test_request_context) |
| + : MockResourceContext(test_request_context) {} |
| + |
| + virtual scoped_ptr<net::ClientCertStore> CreateClientCertStore() OVERRIDE { |
| + return dummy_cert_store_.Pass(); |
| + } |
| + |
| + void SetClientCertStore(scoped_ptr<net::ClientCertStore> store) { |
| + dummy_cert_store_ = store.Pass(); |
| + } |
| + |
| + private: |
| + scoped_ptr<net::ClientCertStore> dummy_cert_store_; |
| +}; |
| + |
| } // namespace |
| class ResourceLoaderTest : public testing::Test, |
| @@ -182,12 +200,9 @@ class ResourceLoaderTest : public testing::Test, |
| content::TestBrowserThreadBundle thread_bundle_; |
| net::TestURLRequestContext test_url_request_context_; |
| - content::MockResourceContext resource_context_; |
| + ResourceContextStub resource_context_; |
| }; |
| -// When OpenSSL is used, client cert store is not being queried in |
| -// ResourceLoader. |
| -#if !defined(USE_OPENSSL) |
| // Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() |
| // causes client cert store to be queried for certificates and if the returned |
| // certificates are correctly passed to the content browser client for |
| @@ -218,10 +233,11 @@ TEST_F(ResourceLoaderTest, ClientCertStoreLookup) { |
| // later. |
| net::URLRequest* raw_ptr_to_request = request.get(); |
| ClientCertStoreStub* raw_ptr_to_store = test_store.get(); |
| + resource_context_.SetClientCertStore( |
| + test_store.PassAs<net::ClientCertStore>()); |
| scoped_ptr<ResourceHandler> resource_handler(new ResourceHandlerStub()); |
| - ResourceLoader loader(request.Pass(), resource_handler.Pass(), this, |
| - test_store.PassAs<net::ClientCertStore>()); |
| + ResourceLoader loader(request.Pass(), resource_handler.Pass(), this); |
| // Prepare a dummy certificate request. |
| scoped_refptr<net::SSLCertRequestInfo> cert_request_info( |
| @@ -250,6 +266,53 @@ TEST_F(ResourceLoaderTest, ClientCertStoreLookup) { |
| EXPECT_EQ(1, test_client.call_count()); |
| EXPECT_EQ(dummy_certs, test_client.passed_certs()); |
| } |
| -#endif // !defined(OPENSSL) |
| + |
| +// Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() |
|
wtc
2013/10/29 23:03:12
Typo: UrlRequest => URLRequest
mattm
2013/10/29 23:59:01
Done.
|
| +// on a platform with a NULL client cert store still calls the content browser |
| +// client for selection. |
| +TEST_F(ResourceLoaderTest, ClientCertStoreNull) { |
| + const int kRenderProcessId = 1; |
| + const int kRenderViewId = 2; |
| + |
| + scoped_ptr<net::URLRequest> request(new net::URLRequest( |
| + GURL("dummy"), NULL, |
| + resource_context_.GetRequestContext())); |
|
wtc
2013/10/29 23:03:12
Nit: this may fit on the previous line.
mattm
2013/10/29 23:59:01
Done.
|
| + ResourceRequestInfo::AllocateForTesting(request.get(), |
| + ResourceType::MAIN_FRAME, |
| + &resource_context_, |
| + kRenderProcessId, |
| + kRenderViewId, |
| + false); |
| + |
| + // Ownership of the |request| is about to be turned over to ResourceLoader. We |
| + // need to keep a raw pointer copy to access this objects later. |
|
wtc
2013/10/29 23:03:12
Typo: this objects => this object
mattm
2013/10/29 23:59:01
Done.
|
| + net::URLRequest* raw_ptr_to_request = request.get(); |
| + |
| + scoped_ptr<ResourceHandler> resource_handler(new ResourceHandlerStub()); |
| + ResourceLoader loader(request.Pass(), resource_handler.Pass(), this); |
| + |
| + // Prepare a dummy certificate request. |
| + scoped_refptr<net::SSLCertRequestInfo> cert_request_info( |
| + new net::SSLCertRequestInfo()); |
| + std::vector<std::string> dummy_authority(1, "dummy"); |
| + cert_request_info->cert_authorities = dummy_authority; |
| + |
| + // Plug in test content browser client. |
| + SelectCertificateBrowserClient test_client; |
| + ContentBrowserClient* old_client = SetBrowserClientForTesting(&test_client); |
| + |
| + // Everything is set up. Trigger the resource loader certificate request event |
| + // and run the message loop. |
| + loader.OnCertificateRequested(raw_ptr_to_request, cert_request_info.get()); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + // Restore the original content browser client. |
| + SetBrowserClientForTesting(old_client); |
| + |
| + // Check if the SelectClientCertificate was called on the content browser |
| + // client. |
| + EXPECT_EQ(1, test_client.call_count()); |
| + EXPECT_EQ(net::CertificateList(), test_client.passed_certs()); |
| +} |
| } // namespace content |