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..7aade9492a10ee8d1035e7f61a0dec735f9f530a 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,23 +396,30 @@ class ResourceLoaderTest : public testing::Test, |
test_url_request_context_.Init(); |
} |
- GURL test_url() const { return net::URLRequestTestJob::test_url_1(); } |
+ // URL with a response body of test_data(). |
+ GURL test_direct_url() const { return net::URLRequestTestJob::test_url_1(); } |
- TestNetworkQualityEstimator* network_quality_estimator() { |
- return &network_quality_estimator_; |
+ // URL that redirects to test_direct_url(). The ResourceLoader is set up to |
+ // use this URL by default. |
+ GURL test_redirect_url() const { |
+ return net::URLRequestTestJob::test_url_redirect_to_url_1(); |
} |
std::string test_data() const { |
return net::URLRequestTestJob::test_data_1(); |
} |
+ TestNetworkQualityEstimator* network_quality_estimator() { |
+ return &network_quality_estimator_; |
+ } |
+ |
virtual std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler> |
CreateProtocolHandler() { |
return net::URLRequestTestJob::CreateProtocolHandler(); |
} |
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 +442,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), |
@@ -613,19 +451,23 @@ class ResourceLoaderTest : public testing::Test, |
this)); |
} |
+ 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); |
+ } |
+ |
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_redirect_url()); |
} |
void TearDown() override { |
@@ -633,6 +475,10 @@ 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(); |
} |
@@ -648,14 +494,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_); |
+ ++did_finish_loading_; |
+ } |
std::unique_ptr<net::ClientCertStore> CreateClientCertStore( |
ResourceLoader* loader) override { |
return std::move(dummy_cert_store_); |
@@ -664,6 +532,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 +547,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 +558,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(test_direct_url()); |
+ } |
}; |
// A ResourceLoaderTest that intercepts https://example.test and |
@@ -740,7 +620,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 +634,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 +659,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 +683,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 +702,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 +730,422 @@ 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
+ |
+ // Spinning the message loop should not advance the state further. |
+ 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_request_redirected_called()); |
+ |
+ // 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
+ |
+ // 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_completed_called()); |
+ |
+ // 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_read_eof()); |
+ |
+ // 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(); |
+ EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
+ |
+ 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()); |
+} |
+ |
+TEST_F(ResourceLoaderTest, 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) { |
+ 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(); |
+ 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 +1177,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 +1229,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(test_url(), raw_ptr_resource_handler_->start_url()); |
+ EXPECT_EQ( |
+ temp_path(), |
+ raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
+ EXPECT_EQ(test_redirect_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 +1257,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 +1271,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(test_url(), raw_ptr_resource_handler_->start_url()); |
+ EXPECT_EQ( |
+ temp_path(), |
+ raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
+ EXPECT_EQ(test_redirect_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 +1290,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(test_url(), raw_ptr_resource_handler_->start_url()); |
+ EXPECT_EQ( |
+ temp_path(), |
+ raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
+ EXPECT_EQ(test_redirect_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 +1321,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(test_url(), raw_ptr_resource_handler_->start_url()); |
- EXPECT_FALSE(raw_ptr_resource_handler_->received_response_completed()); |
+ EXPECT_EQ( |
+ temp_path(), |
+ raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
+ EXPECT_EQ(test_redirect_url(), raw_ptr_resource_handler_->start_url()); |
+ 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_EQ(test_redirect_url(), raw_ptr_resource_handler_->start_url()); |
+ 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(test_url(), raw_ptr_resource_handler_->start_url()); |
+ EXPECT_EQ( |
+ temp_path(), |
+ raw_ptr_resource_handler_->resource_response()->head.download_file_path); |
+ EXPECT_EQ(test_redirect_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())); |
@@ -1120,18 +1386,19 @@ class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest { |
// Start the request and wait for it to finish. |
std::unique_ptr<net::URLRequest> request( |
resource_context_.GetRequestContext()->CreateRequest( |
- test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */)); |
+ test_redirect_url(), net::DEFAULT_PRIORITY, |
+ nullptr /* delegate */)); |
SetUpResourceLoader(std::move(request), resource_type, |
belongs_to_main_frame); |
// 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); |
} |
}; |