| 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..7a65e17369c3a6dbf3e5b801f9c8c0e179be421e 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,433 @@ 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());
|
| +}
|
| +
|
| +// 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) {
|
| + 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.
|
| + // 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 +1188,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 +1240,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 +1268,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 +1282,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 +1301,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 +1332,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 +1397,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);
|
| }
|
| };
|
|
|
|
|