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

Unified Diff: content/browser/loader/resource_loader_unittest.cc

Issue 42773002: Get ClientCertStore through ResourceContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changes for comment #9 Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | content/browser/resource_context_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d228300968d47cdb670b691ecb9ac745cba91cd3 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,52 @@ 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()
+// 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()));
+ 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 object later.
+ 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
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | content/browser/resource_context_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698