Chromium Code Reviews| 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 6ca2ac10da28978c4b8678b8264b62465151aa4a..0390508f5b4be45329bccefe67a7d171acdedc7e 100644 |
| --- a/content/browser/loader/resource_loader_unittest.cc |
| +++ b/content/browser/loader/resource_loader_unittest.cc |
| @@ -22,6 +22,7 @@ |
| #include "content/browser/browser_thread_impl.h" |
| #include "content/browser/loader/redirect_to_file_resource_handler.h" |
| #include "content/browser/loader/resource_loader_delegate.h" |
| +#include "content/browser/loader/test_resource_handler.h" |
| #include "content/public/browser/client_certificate_delegate.h" |
| #include "content/public/browser/resource_request_info.h" |
| #include "content/public/common/content_paths.h" |
| @@ -49,6 +50,7 @@ |
| #include "net/test/cert_test_util.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| #include "net/test/test_data_directory.h" |
| +#include "net/test/url_request/url_request_failed_job.h" |
| #include "net/url_request/url_request.h" |
| #include "net/url_request/url_request_filter.h" |
| #include "net/url_request/url_request_interceptor.h" |
| @@ -265,177 +267,6 @@ class MockHTTPSJobURLRequestInterceptor : public net::URLRequestInterceptor { |
| }; |
| // Arbitrary read buffer size. |
| -const int kReadBufSize = 1024; |
| - |
| -// Dummy implementation of ResourceHandler, instance of which is needed to |
| -// initialize ResourceLoader. |
| -class ResourceHandlerStub : public ResourceHandler { |
| - public: |
| - explicit ResourceHandlerStub(net::URLRequest* request) |
| - : ResourceHandler(request), |
| - read_buffer_(new net::IOBuffer(kReadBufSize)), |
| - defer_request_on_will_start_(false), |
| - expect_reads_(true), |
| - cancel_on_read_completed_(false), |
| - defer_eof_(false), |
| - received_on_will_read_(false), |
| - received_eof_(false), |
| - received_response_completed_(false), |
| - received_request_redirected_(false), |
| - total_bytes_downloaded_(0), |
| - observed_effective_connection_type_( |
| - net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) {} |
| - |
| - // If true, defers the resource load in OnWillStart. |
| - void set_defer_request_on_will_start(bool defer_request_on_will_start) { |
| - defer_request_on_will_start_ = defer_request_on_will_start; |
| - } |
| - |
| - // If true, expect OnWillRead / OnReadCompleted pairs for handling |
| - // data. Otherwise, expect OnDataDownloaded. |
| - void set_expect_reads(bool expect_reads) { expect_reads_ = expect_reads; } |
| - |
| - // If true, cancel the request in OnReadCompleted by returning false. |
| - void set_cancel_on_read_completed(bool cancel_on_read_completed) { |
| - cancel_on_read_completed_ = cancel_on_read_completed; |
| - } |
| - |
| - // If true, cancel the request in OnReadCompleted by returning false. |
| - void set_defer_eof(bool defer_eof) { defer_eof_ = defer_eof; } |
| - |
| - const GURL& start_url() const { return start_url_; } |
| - ResourceResponse* response() const { return response_.get(); } |
| - ResourceResponse* redirect_response() const { |
| - return redirect_response_.get(); |
| - } |
| - bool received_response_completed() const { |
| - return received_response_completed_; |
| - } |
| - bool received_request_redirected() const { |
| - return received_request_redirected_; |
| - } |
| - const net::URLRequestStatus& status() const { return status_; } |
| - int total_bytes_downloaded() const { return total_bytes_downloaded_; } |
| - |
| - net::EffectiveConnectionType observed_effective_connection_type() const { |
| - return observed_effective_connection_type_; |
| - } |
| - |
| - void Resume() { |
| - controller()->Resume(); |
| - } |
| - |
| - bool OnRequestRedirected(const net::RedirectInfo& redirect_info, |
| - ResourceResponse* response, |
| - bool* defer) override { |
| - redirect_response_ = response; |
| - received_request_redirected_ = true; |
| - return true; |
| - } |
| - |
| - bool OnResponseStarted(ResourceResponse* response, bool* defer) override { |
| - EXPECT_FALSE(response_.get()); |
| - response_ = response; |
| - observed_effective_connection_type_ = |
| - response->head.effective_connection_type; |
| - return true; |
| - } |
| - |
| - bool OnWillStart(const GURL& url, bool* defer) override { |
| - EXPECT_TRUE(start_url_.is_empty()); |
| - start_url_ = url; |
| - if (defer_request_on_will_start_) { |
| - *defer = true; |
| - deferred_run_loop_.Quit(); |
| - } |
| - return true; |
| - } |
| - |
| - bool OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
| - int* buf_size, |
| - int min_size) override { |
| - EXPECT_TRUE(expect_reads_); |
| - EXPECT_FALSE(received_on_will_read_); |
| - EXPECT_FALSE(received_eof_); |
| - EXPECT_FALSE(received_response_completed_); |
| - |
| - *buf = read_buffer_; |
| - *buf_size = kReadBufSize; |
| - received_on_will_read_ = true; |
| - return true; |
| - } |
| - |
| - bool OnReadCompleted(int bytes_read, bool* defer) override { |
| - EXPECT_TRUE(received_on_will_read_); |
| - EXPECT_TRUE(expect_reads_); |
| - EXPECT_FALSE(received_response_completed_); |
| - |
| - if (bytes_read == 0) { |
| - received_eof_ = true; |
| - if (defer_eof_) { |
| - defer_eof_ = false; |
| - *defer = true; |
| - deferred_run_loop_.Quit(); |
| - } |
| - } |
| - |
| - // Need another OnWillRead() call before seeing an OnReadCompleted(). |
| - received_on_will_read_ = false; |
| - |
| - return !cancel_on_read_completed_; |
| - } |
| - |
| - void OnResponseCompleted(const net::URLRequestStatus& status, |
| - bool* defer) override { |
| - EXPECT_FALSE(received_response_completed_); |
| - if (status.is_success() && expect_reads_) |
| - EXPECT_TRUE(received_eof_); |
| - |
| - received_response_completed_ = true; |
| - status_ = status; |
| - response_completed_run_loop_.Quit(); |
| - } |
| - |
| - void OnDataDownloaded(int bytes_downloaded) override { |
| - EXPECT_FALSE(expect_reads_); |
| - total_bytes_downloaded_ += bytes_downloaded; |
| - } |
| - |
| - // Waits for the the first deferred step to run, if there is one. |
| - void WaitForDeferredStep() { |
| - DCHECK(defer_request_on_will_start_ || defer_eof_); |
| - deferred_run_loop_.Run(); |
| - } |
| - |
| - // Waits until the response has completed. |
| - void WaitForResponseComplete() { |
| - response_completed_run_loop_.Run(); |
| - EXPECT_TRUE(received_response_completed_); |
| - } |
| - |
| - private: |
| - scoped_refptr<net::IOBuffer> read_buffer_; |
| - |
| - bool defer_request_on_will_start_; |
| - bool expect_reads_; |
| - bool cancel_on_read_completed_; |
| - bool defer_eof_; |
| - |
| - GURL start_url_; |
| - scoped_refptr<ResourceResponse> response_; |
| - scoped_refptr<ResourceResponse> redirect_response_; |
| - bool received_on_will_read_; |
| - bool received_eof_; |
| - bool received_response_completed_; |
| - bool received_request_redirected_; |
| - net::URLRequestStatus status_; |
| - int total_bytes_downloaded_; |
| - base::RunLoop deferred_run_loop_; |
| - base::RunLoop response_completed_run_loop_; |
| - std::unique_ptr<base::RunLoop> wait_for_progress_run_loop_; |
| - net::EffectiveConnectionType observed_effective_connection_type_; |
| -}; |
| - |
| // Test browser client that captures calls to SelectClientCertificates and |
| // records the arguments of the most recent call for later inspection. |
| class SelectCertificateBrowserClient : public TestContentBrowserClient { |
| @@ -565,7 +396,9 @@ class ResourceLoaderTest : public testing::Test, |
| test_url_request_context_.Init(); |
| } |
| - GURL test_url() const { return net::URLRequestTestJob::test_url_1(); } |
| + GURL test_url() const { |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
nit, suggestion: Given the contrast below with tes
mmenke
2016/12/02 21:26:52
Done - called it test_redirect_url(), and hoisted
|
| + return net::URLRequestTestJob::test_url_redirect_to_url_1(); |
| + } |
| TestNetworkQualityEstimator* network_quality_estimator() { |
| return &network_quality_estimator_; |
| @@ -581,7 +414,7 @@ class ResourceLoaderTest : public testing::Test, |
| } |
| virtual std::unique_ptr<ResourceHandler> WrapResourceHandler( |
| - std::unique_ptr<ResourceHandlerStub> leaf_handler, |
| + std::unique_ptr<TestResourceHandler> leaf_handler, |
| net::URLRequest* request) { |
| return std::move(leaf_handler); |
| } |
| @@ -604,8 +437,8 @@ class ResourceLoaderTest : public testing::Test, |
| rfh->GetRoutingID(), belongs_to_main_frame, |
| false /* parent_is_main_frame */, true /* allow_download */, |
| false /* is_async */, false /* is_using_lofi_ */); |
| - std::unique_ptr<ResourceHandlerStub> resource_handler( |
| - new ResourceHandlerStub(request.get())); |
| + std::unique_ptr<TestResourceHandler> resource_handler( |
| + new TestResourceHandler(nullptr, nullptr)); |
| raw_ptr_resource_handler_ = resource_handler.get(); |
| loader_.reset(new ResourceLoader( |
| std::move(request), |
| @@ -615,17 +448,14 @@ class ResourceLoaderTest : public testing::Test, |
| void SetUp() override { |
| job_factory_.SetProtocolHandler("test", CreateProtocolHandler()); |
| + net::URLRequestFailedJob::AddUrlHandler(); |
| browser_context_.reset(new TestBrowserContext()); |
| scoped_refptr<SiteInstance> site_instance = |
| SiteInstance::Create(browser_context_.get()); |
| web_contents_.reset( |
| TestWebContents::Create(browser_context_.get(), site_instance.get())); |
| - |
| - std::unique_ptr<net::URLRequest> request( |
| - resource_context_.GetRequestContext()->CreateRequest( |
| - test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */)); |
| - SetUpResourceLoader(std::move(request), RESOURCE_TYPE_MAIN_FRAME, true); |
| + SetUpResourceLoaderForUrl(test_url()); |
| } |
| void TearDown() override { |
| @@ -633,9 +463,20 @@ class ResourceLoaderTest : public testing::Test, |
| // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup |
| // tasks complete. |
| web_contents_.reset(); |
| + |
| + // Clean up handlers. |
| + net::URLRequestFilter::GetInstance()->ClearHandlers(); |
| + |
| base::RunLoop().RunUntilIdle(); |
| } |
| + void SetUpResourceLoaderForUrl(const GURL& test_url) { |
| + std::unique_ptr<net::URLRequest> request( |
| + resource_context_.GetRequestContext()->CreateRequest( |
| + test_url, net::DEFAULT_PRIORITY, nullptr /* delegate */)); |
| + SetUpResourceLoader(std::move(request), RESOURCE_TYPE_MAIN_FRAME, true); |
| + } |
| + |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
nit, suggestion: It would feel more natural to me
mmenke
2016/12/02 21:26:52
It's down here to it doesn't interrupt the two tes
|
| void SetClientCertStore(std::unique_ptr<net::ClientCertStore> store) { |
| dummy_cert_store_ = std::move(store); |
| } |
| @@ -648,14 +489,36 @@ class ResourceLoaderTest : public testing::Test, |
| } |
| bool HandleExternalProtocol(ResourceLoader* loader, |
| const GURL& url) override { |
| + EXPECT_EQ(loader, loader_.get()); |
| return false; |
| } |
| - void DidStartRequest(ResourceLoader* loader) override {} |
| + void DidStartRequest(ResourceLoader* loader) override { |
| + EXPECT_EQ(loader, loader_.get()); |
| + EXPECT_EQ(0, did_finish_loading_); |
| + EXPECT_EQ(0, did_start_request_); |
| + ++did_start_request_; |
| + } |
| void DidReceiveRedirect(ResourceLoader* loader, |
| const GURL& new_url, |
| - ResourceResponse* response) override {} |
| - void DidReceiveResponse(ResourceLoader* loader) override {} |
| - void DidFinishLoading(ResourceLoader* loader) override {} |
| + ResourceResponse* response) override { |
| + EXPECT_EQ(loader, loader_.get()); |
| + EXPECT_EQ(0, did_finish_loading_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_start_request_); |
| + ++did_received_redirect_; |
| + } |
| + void DidReceiveResponse(ResourceLoader* loader) override { |
| + EXPECT_EQ(loader, loader_.get()); |
| + EXPECT_EQ(0, did_finish_loading_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_start_request_); |
| + ++did_receive_response_; |
| + } |
| + void DidFinishLoading(ResourceLoader* loader) override { |
| + EXPECT_EQ(loader, loader_.get()); |
| + EXPECT_EQ(0, did_finish_loading_); |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
Huh. I presume given the abundance of EXPECTs tha
mmenke
2016/12/02 21:26:52
There's no documentation. I believe these calls w
|
| + ++did_finish_loading_; |
| + } |
| std::unique_ptr<net::ClientCertStore> CreateClientCertStore( |
| ResourceLoader* loader) override { |
| return std::move(dummy_cert_store_); |
| @@ -664,6 +527,12 @@ class ResourceLoaderTest : public testing::Test, |
| TestBrowserThreadBundle thread_bundle_; |
| RenderViewHostTestEnabler rvh_test_enabler_; |
| + // Record which ResourceDispatcherHostDelegate methods have been invoked. |
| + int did_start_request_ = 0; |
| + int did_received_redirect_ = 0; |
| + int did_receive_response_ = 0; |
| + int did_finish_loading_ = 0; |
| + |
| net::URLRequestJobFactoryImpl job_factory_; |
| TestNetworkQualityEstimator network_quality_estimator_; |
| net::TestURLRequestContext test_url_request_context_; |
| @@ -673,7 +542,7 @@ class ResourceLoaderTest : public testing::Test, |
| std::unique_ptr<net::ClientCertStore> dummy_cert_store_; |
| // The ResourceLoader owns the URLRequest and the ResourceHandler. |
| - ResourceHandlerStub* raw_ptr_resource_handler_; |
| + TestResourceHandler* raw_ptr_resource_handler_; |
| net::URLRequest* raw_ptr_to_request_; |
| std::unique_ptr<ResourceLoader> loader_; |
| }; |
| @@ -684,6 +553,12 @@ class ClientCertResourceLoaderTest : public ResourceLoaderTest { |
| CreateProtocolHandler() override { |
| return base::WrapUnique(new MockClientCertJobProtocolHandler); |
| } |
| + |
| + void SetUp() override { |
| + ResourceLoaderTest::SetUp(); |
| + // These tests don't expect any redirects. |
| + SetUpResourceLoaderForUrl(net::URLRequestTestJob::test_url_1()); |
| + } |
| }; |
| // A ResourceLoaderTest that intercepts https://example.test and |
| @@ -740,7 +615,7 @@ TEST_F(ClientCertResourceLoaderTest, WithStoreLookup) { |
| loader_->StartRequest(); |
| test_client.WaitForSelectCertificate(); |
| - EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| // Check if the test store was queried against correct |cert_authorities|. |
| EXPECT_EQ(1, store_request_count); |
| @@ -754,8 +629,8 @@ TEST_F(ClientCertResourceLoaderTest, WithStoreLookup) { |
| // Continue the request. |
| test_client.ContinueWithCertificate(nullptr); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| - EXPECT_EQ(net::OK, raw_ptr_resource_handler_->status().error()); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + EXPECT_EQ(net::OK, raw_ptr_resource_handler_->final_status().error()); |
| // Restore the original content browser client. |
| SetBrowserClientForTesting(old_client); |
| @@ -779,8 +654,8 @@ TEST_F(ClientCertResourceLoaderTest, WithNullStore) { |
| // Continue the request. |
| test_client.ContinueWithCertificate(nullptr); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| - EXPECT_EQ(net::OK, raw_ptr_resource_handler_->status().error()); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + EXPECT_EQ(net::OK, raw_ptr_resource_handler_->final_status().error()); |
| // Restore the original content browser client. |
| SetBrowserClientForTesting(old_client); |
| @@ -803,9 +678,9 @@ TEST_F(ClientCertResourceLoaderTest, CancelSelection) { |
| // Cancel the request. |
| test_client.CancelCertificateSelection(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| EXPECT_EQ(net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED, |
| - raw_ptr_resource_handler_->status().error()); |
| + raw_ptr_resource_handler_->final_status().error()); |
| // Restore the original content browser client. |
| SetBrowserClientForTesting(old_client); |
| @@ -822,12 +697,12 @@ TEST_F(ClientCertResourceLoaderTest, NoWebContents) { |
| // Start the request and wait for it to complete. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // Check that SelectClientCertificate wasn't called and the request aborted. |
| EXPECT_EQ(0, test_client.call_count()); |
| EXPECT_EQ(net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED, |
| - raw_ptr_resource_handler_->status().error()); |
| + raw_ptr_resource_handler_->final_status().error()); |
| // Restore the original content browser client. |
| SetBrowserClientForTesting(old_client); |
| @@ -850,41 +725,421 @@ TEST_F(ClientCertResourceLoaderTest, StoreAsyncCancel) { |
| base::RunLoop().RunUntilIdle(); |
| } |
| -TEST_F(ResourceLoaderTest, ResumeCancelledRequest) { |
| - raw_ptr_resource_handler_->set_defer_request_on_will_start(true); |
| +// Test the case the ResourceHandler defers nothing. |
| +TEST_F(ResourceLoaderTest, SyncResourceHandler) { |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + EXPECT_EQ(1, did_start_request_); |
| + EXPECT_EQ(1, did_received_redirect_); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::OK, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +// Test the case the ResourceHandler defers everything. |
| +TEST_F(ResourceLoaderTest, AsyncResourceHandler) { |
| + raw_ptr_resource_handler_->set_defer_on_will_start(true); |
| + raw_ptr_resource_handler_->set_defer_on_request_redirected(true); |
| + raw_ptr_resource_handler_->set_defer_on_response_started(true); |
| + raw_ptr_resource_handler_->set_defer_on_read_completed(true); |
| + raw_ptr_resource_handler_->set_defer_on_read_eof(true); |
| + raw_ptr_resource_handler_->set_defer_on_response_completed(true); |
| + // Start and run until OnWillStart. |
| loader_->StartRequest(); |
| - loader_->CancelRequest(true); |
| - static_cast<ResourceController*>(loader_.get())->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Spinning the message loop should not advance the state further. |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
Hmmmm. This is testing to make sure that state do
mmenke
2016/12/02 21:26:52
I've just copied the "most imporant" EXPECT_EQ(1..
|
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_start_request_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + // Resume and run until OnRequestRedirected. |
| + raw_ptr_resource_handler_->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Spinning the message loop should not advance the state further. |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_received_redirect_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + // Resume and run until OnResponseStarted. |
| + raw_ptr_resource_handler_->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Spinning the message loop should not advance the state further. |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(0, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + // Resume and run until OnReadCompleted. |
| + raw_ptr_resource_handler_->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Spinning the message loop should not advance the state further. |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + // Resume and run until the final 0-byte read, signalling EOF. |
| + raw_ptr_resource_handler_->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Spinning the message loop should not advance the state further. |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| + |
| + // Resume and run until OnResponseCompleted is called, which again defers the |
| + // request. |
| + raw_ptr_resource_handler_->Resume(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + EXPECT_EQ(0, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::OK, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| + |
| + // Resume and run until all pending tasks. Note that OnResponseCompleted was |
| + // invoked in the previous section, so can't use RunUntilCompleted(). |
| + raw_ptr_resource_handler_->Resume(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::OK, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| } |
| -// Tests that no invariants are broken if a ResourceHandler cancels during |
| -// OnReadCompleted. |
| -TEST_F(ResourceLoaderTest, CancelOnReadCompleted) { |
| - raw_ptr_resource_handler_->set_cancel_on_read_completed(true); |
| +TEST_F(ResourceLoaderTest, SyncCancelOnWillStart) { |
| + raw_ptr_resource_handler_->set_on_will_start_result(false); |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_start_request_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| - EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| - EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| - raw_ptr_resource_handler_->status().status()); |
| +TEST_F(ResourceLoaderTest, SyncCancelOnRequestRedirected) { |
| + raw_ptr_resource_handler_->set_on_request_redirected_result(false); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_received_redirect_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| } |
| -// Tests that no invariants are broken if a ResourceHandler defers EOF. |
| -TEST_F(ResourceLoaderTest, DeferEOF) { |
| - raw_ptr_resource_handler_->set_defer_eof(true); |
| +TEST_F(ResourceLoaderTest, SyncCancelOnResponseStarted) { |
| + raw_ptr_resource_handler_->set_on_response_started_result(false); |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForDeferredStep(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| - EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| - EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
| +TEST_F(ResourceLoaderTest, SyncCancelOnWillRead) { |
| + raw_ptr_resource_handler_->set_on_will_read_result(false); |
| - raw_ptr_resource_handler_->Resume(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| - EXPECT_EQ(net::URLRequestStatus::SUCCESS, |
| - raw_ptr_resource_handler_->status().status()); |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, SyncCancelOnReadCompleted) { |
| + raw_ptr_resource_handler_->set_on_read_completed_result(false); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_LT(0u, raw_ptr_resource_handler_->body().size()); |
| +} |
| + |
| +// This test is broken because ResourceLoader assumes when |
| +// URLRequest::was_pending() is false, canceling the request will not result in |
| +// a completion notification. This isn't the case - whether or not there's a |
| +// notification depends on whether URLRequestJob::NotifyDone() has been invoked |
| +// yet - something the URLRequest doesn't even know about, itself. As a result, |
| +// the ResourceLoader is notified of cancellation twice. |
| +// TODO(mmenke): Fix this. |
| +TEST_F(ResourceLoaderTest, DISABLED_SyncCancelOnReceivedEof) { |
| + raw_ptr_resource_handler_->set_on_on_read_eof_result(false); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_ABORTED, |
| + raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, AsyncCancelOnWillStart) { |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
Suggestion, nitty nit: I'm wanting to be precise i
mmenke
2016/12/02 21:26:52
I'd call these async in-band. The async is trigge
|
| + raw_ptr_resource_handler_->set_defer_on_will_start(true); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_start_request_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, AsyncCancelOnRequestRedirected) { |
| + raw_ptr_resource_handler_->set_defer_on_request_redirected(true); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_received_redirect_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, AsyncCancelOnResponseStarted) { |
| + raw_ptr_resource_handler_->set_defer_on_response_started(true); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_will_read_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, AsyncCancelOnReadCompleted) { |
| + raw_ptr_resource_handler_->set_defer_on_read_completed(true); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_LT(0u, raw_ptr_resource_handler_->body().size()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, AsyncCancelOnReceivedEof) { |
| + raw_ptr_resource_handler_->set_defer_on_read_eof(true); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| + // Have to spin the message loop for the test to pass - see comment on sync |
| + // version of this test for explanation. |
|
Randy Smith (Not in Mondays)
2016/12/02 20:38:55
FWIW, I read over the explanation on the sync test
mmenke
2016/12/02 21:26:52
The issue is URLRequest/URLRequestJob. If you loo
Randy Smith (Not in Mondays)
2016/12/06 20:46:44
That makes sense, but I still think there's a lacu
mmenke
2016/12/06 21:09:53
The next CL in this chain removes the extra spin,
|
| + // TODO(mmenke): Remove this line once that's fixed. |
| + base::RunLoop().RunUntilIdle(); |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_eof()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ(test_data(), raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, RequestFailsOnStart) { |
| + SetUpResourceLoaderForUrl( |
| + net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| + net::URLRequestFailedJob::START, net::ERR_FAILED)); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_received_redirect_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, RequestFailsOnReadSync) { |
| + SetUpResourceLoaderForUrl( |
| + net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| + net::URLRequestFailedJob::READ_SYNC, net::ERR_FAILED)); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_received_redirect_); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, RequestFailsOnReadAsync) { |
| + SetUpResourceLoaderForUrl( |
| + net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| + net::URLRequestFailedJob::READ_ASYNC, net::ERR_FAILED)); |
| + |
| + loader_->StartRequest(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, did_received_redirect_); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, OutOfBandCancelDuringStart) { |
| + SetUpResourceLoaderForUrl( |
| + net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| + net::URLRequestFailedJob::START, net::ERR_IO_PENDING)); |
| + |
| + loader_->StartRequest(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + |
| + EXPECT_EQ(0, did_received_redirect_); |
| + EXPECT_EQ(0, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, OutOfBandCancelDuringRead) { |
| + SetUpResourceLoaderForUrl( |
| + net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| + net::URLRequestFailedJob::READ_SYNC, net::ERR_IO_PENDING)); |
| + |
| + loader_->StartRequest(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| + |
| + raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| + EXPECT_EQ(0, did_received_redirect_); |
| + EXPECT_EQ(1, did_receive_response_); |
| + EXPECT_EQ(1, did_finish_loading_); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| + EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| + EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); |
| + EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| +} |
| + |
| +TEST_F(ResourceLoaderTest, ResumeCanceledRequest) { |
| + raw_ptr_resource_handler_->set_defer_on_will_start(true); |
| + |
| + loader_->StartRequest(); |
| + loader_->CancelRequest(true); |
| + static_cast<ResourceController*>(loader_.get())->Resume(); |
| } |
| class ResourceLoaderRedirectToFileTest : public ResourceLoaderTest { |
| @@ -916,9 +1171,9 @@ class ResourceLoaderRedirectToFileTest : public ResourceLoaderTest { |
| } |
| std::unique_ptr<ResourceHandler> WrapResourceHandler( |
| - std::unique_ptr<ResourceHandlerStub> leaf_handler, |
| + std::unique_ptr<TestResourceHandler> leaf_handler, |
| net::URLRequest* request) override { |
| - leaf_handler->set_expect_reads(false); |
| + leaf_handler->set_expect_on_data_downloaded(true); |
| // Make a temporary file. |
| CHECK(base::CreateTemporaryFile(&temp_path_)); |
| @@ -968,14 +1223,15 @@ class ResourceLoaderRedirectToFileTest : public ResourceLoaderTest { |
| TEST_F(ResourceLoaderRedirectToFileTest, Basic) { |
| // Run it to completion. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // Check that the handler forwarded all information to the downstream handler. |
| - EXPECT_EQ(temp_path(), |
| - raw_ptr_resource_handler_->response()->head.download_file_path); |
| + EXPECT_EQ( |
| + temp_path(), |
| + raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| EXPECT_EQ(net::URLRequestStatus::SUCCESS, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| EXPECT_EQ(test_data().size(), static_cast<size_t>( |
| raw_ptr_resource_handler_->total_bytes_downloaded())); |
| @@ -995,11 +1251,11 @@ TEST_F(ResourceLoaderRedirectToFileTest, CreateTemporaryError) { |
| // Run it to completion. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // To downstream, the request was canceled. |
| EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| EXPECT_EQ(0, raw_ptr_resource_handler_->total_bytes_downloaded()); |
| } |
| @@ -1009,15 +1265,16 @@ TEST_F(ResourceLoaderRedirectToFileTest, WriteError) { |
| // Run it to completion. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // To downstream, the request was canceled sometime after it started, but |
| // before any data was written. |
| - EXPECT_EQ(temp_path(), |
| - raw_ptr_resource_handler_->response()->head.download_file_path); |
| + EXPECT_EQ( |
| + temp_path(), |
| + raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| EXPECT_EQ(0, raw_ptr_resource_handler_->total_bytes_downloaded()); |
| } |
| @@ -1027,15 +1284,16 @@ TEST_F(ResourceLoaderRedirectToFileTest, WriteErrorAsync) { |
| // Run it to completion. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // To downstream, the request was canceled sometime after it started, but |
| // before any data was written. |
| - EXPECT_EQ(temp_path(), |
| - raw_ptr_resource_handler_->response()->head.download_file_path); |
| + EXPECT_EQ( |
| + temp_path(), |
| + raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| EXPECT_EQ(0, raw_ptr_resource_handler_->total_bytes_downloaded()); |
| } |
| @@ -1057,48 +1315,50 @@ TEST_F(ResourceLoaderRedirectToFileTest, DeferCompletion) { |
| // However, the resource loader stack is stuck somewhere after receiving the |
| // response. |
| - EXPECT_EQ(temp_path(), |
| - raw_ptr_resource_handler_->response()->head.download_file_path); |
| + EXPECT_EQ( |
| + temp_path(), |
| + raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| - EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| EXPECT_EQ(0, raw_ptr_resource_handler_->total_bytes_downloaded()); |
| // Now, release the floodgates. |
| file_stream()->ReleaseCallbacks(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // Although the URLRequest was successful, the leaf handler sees a failure |
| // because the write never completed. |
| EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| } |
| // Tests that a RedirectToFileResourceHandler behaves properly when the |
| // downstream handler defers OnWillStart. |
| TEST_F(ResourceLoaderRedirectToFileTest, DownstreamDeferStart) { |
| // Defer OnWillStart. |
| - raw_ptr_resource_handler_->set_defer_request_on_will_start(true); |
| + raw_ptr_resource_handler_->set_defer_on_will_start(true); |
| // Run as far as we'll go. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForDeferredStep(); |
| + raw_ptr_resource_handler_->WaitUntilDeferred(); |
| // The request should have stopped at OnWillStart. |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| - EXPECT_FALSE(raw_ptr_resource_handler_->response()); |
| - EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
| + EXPECT_FALSE(raw_ptr_resource_handler_->resource_response()); |
| + EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| EXPECT_EQ(0, raw_ptr_resource_handler_->total_bytes_downloaded()); |
| // Now resume the request. Now we complete. |
| raw_ptr_resource_handler_->Resume(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| // Check that the handler forwarded all information to the downstream handler. |
| - EXPECT_EQ(temp_path(), |
| - raw_ptr_resource_handler_->response()->head.download_file_path); |
| + EXPECT_EQ( |
| + temp_path(), |
| + raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
| EXPECT_EQ(test_url(), raw_ptr_resource_handler_->start_url()); |
| EXPECT_EQ(net::URLRequestStatus::SUCCESS, |
| - raw_ptr_resource_handler_->status().status()); |
| + raw_ptr_resource_handler_->final_status().status()); |
| EXPECT_EQ(test_data().size(), static_cast<size_t>( |
| raw_ptr_resource_handler_->total_bytes_downloaded())); |
| @@ -1126,12 +1386,12 @@ class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest { |
| // Send the request and wait until it completes. |
| loader_->StartRequest(); |
| - raw_ptr_resource_handler_->WaitForResponseComplete(); |
| + raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| ASSERT_EQ(net::URLRequestStatus::SUCCESS, |
| raw_ptr_to_request_->status().status()); |
| - EXPECT_EQ(expected_type, |
| - raw_ptr_resource_handler_->observed_effective_connection_type()); |
| + EXPECT_EQ(expected_type, raw_ptr_resource_handler_->resource_response() |
| + ->head.effective_connection_type); |
| } |
| }; |