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

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 #7 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
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

Powered by Google App Engine
This is Rietveld 408576698