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/macros.h" | 9 #include "base/macros.h" |
10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
12 #include "content/browser/browser_thread_impl.h" | 12 #include "content/browser/browser_thread_impl.h" |
13 #include "content/browser/loader/redirect_to_file_resource_handler.h" | 13 #include "content/browser/loader/redirect_to_file_resource_handler.h" |
14 #include "content/browser/loader/resource_loader_delegate.h" | 14 #include "content/browser/loader/resource_loader_delegate.h" |
15 #include "content/public/browser/client_certificate_delegate.h" | 15 #include "content/public/browser/client_certificate_delegate.h" |
16 #include "content/public/browser/resource_request_info.h" | 16 #include "content/public/browser/resource_request_info.h" |
17 #include "content/public/common/content_paths.h" | |
17 #include "content/public/common/resource_response.h" | 18 #include "content/public/common/resource_response.h" |
18 #include "content/public/test/mock_resource_context.h" | 19 #include "content/public/test/mock_resource_context.h" |
19 #include "content/public/test/test_browser_context.h" | 20 #include "content/public/test/test_browser_context.h" |
20 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
21 #include "content/public/test/test_renderer_host.h" | 22 #include "content/public/test/test_renderer_host.h" |
22 #include "content/test/test_content_browser_client.h" | 23 #include "content/test/test_content_browser_client.h" |
23 #include "content/test/test_web_contents.h" | 24 #include "content/test/test_web_contents.h" |
24 #include "ipc/ipc_message.h" | 25 #include "ipc/ipc_message.h" |
25 #include "net/base/io_buffer.h" | 26 #include "net/base/io_buffer.h" |
26 #include "net/base/mock_file_stream.h" | 27 #include "net/base/mock_file_stream.h" |
27 #include "net/base/net_errors.h" | 28 #include "net/base/net_errors.h" |
28 #include "net/base/request_priority.h" | 29 #include "net/base/request_priority.h" |
29 #include "net/cert/x509_certificate.h" | 30 #include "net/cert/x509_certificate.h" |
30 #include "net/ssl/client_cert_store.h" | 31 #include "net/ssl/client_cert_store.h" |
31 #include "net/ssl/ssl_cert_request_info.h" | 32 #include "net/ssl/ssl_cert_request_info.h" |
33 #include "net/test/embedded_test_server/embedded_test_server.h" | |
32 #include "net/url_request/url_request.h" | 34 #include "net/url_request/url_request.h" |
33 #include "net/url_request/url_request_job_factory.h" | 35 #include "net/url_request/url_request_job_factory.h" |
34 #include "net/url_request/url_request_job_factory_impl.h" | 36 #include "net/url_request/url_request_job_factory_impl.h" |
35 #include "net/url_request/url_request_test_job.h" | 37 #include "net/url_request/url_request_test_job.h" |
36 #include "net/url_request/url_request_test_util.h" | 38 #include "net/url_request/url_request_test_util.h" |
37 #include "storage/browser/blob/shareable_file_reference.h" | 39 #include "storage/browser/blob/shareable_file_reference.h" |
38 #include "testing/gtest/include/gtest/gtest.h" | 40 #include "testing/gtest/include/gtest/gtest.h" |
39 | 41 |
40 using storage::ShareableFileReference; | 42 using storage::ShareableFileReference; |
41 | 43 |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 virtual net::URLRequestJobFactory::ProtocolHandler* CreateProtocolHandler() { | 385 virtual net::URLRequestJobFactory::ProtocolHandler* CreateProtocolHandler() { |
384 return net::URLRequestTestJob::CreateProtocolHandler(); | 386 return net::URLRequestTestJob::CreateProtocolHandler(); |
385 } | 387 } |
386 | 388 |
387 virtual scoped_ptr<ResourceHandler> WrapResourceHandler( | 389 virtual scoped_ptr<ResourceHandler> WrapResourceHandler( |
388 scoped_ptr<ResourceHandlerStub> leaf_handler, | 390 scoped_ptr<ResourceHandlerStub> leaf_handler, |
389 net::URLRequest* request) { | 391 net::URLRequest* request) { |
390 return leaf_handler.Pass(); | 392 return leaf_handler.Pass(); |
391 } | 393 } |
392 | 394 |
393 void SetUp() override { | 395 void SetUpResourceLoader(const GURL& url) { |
394 job_factory_.SetProtocolHandler("test", CreateProtocolHandler()); | |
395 | |
396 browser_context_.reset(new TestBrowserContext()); | |
397 scoped_refptr<SiteInstance> site_instance = | |
398 SiteInstance::Create(browser_context_.get()); | |
399 web_contents_.reset( | |
400 TestWebContents::Create(browser_context_.get(), site_instance.get())); | |
401 RenderFrameHost* rfh = web_contents_->GetMainFrame(); | |
402 | |
403 scoped_ptr<net::URLRequest> request( | 396 scoped_ptr<net::URLRequest> request( |
404 resource_context_.GetRequestContext()->CreateRequest( | 397 resource_context_.GetRequestContext()->CreateRequest( |
405 test_url(), | 398 url, |
406 net::DEFAULT_PRIORITY, | 399 net::DEFAULT_PRIORITY, |
407 NULL /* delegate */)); | 400 NULL /* delegate */)); |
408 raw_ptr_to_request_ = request.get(); | 401 raw_ptr_to_request_ = request.get(); |
402 | |
403 RenderFrameHost* rfh = web_contents_->GetMainFrame(); | |
409 ResourceRequestInfo::AllocateForTesting( | 404 ResourceRequestInfo::AllocateForTesting( |
410 request.get(), RESOURCE_TYPE_MAIN_FRAME, &resource_context_, | 405 request.get(), RESOURCE_TYPE_MAIN_FRAME, &resource_context_, |
411 rfh->GetProcess()->GetID(), rfh->GetRenderViewHost()->GetRoutingID(), | 406 rfh->GetProcess()->GetID(), rfh->GetRenderViewHost()->GetRoutingID(), |
412 rfh->GetRoutingID(), true /* is_main_frame */, | 407 rfh->GetRoutingID(), true /* is_main_frame */, |
413 false /* parent_is_main_frame */, true /* allow_download */, | 408 false /* parent_is_main_frame */, true /* allow_download */, |
414 false /* is_async */); | 409 false /* is_async */); |
415 scoped_ptr<ResourceHandlerStub> resource_handler( | 410 scoped_ptr<ResourceHandlerStub> resource_handler( |
416 new ResourceHandlerStub(request.get())); | 411 new ResourceHandlerStub(request.get())); |
417 raw_ptr_resource_handler_ = resource_handler.get(); | 412 raw_ptr_resource_handler_ = resource_handler.get(); |
418 loader_.reset(new ResourceLoader( | 413 loader_.reset(new ResourceLoader( |
419 request.Pass(), | 414 request.Pass(), |
420 WrapResourceHandler(resource_handler.Pass(), raw_ptr_to_request_), | 415 WrapResourceHandler(resource_handler.Pass(), raw_ptr_to_request_), |
421 this)); | 416 this)); |
422 } | 417 } |
423 | 418 |
419 void SetUp() override { | |
420 job_factory_.SetProtocolHandler("test", CreateProtocolHandler()); | |
421 | |
422 browser_context_.reset(new TestBrowserContext()); | |
423 scoped_refptr<SiteInstance> site_instance = | |
424 SiteInstance::Create(browser_context_.get()); | |
425 web_contents_.reset( | |
426 TestWebContents::Create(browser_context_.get(), site_instance.get())); | |
427 | |
428 SetUpResourceLoader(test_url()); | |
429 } | |
430 | |
424 void TearDown() override { | 431 void TearDown() override { |
425 // Destroy the WebContents and pump the event loop before destroying | 432 // Destroy the WebContents and pump the event loop before destroying |
426 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup | 433 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup |
427 // tasks complete. | 434 // tasks complete. |
428 web_contents_.reset(); | 435 web_contents_.reset(); |
429 base::RunLoop().RunUntilIdle(); | 436 base::RunLoop().RunUntilIdle(); |
430 } | 437 } |
431 | 438 |
432 // ResourceLoaderDelegate: | 439 // ResourceLoaderDelegate: |
433 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( | 440 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
633 EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); | 640 EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
634 | 641 |
635 raw_ptr_resource_handler_->Resume(); | 642 raw_ptr_resource_handler_->Resume(); |
636 base::RunLoop().RunUntilIdle(); | 643 base::RunLoop().RunUntilIdle(); |
637 | 644 |
638 EXPECT_TRUE(raw_ptr_resource_handler_->received_response_completed()); | 645 EXPECT_TRUE(raw_ptr_resource_handler_->received_response_completed()); |
639 EXPECT_EQ(net::URLRequestStatus::SUCCESS, | 646 EXPECT_EQ(net::URLRequestStatus::SUCCESS, |
640 raw_ptr_resource_handler_->status().status()); | 647 raw_ptr_resource_handler_->status().status()); |
641 } | 648 } |
642 | 649 |
650 TEST_F(ResourceLoaderTest, UploadProgress) { | |
651 // Set up a test server. | |
652 net::test_server::EmbeddedTestServer server; | |
653 ASSERT_TRUE(server.InitializeAndWaitUntilReady()); | |
654 base::FilePath path; | |
655 PathService::Get(content::DIR_TEST_DATA, &path); | |
656 server.ServeFilesFromDirectory(path); | |
657 | |
658 SetUpResourceLoader(server.GetURL("/title1.html")); | |
659 | |
660 raw_ptr_to_request_->EnableChunkedUpload(); | |
661 raw_ptr_to_request_->AppendChunkToUpload("test", 4, true); | |
662 | |
663 loader_->StartRequest(); | |
664 base::RunLoop().RunUntilIdle(); | |
Andre
2015/05/20 21:05:12
What should we do here?
What is the best way to wa
mmenke
2015/05/20 21:15:04
My suggestion: Add a method to ResourceHandlerStu
Andre
2015/05/20 22:36:10
Thanks, that works well.
| |
665 } | |
666 | |
643 class ResourceLoaderRedirectToFileTest : public ResourceLoaderTest { | 667 class ResourceLoaderRedirectToFileTest : public ResourceLoaderTest { |
644 public: | 668 public: |
645 ResourceLoaderRedirectToFileTest() | 669 ResourceLoaderRedirectToFileTest() |
646 : file_stream_(NULL), | 670 : file_stream_(NULL), |
647 redirect_to_file_resource_handler_(NULL) { | 671 redirect_to_file_resource_handler_(NULL) { |
648 } | 672 } |
649 | 673 |
650 base::FilePath temp_path() const { return temp_path_; } | 674 base::FilePath temp_path() const { return temp_path_; } |
651 ShareableFileReference* deletable_file() const { | 675 ShareableFileReference* deletable_file() const { |
652 return deletable_file_.get(); | 676 return deletable_file_.get(); |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
884 ASSERT_TRUE(base::ReadFileToString(temp_path(), &contents)); | 908 ASSERT_TRUE(base::ReadFileToString(temp_path(), &contents)); |
885 EXPECT_EQ(test_data(), contents); | 909 EXPECT_EQ(test_data(), contents); |
886 | 910 |
887 // Release the loader. The file should be gone now. | 911 // Release the loader. The file should be gone now. |
888 ReleaseLoader(); | 912 ReleaseLoader(); |
889 base::RunLoop().RunUntilIdle(); | 913 base::RunLoop().RunUntilIdle(); |
890 EXPECT_FALSE(base::PathExists(temp_path())); | 914 EXPECT_FALSE(base::PathExists(temp_path())); |
891 } | 915 } |
892 | 916 |
893 } // namespace content | 917 } // namespace content |
OLD | NEW |