| 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 "base/message_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "content/browser/browser_thread_impl.h" | 8 #include "content/browser/browser_thread_impl.h" |
| 9 #include "content/browser/loader/resource_loader_delegate.h" | 9 #include "content/browser/loader/resource_loader_delegate.h" |
| 10 #include "content/public/browser/resource_request_info.h" | 10 #include "content/public/browser/resource_request_info.h" |
| 11 #include "content/public/test/mock_resource_context.h" | 11 #include "content/public/test/mock_resource_context.h" |
| 12 #include "content/public/test/test_browser_thread_bundle.h" |
| 12 #include "content/test/test_content_browser_client.h" | 13 #include "content/test/test_content_browser_client.h" |
| 13 #include "net/cert/x509_certificate.h" | 14 #include "net/cert/x509_certificate.h" |
| 14 #include "net/ssl/client_cert_store.h" | 15 #include "net/ssl/client_cert_store.h" |
| 15 #include "net/ssl/ssl_cert_request_info.h" | 16 #include "net/ssl/ssl_cert_request_info.h" |
| 16 #include "net/url_request/url_request.h" | 17 #include "net/url_request/url_request.h" |
| 18 #include "net/url_request/url_request_test_util.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 20 |
| 19 namespace content { | 21 namespace content { |
| 20 namespace { | 22 namespace { |
| 21 | 23 |
| 22 // Stub client certificate store that returns a preset list of certificates for | 24 // Stub client certificate store that returns a preset list of certificates for |
| 23 // each request and records the arguments of the most recent request for later | 25 // each request and records the arguments of the most recent request for later |
| 24 // inspection. | 26 // inspection. |
| 25 class ClientCertStoreStub : public net::ClientCertStore { | 27 class ClientCertStoreStub : public net::ClientCertStore { |
| 26 public: | 28 public: |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 private: | 139 private: |
| 138 net::CertificateList passed_certs_; | 140 net::CertificateList passed_certs_; |
| 139 int call_count_; | 141 int call_count_; |
| 140 }; | 142 }; |
| 141 | 143 |
| 142 } // namespace | 144 } // namespace |
| 143 | 145 |
| 144 class ResourceLoaderTest : public testing::Test, | 146 class ResourceLoaderTest : public testing::Test, |
| 145 public ResourceLoaderDelegate { | 147 public ResourceLoaderDelegate { |
| 146 protected: | 148 protected: |
| 147 // testing::Test: | 149 ResourceLoaderTest() |
| 148 virtual void SetUp() OVERRIDE { | 150 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 149 message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_IO)); | 151 resource_context_(&test_url_request_context_) { |
| 150 ui_thread_.reset( | |
| 151 new BrowserThreadImpl(BrowserThread::UI, message_loop_.get())); | |
| 152 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | |
| 153 message_loop_.get())); | |
| 154 } | 152 } |
| 155 | 153 |
| 156 // ResourceLoaderDelegate: | 154 // ResourceLoaderDelegate: |
| 157 virtual ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( | 155 virtual ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( |
| 158 ResourceLoader* loader, | 156 ResourceLoader* loader, |
| 159 net::AuthChallengeInfo* auth_info) OVERRIDE { | 157 net::AuthChallengeInfo* auth_info) OVERRIDE { |
| 160 return NULL; | 158 return NULL; |
| 161 } | 159 } |
| 162 virtual bool AcceptAuthRequest( | 160 virtual bool AcceptAuthRequest( |
| 163 ResourceLoader* loader, | 161 ResourceLoader* loader, |
| 164 net::AuthChallengeInfo* auth_info) OVERRIDE { | 162 net::AuthChallengeInfo* auth_info) OVERRIDE { |
| 165 return false; | 163 return false; |
| 166 }; | 164 }; |
| 167 virtual bool AcceptSSLClientCertificateRequest( | 165 virtual bool AcceptSSLClientCertificateRequest( |
| 168 ResourceLoader* loader, | 166 ResourceLoader* loader, |
| 169 net::SSLCertRequestInfo* cert_info) OVERRIDE { | 167 net::SSLCertRequestInfo* cert_info) OVERRIDE { |
| 170 return true; | 168 return true; |
| 171 } | 169 } |
| 172 virtual bool HandleExternalProtocol(ResourceLoader* loader, | 170 virtual bool HandleExternalProtocol(ResourceLoader* loader, |
| 173 const GURL& url) OVERRIDE { | 171 const GURL& url) OVERRIDE { |
| 174 return false; | 172 return false; |
| 175 } | 173 } |
| 176 virtual void DidStartRequest(ResourceLoader* loader) OVERRIDE {} | 174 virtual void DidStartRequest(ResourceLoader* loader) OVERRIDE {} |
| 177 virtual void DidReceiveRedirect(ResourceLoader* loader, | 175 virtual void DidReceiveRedirect(ResourceLoader* loader, |
| 178 const GURL& new_url) OVERRIDE {} | 176 const GURL& new_url) OVERRIDE {} |
| 179 virtual void DidReceiveResponse(ResourceLoader* loader) OVERRIDE {} | 177 virtual void DidReceiveResponse(ResourceLoader* loader) OVERRIDE {} |
| 180 virtual void DidFinishLoading(ResourceLoader* loader) OVERRIDE {} | 178 virtual void DidFinishLoading(ResourceLoader* loader) OVERRIDE {} |
| 181 | 179 |
| 182 scoped_ptr<base::MessageLoop> message_loop_; | 180 content::TestBrowserThreadBundle thread_bundle_; |
| 183 scoped_ptr<BrowserThreadImpl> ui_thread_; | |
| 184 scoped_ptr<BrowserThreadImpl> io_thread_; | |
| 185 | 181 |
| 182 net::TestURLRequestContext test_url_request_context_; |
| 186 content::MockResourceContext resource_context_; | 183 content::MockResourceContext resource_context_; |
| 187 }; | 184 }; |
| 188 | 185 |
| 189 // When OpenSSL is used, client cert store is not being queried in | 186 // When OpenSSL is used, client cert store is not being queried in |
| 190 // ResourceLoader. | 187 // ResourceLoader. |
| 191 #if !defined(USE_OPENSSL) | 188 #if !defined(USE_OPENSSL) |
| 192 // Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() | 189 // Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() |
| 193 // causes client cert store to be queried for certificates and if the returned | 190 // causes client cert store to be queried for certificates and if the returned |
| 194 // certificates are correctly passed to the content browser client for | 191 // certificates are correctly passed to the content browser client for |
| 195 // selection. | 192 // selection. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 std::vector<std::string> dummy_authority(1, "dummy"); | 226 std::vector<std::string> dummy_authority(1, "dummy"); |
| 230 cert_request_info->cert_authorities = dummy_authority; | 227 cert_request_info->cert_authorities = dummy_authority; |
| 231 | 228 |
| 232 // Plug in test content browser client. | 229 // Plug in test content browser client. |
| 233 SelectCertificateBrowserClient test_client; | 230 SelectCertificateBrowserClient test_client; |
| 234 ContentBrowserClient* old_client = SetBrowserClientForTesting(&test_client); | 231 ContentBrowserClient* old_client = SetBrowserClientForTesting(&test_client); |
| 235 | 232 |
| 236 // Everything is set up. Trigger the resource loader certificate request event | 233 // Everything is set up. Trigger the resource loader certificate request event |
| 237 // and run the message loop. | 234 // and run the message loop. |
| 238 loader.OnCertificateRequested(raw_ptr_to_request, cert_request_info.get()); | 235 loader.OnCertificateRequested(raw_ptr_to_request, cert_request_info.get()); |
| 239 message_loop_->RunUntilIdle(); | 236 base::RunLoop().RunUntilIdle(); |
| 240 | 237 |
| 241 // Restore the original content browser client. | 238 // Restore the original content browser client. |
| 242 SetBrowserClientForTesting(old_client); | 239 SetBrowserClientForTesting(old_client); |
| 243 | 240 |
| 244 // Check if the test store was queried against correct |cert_authorities|. | 241 // Check if the test store was queried against correct |cert_authorities|. |
| 245 EXPECT_EQ(1, raw_ptr_to_store->request_count()); | 242 EXPECT_EQ(1, raw_ptr_to_store->request_count()); |
| 246 EXPECT_EQ(dummy_authority, raw_ptr_to_store->requested_authorities()); | 243 EXPECT_EQ(dummy_authority, raw_ptr_to_store->requested_authorities()); |
| 247 | 244 |
| 248 // Check if the retrieved certificates were passed to the content browser | 245 // Check if the retrieved certificates were passed to the content browser |
| 249 // client. | 246 // client. |
| 250 EXPECT_EQ(1, test_client.call_count()); | 247 EXPECT_EQ(1, test_client.call_count()); |
| 251 EXPECT_EQ(dummy_certs, test_client.passed_certs()); | 248 EXPECT_EQ(dummy_certs, test_client.passed_certs()); |
| 252 } | 249 } |
| 253 #endif // !defined(OPENSSL) | 250 #endif // !defined(OPENSSL) |
| 254 | 251 |
| 255 } // namespace content | 252 } // namespace content |
| OLD | NEW |