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/files/file.h" | 7 #include "base/files/file.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
11 #include "content/browser/browser_thread_impl.h" | 11 #include "content/browser/browser_thread_impl.h" |
12 #include "content/browser/loader/redirect_to_file_resource_handler.h" | 12 #include "content/browser/loader/redirect_to_file_resource_handler.h" |
13 #include "content/browser/loader/resource_loader_delegate.h" | 13 #include "content/browser/loader/resource_loader_delegate.h" |
14 #include "content/public/browser/client_certificate_delegate.h" | |
14 #include "content/public/browser/resource_request_info.h" | 15 #include "content/public/browser/resource_request_info.h" |
15 #include "content/public/common/resource_response.h" | 16 #include "content/public/common/resource_response.h" |
16 #include "content/public/test/mock_resource_context.h" | 17 #include "content/public/test/mock_resource_context.h" |
18 #include "content/public/test/test_browser_context.h" | |
17 #include "content/public/test/test_browser_thread_bundle.h" | 19 #include "content/public/test/test_browser_thread_bundle.h" |
20 #include "content/public/test/test_renderer_host.h" | |
18 #include "content/test/test_content_browser_client.h" | 21 #include "content/test/test_content_browser_client.h" |
22 #include "content/test/test_web_contents.h" | |
19 #include "ipc/ipc_message.h" | 23 #include "ipc/ipc_message.h" |
20 #include "net/base/io_buffer.h" | 24 #include "net/base/io_buffer.h" |
21 #include "net/base/mock_file_stream.h" | 25 #include "net/base/mock_file_stream.h" |
22 #include "net/base/request_priority.h" | 26 #include "net/base/request_priority.h" |
23 #include "net/cert/x509_certificate.h" | 27 #include "net/cert/x509_certificate.h" |
24 #include "net/ssl/client_cert_store.h" | 28 #include "net/ssl/client_cert_store.h" |
25 #include "net/ssl/ssl_cert_request_info.h" | 29 #include "net/ssl/ssl_cert_request_info.h" |
26 #include "net/url_request/url_request.h" | 30 #include "net/url_request/url_request.h" |
27 #include "net/url_request/url_request_job_factory_impl.h" | 31 #include "net/url_request/url_request_job_factory_impl.h" |
28 #include "net/url_request/url_request_test_job.h" | 32 #include "net/url_request/url_request_test_job.h" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 int total_bytes_downloaded_; | 236 int total_bytes_downloaded_; |
233 }; | 237 }; |
234 | 238 |
235 // Test browser client that captures calls to SelectClientCertificates and | 239 // Test browser client that captures calls to SelectClientCertificates and |
236 // records the arguments of the most recent call for later inspection. | 240 // records the arguments of the most recent call for later inspection. |
237 class SelectCertificateBrowserClient : public TestContentBrowserClient { | 241 class SelectCertificateBrowserClient : public TestContentBrowserClient { |
238 public: | 242 public: |
239 SelectCertificateBrowserClient() : call_count_(0) {} | 243 SelectCertificateBrowserClient() : call_count_(0) {} |
240 | 244 |
241 void SelectClientCertificate( | 245 void SelectClientCertificate( |
242 int render_process_id, | 246 WebContents* web_contents, |
243 int render_view_id, | |
244 net::SSLCertRequestInfo* cert_request_info, | 247 net::SSLCertRequestInfo* cert_request_info, |
245 const base::Callback<void(net::X509Certificate*)>& callback) override { | 248 scoped_ptr<ClientCertificateDelegate> delegate) override { |
246 ++call_count_; | 249 ++call_count_; |
247 passed_certs_ = cert_request_info->client_certs; | 250 passed_certs_ = cert_request_info->client_certs; |
248 } | 251 } |
249 | 252 |
250 int call_count() { | 253 int call_count() { |
251 return call_count_; | 254 return call_count_; |
252 } | 255 } |
253 | 256 |
254 net::CertificateList passed_certs() { | 257 net::CertificateList passed_certs() { |
255 return passed_certs_; | 258 return passed_certs_; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
310 return net::URLRequestTestJob::test_data_1(); | 313 return net::URLRequestTestJob::test_data_1(); |
311 } | 314 } |
312 | 315 |
313 virtual scoped_ptr<ResourceHandler> WrapResourceHandler( | 316 virtual scoped_ptr<ResourceHandler> WrapResourceHandler( |
314 scoped_ptr<ResourceHandlerStub> leaf_handler, | 317 scoped_ptr<ResourceHandlerStub> leaf_handler, |
315 net::URLRequest* request) { | 318 net::URLRequest* request) { |
316 return leaf_handler.Pass(); | 319 return leaf_handler.Pass(); |
317 } | 320 } |
318 | 321 |
319 void SetUp() override { | 322 void SetUp() override { |
320 const int kRenderProcessId = 1; | 323 browser_context_.reset(new TestBrowserContext()); |
321 const int kRenderViewId = 2; | 324 scoped_refptr<SiteInstance> site_instance = |
325 SiteInstance::Create(browser_context_.get()); | |
326 web_contents_.reset( | |
327 TestWebContents::Create(browser_context_.get(), site_instance.get())); | |
mmenke
2015/02/10 17:19:10
I'm confused. Why are these needed? Aren't we ju
davidben
2015/02/10 20:28:49
There's a handful of tests that install a custom o
mmenke
2015/02/11 17:09:16
Ah, somehow I was missing SelectCertificateBrowser
davidben
2015/02/12 22:55:15
Done.
| |
328 RenderFrameHost* rfh = web_contents_->GetMainFrame(); | |
322 | 329 |
323 scoped_ptr<net::URLRequest> request( | 330 scoped_ptr<net::URLRequest> request( |
324 resource_context_.GetRequestContext()->CreateRequest( | 331 resource_context_.GetRequestContext()->CreateRequest( |
325 test_url(), | 332 test_url(), |
326 net::DEFAULT_PRIORITY, | 333 net::DEFAULT_PRIORITY, |
327 NULL /* delegate */, | 334 NULL /* delegate */, |
328 NULL /* cookie_store */)); | 335 NULL /* cookie_store */)); |
329 raw_ptr_to_request_ = request.get(); | 336 raw_ptr_to_request_ = request.get(); |
330 ResourceRequestInfo::AllocateForTesting(request.get(), | 337 ResourceRequestInfo::AllocateForTesting(request.get(), |
331 RESOURCE_TYPE_MAIN_FRAME, | 338 RESOURCE_TYPE_MAIN_FRAME, |
332 &resource_context_, | 339 &resource_context_, |
333 kRenderProcessId, | 340 rfh->GetProcess()->GetID(), |
334 kRenderViewId, | |
335 MSG_ROUTING_NONE, | 341 MSG_ROUTING_NONE, |
342 rfh->GetRoutingID(), | |
mmenke
2015/02/10 17:19:10
Think you messed up the order here
davidben
2015/02/10 20:28:49
I'm passing in RFH ID, and not RVH ID. Getting the
| |
336 true, // is_main_frame | 343 true, // is_main_frame |
337 false, // parent_is_main_frame | 344 false, // parent_is_main_frame |
338 true, // allow_download | 345 true, // allow_download |
339 false); // is_async | 346 false); // is_async |
340 scoped_ptr<ResourceHandlerStub> resource_handler( | 347 scoped_ptr<ResourceHandlerStub> resource_handler( |
341 new ResourceHandlerStub(request.get())); | 348 new ResourceHandlerStub(request.get())); |
342 raw_ptr_resource_handler_ = resource_handler.get(); | 349 raw_ptr_resource_handler_ = resource_handler.get(); |
343 loader_.reset(new ResourceLoader( | 350 loader_.reset(new ResourceLoader( |
344 request.Pass(), | 351 request.Pass(), |
345 WrapResourceHandler(resource_handler.Pass(), raw_ptr_to_request_), | 352 WrapResourceHandler(resource_handler.Pass(), raw_ptr_to_request_), |
346 this)); | 353 this)); |
347 } | 354 } |
348 | 355 |
356 void TearDown() override { | |
357 web_contents_.reset(); | |
358 base::RunLoop().RunUntilIdle(); | |
359 } | |
360 | |
349 // ResourceLoaderDelegate: | 361 // ResourceLoaderDelegate: |
350 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( | 362 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( |
351 ResourceLoader* loader, | 363 ResourceLoader* loader, |
352 net::AuthChallengeInfo* auth_info) override { | 364 net::AuthChallengeInfo* auth_info) override { |
353 return NULL; | 365 return NULL; |
354 } | 366 } |
355 bool HandleExternalProtocol(ResourceLoader* loader, | 367 bool HandleExternalProtocol(ResourceLoader* loader, |
356 const GURL& url) override { | 368 const GURL& url) override { |
357 return false; | 369 return false; |
358 } | 370 } |
359 void DidStartRequest(ResourceLoader* loader) override {} | 371 void DidStartRequest(ResourceLoader* loader) override {} |
360 void DidReceiveRedirect(ResourceLoader* loader, | 372 void DidReceiveRedirect(ResourceLoader* loader, |
361 const GURL& new_url) override {} | 373 const GURL& new_url) override {} |
362 void DidReceiveResponse(ResourceLoader* loader) override {} | 374 void DidReceiveResponse(ResourceLoader* loader) override {} |
363 void DidFinishLoading(ResourceLoader* loader) override {} | 375 void DidFinishLoading(ResourceLoader* loader) override {} |
364 | 376 |
365 content::TestBrowserThreadBundle thread_bundle_; | 377 TestBrowserThreadBundle thread_bundle_; |
378 RenderViewHostTestEnabler rvh_test_enabler_; | |
366 | 379 |
367 net::URLRequestJobFactoryImpl job_factory_; | 380 net::URLRequestJobFactoryImpl job_factory_; |
368 net::TestURLRequestContext test_url_request_context_; | 381 net::TestURLRequestContext test_url_request_context_; |
369 ResourceContextStub resource_context_; | 382 ResourceContextStub resource_context_; |
383 scoped_ptr<TestBrowserContext> browser_context_; | |
384 scoped_ptr<TestWebContents> web_contents_; | |
370 | 385 |
371 // The ResourceLoader owns the URLRequest and the ResourceHandler. | 386 // The ResourceLoader owns the URLRequest and the ResourceHandler. |
372 ResourceHandlerStub* raw_ptr_resource_handler_; | 387 ResourceHandlerStub* raw_ptr_resource_handler_; |
373 net::URLRequest* raw_ptr_to_request_; | 388 net::URLRequest* raw_ptr_to_request_; |
374 scoped_ptr<ResourceLoader> loader_; | 389 scoped_ptr<ResourceLoader> loader_; |
375 }; | 390 }; |
376 | 391 |
377 // Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() | 392 // Verifies if a call to net::UrlRequest::Delegate::OnCertificateRequested() |
378 // causes client cert store to be queried for certificates and if the returned | 393 // causes client cert store to be queried for certificates and if the returned |
379 // certificates are correctly passed to the content browser client for | 394 // certificates are correctly passed to the content browser client for |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
760 ASSERT_TRUE(base::ReadFileToString(temp_path(), &contents)); | 775 ASSERT_TRUE(base::ReadFileToString(temp_path(), &contents)); |
761 EXPECT_EQ(test_data(), contents); | 776 EXPECT_EQ(test_data(), contents); |
762 | 777 |
763 // Release the loader. The file should be gone now. | 778 // Release the loader. The file should be gone now. |
764 ReleaseLoader(); | 779 ReleaseLoader(); |
765 base::RunLoop().RunUntilIdle(); | 780 base::RunLoop().RunUntilIdle(); |
766 EXPECT_FALSE(base::PathExists(temp_path())); | 781 EXPECT_FALSE(base::PathExists(temp_path())); |
767 } | 782 } |
768 | 783 |
769 } // namespace content | 784 } // namespace content |
OLD | NEW |