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

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

Issue 2743723003: Add buffering to MimeSniffingResourceHandler.
Patch Set: Remove unused 'first_call' variable. Created 3 years, 9 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 8d8dee1ead39e403f6c1a69e668931d3f260cab0..50da6d891753568cb06fd58378d7faf160555669 100644
--- a/content/browser/loader/intercepting_resource_handler_unittest.cc
+++ b/content/browser/loader/intercepting_resource_handler_unittest.cc
@@ -87,19 +87,22 @@ TEST_F(InterceptingResourceHandlerTest, NoSwitching) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer());
// The response is received. The handler should not change.
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.
+ // The OnWillRead and OnReadCompleted are replayed by the
+ // MimeSniffingResourceHandler. No buffering is done by the
+ // InterceptingResourceHandler, so the buffer used should be from
+ // the old handling.
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
+ ASSERT_EQ(mock_loader_->io_buffer(), old_handler_->buffer());
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnReadCompleted(kData));
+
+ // The data should be received by the original handler.
EXPECT_EQ(kData, old_handler_body_);
// Make sure another read behaves as expected.
@@ -120,9 +123,6 @@ TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -140,6 +140,13 @@ TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
mock_loader_->OnResponseStarted(
make_scoped_refptr(new ResourceResponse())));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
+
+ // The old handler should have been destroyed at the beginning of the
+ // replace.
+ ASSERT_FALSE(old_handler_.get());
+ ASSERT_TRUE(mock_loader_->io_buffer());
+
EXPECT_FALSE(old_handler_status_.is_success());
EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
EXPECT_EQ(std::string(), old_handler_body_);
@@ -176,9 +183,6 @@ TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -198,14 +202,19 @@ TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) {
mock_loader_->OnResponseStarted(
make_scoped_refptr(new ResourceResponse())));
- // The old handler should have received the payload.
+ // The old handler should have received the payload...
EXPECT_EQ(kPayload, old_handler_body_);
+ // ... and been destroyed.
+ ASSERT_FALSE(old_handler_.get());
+
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.
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
+ ASSERT_TRUE(mock_loader_->io_buffer());
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnReadCompleted(kData));
EXPECT_EQ(kData, new_handler_body);
@@ -227,6 +236,9 @@ TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) {
// handler should tell the caller to fail.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
+ ASSERT_EQ(MockResourceLoader::Status::IDLE,
+ mock_loader_->OnResponseStarted(
+ make_scoped_refptr(new ResourceResponse())));
ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead());
EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
@@ -239,10 +251,6 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
-
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
net::URLRequestStatus new_handler_status;
@@ -256,6 +264,7 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) {
ASSERT_EQ(MockResourceLoader::Status::CANCELED,
mock_loader_->OnResponseStarted(
make_scoped_refptr(new ResourceResponse())));
+
EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
}
@@ -267,10 +276,6 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
-
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
net::URLRequestStatus new_handler_status;
@@ -289,17 +294,11 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
// Tests that the handler behaves properly if the new handler fails will read.
TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
- const char kData[] = "The data";
-
scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
-
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
net::URLRequestStatus new_handler_status;
@@ -314,15 +313,14 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
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.
-
- ASSERT_EQ(MockResourceLoader::Status::CANCELED,
- mock_loader_->OnReadCompleted(kData));
+ ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead());
EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
+
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
+ EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
}
// Tests that the handler behaves properly if the new handler fails read
@@ -332,12 +330,8 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer();
- // Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
-
- ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -355,8 +349,11 @@ TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status());
EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error());
+ // Simulate the MimeSniffingResourceHandler buffering the data.
// The read is replayed by the MimeSniffingResourceHandler. The new handler
// should tell the caller to fail.
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
+ ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
ASSERT_EQ(MockResourceLoader::Status::CANCELED,
mock_loader_->OnReadCompleted(kData));
EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code());
@@ -386,27 +383,6 @@ TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- // The old handler defers the read.
- ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
- mock_loader_->OnWillRead());
- old_handler_->WaitUntilDeferred();
-
- EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status());
- EXPECT_EQ(1, old_handler_->on_will_read_called());
- EXPECT_EQ(0, old_handler_->on_read_completed_called());
- EXPECT_EQ(0, old_handler_->on_response_completed_called());
-
- // Defer the next OnWillRead, too. This is needed to test the case where
- // OnWillRead completes asynchronously when passing the payload to the old
- // handler.
- old_handler_->set_defer_on_will_read(true);
-
- // The old handle resumes the request.
- old_handler_->Resume();
-
- // Resume() call may do work asynchronously. Wait until that's done.
- mock_loader_->WaitUntilIdleOrCanceled();
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status());
ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get());
@@ -420,7 +396,6 @@ TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
new TestResourceHandler(&new_handler_status, &new_handler_body));
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_will_read(true);
@@ -435,24 +410,19 @@ TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
make_scoped_refptr(new ResourceResponse())));
old_handler_->WaitUntilDeferred();
- EXPECT_EQ(1, old_handler_->on_read_completed_called());
+ EXPECT_EQ(1, old_handler_->on_will_read_called());
+ EXPECT_EQ(0, old_handler_->on_read_completed_called());
EXPECT_EQ(0, old_handler_->on_response_completed_called());
EXPECT_EQ(0, new_handler->on_response_started_called());
-
- // 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(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_);
- EXPECT_EQ(std::string(), new_handler_body);
- EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status());
- EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
-
- // Run until the old handler's OnWillRead method defers the request while
- // replaying the payload.
old_handler_->Resume();
old_handler_->WaitUntilDeferred();
- EXPECT_EQ(2, old_handler_->on_will_read_called());
+
EXPECT_EQ(1, old_handler_->on_read_completed_called());
EXPECT_EQ(0, old_handler_->on_response_completed_called());
+ EXPECT_EQ(0, new_handler->on_response_started_called());
+
+ // 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(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_);
EXPECT_EQ(std::string(), new_handler_body);
EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status());
@@ -477,34 +447,33 @@ TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
// Resume() call may do work asynchronously. Wait until that's done.
new_handler->WaitUntilDeferred();
+ EXPECT_EQ(1, new_handler->on_will_start_called());
EXPECT_EQ(1, new_handler->on_response_started_called());
EXPECT_EQ(0, new_handler->on_will_read_called());
ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
mock_loader_->status());
EXPECT_EQ(std::string(), new_handler_body);
EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
-
- // Resuming should finally call back into the ResourceController.
new_handler->Resume();
- mock_loader_->WaitUntilIdleOrCanceled();
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status());
- // Data is read, the new handler defers OnWillRead.
+ // Data is read, the new handler defers completion of the read buffer return.
ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
- mock_loader_->OnReadCompleted(kData));
+ mock_loader_->OnWillRead());
new_handler->WaitUntilDeferred();
EXPECT_EQ(1, new_handler->on_will_read_called());
EXPECT_EQ(0, new_handler->on_read_completed_called());
-
- // The new ResourceHandler resumes, and then defers again in OnReadCompleted.
new_handler->Resume();
+ ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status());
+
+ // As well as completion of the read itself.
+ ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING,
+ mock_loader_->OnReadCompleted(kData));
new_handler->WaitUntilDeferred();
- EXPECT_EQ(1, new_handler->on_will_read_called());
EXPECT_EQ(1, new_handler->on_read_completed_called());
+ EXPECT_EQ(0, new_handler->on_read_eof_called());
EXPECT_EQ(0, new_handler->on_response_completed_called());
- EXPECT_EQ("T", new_handler_body);
-
// New handler resumes again, everything continues synchronously until all
// written data is consumed.
new_handler->Resume();
@@ -553,7 +522,6 @@ TEST_F(InterceptingResourceHandlerTest, CancelNewHandler) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
@@ -594,7 +562,6 @@ TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) {
// Simulate the MimeSniffingResourceHandler buffering the data.
ASSERT_EQ(MockResourceLoader::Status::IDLE,
mock_loader_->OnWillStart(request_->url()));
- ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead());
// Simulate the MimeSniffingResourceHandler asking the
// InterceptingResourceHandler to switch to a new handler.
« no previous file with comments | « content/browser/loader/intercepting_resource_handler.cc ('k') | content/browser/loader/mime_sniffing_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698