Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(428)

Unified Diff: content/browser/loader/resource_loader_unittest.cc

Issue 2542843006: ResourceLoader: Fix a bunch of double-cancellation/double-error notification cases. (Closed)
Patch Set: Fix merge Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | content/browser/loader/test_resource_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
};
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | content/browser/loader/test_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698