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

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

Issue 2623383004: Update InterceptingResourceHandler tests to use MockResourceLoader. (Closed)
Patch Set: Response to comments Created 3 years, 11 months 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
Index: content/browser/loader/intercepting_resource_handler_unittest.cc
diff --git a/content/browser/loader/intercepting_resource_handler_unittest.cc b/content/browser/loader/intercepting_resource_handler_unittest.cc
index 26792e716c5189dd76b396ed8d4521c063ffffd5..9d2a21e7fad2a3e0921f7109ccf4ab1fea207e8e 100644
--- a/content/browser/loader/intercepting_resource_handler_unittest.cc
+++ b/content/browser/loader/intercepting_resource_handler_unittest.cc
@@ -14,12 +14,13 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
+#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
+#include "content/browser/loader/mock_resource_loader.h"
#include "content/browser/loader/resource_controller.h"
#include "content/browser/loader/test_resource_handler.h"
#include "content/public/browser/resource_request_info.h"
-#include "content/public/common/previews_state.h"
#include "content/public/common/resource_response.h"
#include "content/public/common/webplugininfo.h"
#include "content/public/test/test_browser_thread_bundle.h"
@@ -27,6 +28,7 @@
#include "net/base/net_errors.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_status.h"
+#include "net/url_request/url_request_test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -52,121 +54,91 @@ class TestResourceController : public ResourceController {
class InterceptingResourceHandlerTest : public testing::Test {
public:
- InterceptingResourceHandlerTest() {}
-
- private:
+ InterceptingResourceHandlerTest()
+ : request_(context_.CreateRequest(GURL("http://www.google.com"),
+ net::DEFAULT_PRIORITY,
+ nullptr)),
+ old_handler_status_(
+ net::URLRequestStatus::FromError(net::ERR_IO_PENDING)) {
+ ResourceRequestInfo::AllocateForTesting(request_.get(),
+ RESOURCE_TYPE_MAIN_FRAME,
+ nullptr, // context
+ 0, // render_process_id
+ 0, // render_view_id
+ 0, // render_frame_id
+ true, // is_main_frame
+ false, // parent_is_main_frame
+ true, // allow_download
+ true, // is_async
+ PREVIEWS_OFF); // previews_state
+
+ std::unique_ptr<TestResourceHandler> old_handler(
+ new TestResourceHandler(&old_handler_status_, &old_handler_body_));
+ old_handler_ = old_handler->GetWeakPtr();
+ intercepting_handler_ = base::MakeUnique<InterceptingResourceHandler>(
+ std::move(old_handler), request_.get());
+ mock_loader_ =
+ base::MakeUnique<MockResourceLoader>(intercepting_handler_.get());
+ }
+
+ protected:
TestBrowserThreadBundle thread_bundle_;
+ net::TestURLRequestContext context_;
+ std::unique_ptr<net::URLRequest> request_;
+
+ net::URLRequestStatus old_handler_status_;
+ std::string old_handler_body_;
+ base::WeakPtr<TestResourceHandler> old_handler_;
+
+ std::unique_ptr<InterceptingResourceHandler> intercepting_handler_;
+ std::unique_ptr<MockResourceLoader> mock_loader_;
};
// Tests that the handler behaves properly when it doesn't have to use an
// alternate next handler.
TEST_F(InterceptingResourceHandlerTest, NoSwitching) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- TestResourceHandler* old_test_handler = old_handler.get();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ const std::string kData = "The data";
+ const std::string kData2 = "Data 2";
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
-
- const std::string kData = "The data";
- EXPECT_NE(kData, std::string(old_test_handler->buffer()->data()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- ASSERT_NE(read_buffer.get(), old_test_handler->buffer());
- ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
- memcpy(read_buffer->data(), kData.c_str(), kData.length());
+ ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer());
// The response is received. The handler should not change.
- EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
// The read is replayed by the MimeSniffingResourceHandler. The data should
// have been received by the old intercepting_handler.
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData, std::string(old_test_handler->buffer()->data()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData));
+ EXPECT_EQ(kData, old_handler_body_);
- // Make sure another read behave as expected.
- buf_size = 0;
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
- ASSERT_EQ(read_buffer.get(), old_test_handler->buffer());
+ // Make sure another read behaves as expected.
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
+ ASSERT_EQ(mock_loader_->io_buffer(), old_handler_->buffer());
- const std::string kData2 = "Data 2";
- EXPECT_NE(kData, std::string(old_test_handler->buffer()->data()));
- ASSERT_GT(static_cast<size_t>(buf_size), kData2.length());
- memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
-
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData2, std::string(old_test_handler->buffer()->data()));
- EXPECT_EQ(kData + kData2, old_handler_body);
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData2));
+ EXPECT_EQ(kData + kData2, old_handler_body_);
}
// Tests that the data received is transmitted to the newly created
// ResourceHandler.
TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ const std::string kData = "The data";
+ const std::string kData2 = "Data 2";
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const std::string kData = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
- memcpy(read_buffer->data(), kData.c_str(), kData.length());
+ ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -175,217 +147,117 @@ TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
std::unique_ptr<TestResourceHandler> new_handler_scoped(
new TestResourceHandler(&new_handler_status, &new_handler_body));
TestResourceHandler* new_test_handler = new_handler_scoped.get();
- intercepting_handler->UseNewHandler(std::move(new_handler_scoped),
- std::string());
+ intercepting_handler_->UseNewHandler(std::move(new_handler_scoped),
+ std::string());
- // The response is received. The new ResourceHandler should be used handle
+ // The response is received. The new ResourceHandler should be used to handle
// the download.
- EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
- EXPECT_FALSE(old_handler_status.is_success());
- EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
- EXPECT_EQ(std::string(), old_handler_body);
-
- // It should not have received the download data yet.
- EXPECT_NE(kData, std::string(new_test_handler->buffer()->data()));
+ EXPECT_FALSE(old_handler_status_.is_success());
+ EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
+ EXPECT_EQ(std::string(), old_handler_body_);
// The read is replayed by the MimeSniffingResourceHandler. The data should
// have been received by the new handler.
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData));
+ EXPECT_EQ(kData, new_handler_body);
// Make sure another read behaves as expected.
- buf_size = 0;
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
- ASSERT_EQ(read_buffer.get(), new_test_handler->buffer());
- ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
-
- const std::string kData2 = "Data 2";
- EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data()));
- memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
+ ASSERT_EQ(mock_loader_->io_buffer(), new_test_handler->buffer());
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData2));
EXPECT_EQ(kData + kData2, new_handler_body);
}
// Tests that the data received is transmitted to the newly created
// ResourceHandler and the specified payload to the old ResourceHandler.
TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler_scoped(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
+ const std::string kData = "The data";
+ const std::string kData2 = "Data 2";
+ const std::string kPayload = "The payload";
+
// When sending a payload to the old ResourceHandler, the
// InterceptingResourceHandler doesn't send a final EOF read.
// TODO(mmenke): Should it? Or can we just get rid of that 0-byte read
// entirely?
- old_handler_scoped->set_expect_eof_read(false);
- TestResourceHandler* old_handler = old_handler_scoped.get();
- scoped_refptr<net::IOBuffer> old_buffer = old_handler->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler_scoped),
- request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ old_handler_->set_expect_eof_read(false);
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const std::string kData = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
- memcpy(read_buffer->data(), kData.c_str(), kData.length());
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
- const std::string kPayload = "The payload";
net::URLRequestStatus new_handler_status;
std::string new_handler_body;
std::unique_ptr<TestResourceHandler> new_handler_scoped(
new TestResourceHandler(&new_handler_status, &new_handler_body));
TestResourceHandler* new_test_handler = new_handler_scoped.get();
- intercepting_handler->UseNewHandler(std::move(new_handler_scoped), kPayload);
+ intercepting_handler_->UseNewHandler(std::move(new_handler_scoped), kPayload);
// The old handler should not have received the payload yet.
- ASSERT_EQ(std::string(), old_handler_body);
+ ASSERT_EQ(std::string(), old_handler_body_);
// The response is received. The new ResourceHandler should be used to handle
// the download.
- EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
// The old handler should have received the payload.
- EXPECT_EQ(kPayload, old_handler_body);
+ EXPECT_EQ(kPayload, old_handler_body_);
- EXPECT_TRUE(old_handler_status.is_success());
- EXPECT_EQ(net::OK, old_handler_status.error());
-
- // It should not have received the download data yet.
- EXPECT_NE(kData, std::string(new_test_handler->buffer()->data()));
+ EXPECT_TRUE(old_handler_status_.is_success());
+ EXPECT_EQ(net::OK, old_handler_status_.error());
// The read is replayed by the MimeSniffingResourceHandler. The data should
// have been received by the new handler.
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data()));
-
- // Make sure another read behave as expected.
- buf_size = 0;
- const std::string kData2 = "Data 2";
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
- ASSERT_EQ(read_buffer.get(), new_test_handler->buffer());
- ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData));
+ EXPECT_EQ(kData, new_handler_body);
- EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data()));
- memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
+ // Make sure another read behaves as expected.
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
+ ASSERT_EQ(mock_loader_->io_buffer(), new_test_handler->buffer());
- EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(kData2));
EXPECT_EQ(kData + kData2, new_handler_body);
}
// Tests that the handler behaves properly if the old handler fails will read.
TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- old_handler->set_on_will_read_result(false);
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ old_handler_->set_on_will_read_result(false);
// Simulate the MimeSniffingResourceHandler buffering the data. The old
// handler should tell the caller to fail.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_FALSE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1));
+ EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
// Tests that the handler behaves properly if the new handler fails in
// OnWillStart.
TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const char kData[] = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
- memcpy(read_buffer->data(), kData, sizeof(kData));
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -394,53 +266,26 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) {
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->set_on_will_start_result(false);
- intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
+ intercepting_handler_->UseNewHandler(std::move(new_handler), std::string());
// The response is received. The new ResourceHandler should tell us to fail.
- EXPECT_FALSE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
+ EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
// Tests that the handler behaves properly if the new handler fails response
// started.
TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const char kData[] = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
- memcpy(read_buffer->data(), kData, sizeof(kData));
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -449,52 +294,27 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->set_on_response_started_result(false);
- intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
+ intercepting_handler_->UseNewHandler(std::move(new_handler), std::string());
// The response is received. The new ResourceHandler should tell us to fail.
- EXPECT_FALSE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
+ EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
// Tests that the handler behaves properly if the new handler fails will read.
TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ const char kData[] = "The data";
+
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const char kData[] = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
- memcpy(read_buffer->data(), kData, sizeof(kData));
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -503,61 +323,37 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->set_on_will_read_result(false);
- intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
+ intercepting_handler_->UseNewHandler(std::move(new_handler), std::string());
// The response is received. The new handler should not have been asked to
// read yet.
- EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
- EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
+ EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
// The read is replayed by the MimeSniffingResourceHandler. The new
// handler should tell the caller to fail.
- EXPECT_FALSE(intercepting_handler->OnReadCompleted(sizeof(kData), &defer));
- EXPECT_FALSE(defer);
+
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED,
+ mock_loader_->OnReadCompleted(kData));
+ EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
// Tests that the handler behaves properly if the new handler fails read
// completed.
TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- net::URLRequestStatus old_handler_status;
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ const char kData[] = "The data";
+
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const char kData[] = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
- memcpy(read_buffer->data(), kData, sizeof(kData));
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -566,73 +362,45 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->set_on_read_completed_result(false);
- intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
+ intercepting_handler_->UseNewHandler(std::move(new_handler), std::string());
// The response is received.
- EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
- EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
+ EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
// The read is replayed by the MimeSniffingResourceHandler. The new handler
// should tell the caller to fail.
- EXPECT_FALSE(intercepting_handler->OnReadCompleted(sizeof(kData), &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED,
+ mock_loader_->OnReadCompleted(kData));
+ EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
// The old handler sets |defer| to true in OnReadCompleted and
// OnResponseCompleted. The new handler sets |defer| to true in
// OnResponseStarted and OnReadCompleted.
TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- std::unique_ptr<TestResourceController> resource_controller =
- base::MakeUnique<TestResourceController>();
- net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
- 0};
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
+ const char kData[] = "The data";
+ const std::string kPayload = "The long long long long long payload";
+ const int kOldHandlerBufferSize = 10;
+
// When sending a payload to the old ResourceHandler, the
// InterceptingResourceHandler doesn't send a final EOF read.
// TODO(mmenke): Should it? Or can we just get rid of that 0-byte read
// entirely?
- old_handler->set_expect_eof_read(false);
- old_handler->SetBufferSize(10);
- old_handler->set_defer_on_read_completed(true);
-
- scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
- intercepting_handler->SetController(resource_controller.get());
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ old_handler_->set_expect_eof_read(false);
+ old_handler_->SetBufferSize(kOldHandlerBufferSize);
+ old_handler_->set_defer_on_read_completed(true);
+ scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
- const char kData[] = "The data";
- ASSERT_NE(read_buffer.get(), old_buffer.get());
- ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
- memcpy(read_buffer->data(), kData, strlen(kData));
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -640,164 +408,104 @@ TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
0};
std::string new_handler_body;
- const std::string kPayload = "The long long long long long payload";
- ASSERT_GT(kPayload.size(), static_cast<size_t>(buf_size));
- std::unique_ptr<TestResourceHandler> new_handler(
+ std::unique_ptr<TestResourceHandler> scoped_new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
- new_handler->SetBufferSize(1);
- new_handler->set_defer_on_will_start(true);
- new_handler->set_defer_on_response_started(true);
- new_handler->set_defer_on_read_completed(true);
- new_handler->set_defer_on_response_completed(true);
- intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
+ base::WeakPtr<TestResourceHandler> new_handler =
+ scoped_new_handler->GetWeakPtr();
+ scoped_new_handler->SetBufferSize(1);
+ scoped_new_handler->set_defer_on_will_start(true);
+ scoped_new_handler->set_defer_on_response_started(true);
+ scoped_new_handler->set_defer_on_read_completed(true);
+ scoped_new_handler->set_defer_on_response_completed(true);
+ intercepting_handler_->UseNewHandler(std::move(scoped_new_handler), kPayload);
// The response is received, and then deferred by the old handler's
// OnReadCompleted method.
- ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
// The old handler has received the first N bytes of the payload synchronously
// where N is the size of the buffer exposed via OnWillRead.
- EXPECT_EQ("The long l", old_handler_body);
+ EXPECT_EQ(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_);
EXPECT_EQ(std::string(), new_handler_body);
- EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::IO_PENDING);
- EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status());
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
// Run until the new handler's OnWillStart method defers the request.
- intercepting_handler->Resume();
- EXPECT_EQ(0, resource_controller->resume_calls());
- EXPECT_EQ(kPayload, old_handler_body);
+ old_handler_->Resume();
+ // Resume() call may do work asynchronously. Wait until that's done.
+ base::RunLoop().RunUntilIdle();
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->status());
+ EXPECT_EQ(kPayload, old_handler_body_);
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status_.status());
+ EXPECT_FALSE(old_handler_);
EXPECT_EQ(std::string(), new_handler_body);
- EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
- EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
// Run until the new handler's OnResponseStarted method defers the request.
- intercepting_handler->Resume();
- EXPECT_EQ(0, resource_controller->resume_calls());
+ new_handler->Resume();
+ // Resume() call may do work asynchronously. Wait until that's done.
+ base::RunLoop().RunUntilIdle();
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->status());
EXPECT_EQ(std::string(), new_handler_body);
- EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
- EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
// Resuming should finally call back into the ResourceController.
- intercepting_handler->Resume();
- EXPECT_EQ(1, resource_controller->resume_calls());
+ new_handler->Resume();
+ mock_loader_->WaitUntilIdleOrCanceled();
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status());
// Data is read, the new handler defers completion of the read.
- defer = false;
- ASSERT_TRUE(intercepting_handler->OnReadCompleted(strlen(kData), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnReadCompleted(kData));
- EXPECT_EQ(kPayload, old_handler_body);
EXPECT_EQ("T", new_handler_body);
- intercepting_handler->Resume();
- EXPECT_EQ(2, resource_controller->resume_calls());
- EXPECT_EQ(kPayload, old_handler_body);
+ new_handler->Resume();
+ mock_loader_->WaitUntilIdleOrCanceled();
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status());
EXPECT_EQ(kData, new_handler_body);
-
- EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
- EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
// Final EOF byte is read.
- ASSERT_TRUE(intercepting_handler->OnReadCompleted(0, &defer));
- ASSERT_FALSE(defer);
-
- defer = false;
- intercepting_handler->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0},
- &defer);
- ASSERT_TRUE(defer);
- EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
- EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::SUCCESS);
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnReadCompleted(""));
+
+ ASSERT_EQ(
+ MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0}));
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, new_handler_status.status());
}
// Test cancellation where there is only the old handler in an
// InterceptingResourceHandler.
TEST_F(InterceptingResourceHandlerTest, CancelOldHandler) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- std::unique_ptr<TestResourceController> resource_controller =
- base::MakeUnique<TestResourceController>();
- net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
- 0};
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
-
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
- intercepting_handler->SetController(resource_controller.get());
-
- EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status());
-
- bool defer = false;
- intercepting_handler->OnResponseCompleted(
- {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer);
- ASSERT_FALSE(defer);
- EXPECT_EQ(0, resource_controller->resume_calls());
- EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(
+ {net::URLRequestStatus::CANCELED, net::ERR_FAILED}));
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
+ EXPECT_EQ(net::ERR_FAILED, old_handler_status_.error());
}
// Test cancellation where there is only the new handler in an
// InterceptingResourceHandler.
TEST_F(InterceptingResourceHandlerTest, CancelNewHandler) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- std::unique_ptr<TestResourceController> resource_controller =
- base::MakeUnique<TestResourceController>();
- net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
- 0};
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
+ const std::string kPayload = "The payload";
+
// When sending a payload to the old ResourceHandler, the
// InterceptingResourceHandler doesn't send a final EOF read.
// TODO(mmenke): Should it? Or can we just get rid of that 0-byte read
// entirely?
- old_handler->set_expect_eof_read(false);
-
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
- intercepting_handler->SetController(resource_controller.get());
-
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ old_handler_->set_expect_eof_read(false);
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
-
- const char kData[] = "The data";
- ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
- memcpy(read_buffer->data(), kData, strlen(kData));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -805,74 +513,40 @@ TEST_F(InterceptingResourceHandlerTest, CancelNewHandler) {
0};
std::string new_handler_body;
- const std::string kPayload = "The payload";
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->SetBufferSize(1);
new_handler->set_defer_on_response_started(true);
new_handler->set_defer_on_response_completed(true);
- intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
+ intercepting_handler_->UseNewHandler(std::move(new_handler), kPayload);
// The response is received.
- ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
- EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status());
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status_.status());
+ EXPECT_FALSE(old_handler_);
EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
- defer = false;
- intercepting_handler->OnResponseCompleted(
- {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer);
- ASSERT_TRUE(defer);
- EXPECT_EQ(0, resource_controller->resume_calls());
- EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status());
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(
+ {net::URLRequestStatus::CANCELED, net::ERR_FAILED}));
EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status());
+ EXPECT_EQ(net::ERR_FAILED, new_handler_status.error());
}
// Test cancellation where there are both the old and the new handlers in an
// InterceptingResourceHandler.
TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) {
- net::URLRequestContext context;
- std::unique_ptr<net::URLRequest> request(context.CreateRequest(
- GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
- ResourceRequestInfo::AllocateForTesting(request.get(),
- RESOURCE_TYPE_MAIN_FRAME,
- nullptr, // context
- 0, // render_process_id
- 0, // render_view_id
- 0, // render_frame_id
- true, // is_main_frame
- false, // parent_is_main_frame
- true, // allow_download
- true, // is_async
- PREVIEWS_OFF); // previews_state
-
- std::unique_ptr<TestResourceController> resource_controller =
- base::MakeUnique<TestResourceController>();
- net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
- 0};
- std::string old_handler_body;
- std::unique_ptr<TestResourceHandler> old_handler(
- new TestResourceHandler(&old_handler_status, &old_handler_body));
- old_handler->set_defer_on_read_completed(true);
-
- std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
- new InterceptingResourceHandler(std::move(old_handler), request.get()));
- intercepting_handler->SetController(resource_controller.get());
+ const std::string kPayload = "The payload";
- scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ old_handler_->set_defer_on_read_completed(true);
// Simulate the MimeSniffingResourceHandler buffering the data.
- scoped_refptr<net::IOBuffer> read_buffer;
- int buf_size = 0;
- bool defer = false;
- EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer));
- EXPECT_FALSE(defer);
- EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
-
- const char kData[] = "The data";
- ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
- memcpy(read_buffer->data(), kData, strlen(kData));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1));
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -880,27 +554,27 @@ TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) {
0};
std::string new_handler_body;
- const std::string kPayload = "The payload";
std::unique_ptr<TestResourceHandler> new_handler(
new TestResourceHandler(&new_handler_status, &new_handler_body));
new_handler->SetBufferSize(1);
new_handler->set_defer_on_response_completed(true);
- intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
+ intercepting_handler_->UseNewHandler(std::move(new_handler), kPayload);
// The response is received.
- ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
- EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status());
+ EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status());
EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
- defer = false;
- intercepting_handler->OnResponseCompleted(
- {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer);
- ASSERT_TRUE(defer);
- EXPECT_EQ(0, resource_controller->resume_calls());
- EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(
+ {net::URLRequestStatus::CANCELED, net::ERR_FAILED}));
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
+ EXPECT_EQ(net::ERR_FAILED, old_handler_status_.error());
EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status());
+ EXPECT_EQ(net::ERR_FAILED, new_handler_status.error());
}
} // namespace
« no previous file with comments | « content/browser/loader/intercepting_resource_handler.cc ('k') | content/browser/loader/mock_resource_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698