Index: content/browser/loader/mojo_async_resource_handler_unittest.cc |
diff --git a/content/browser/loader/mojo_async_resource_handler_unittest.cc b/content/browser/loader/mojo_async_resource_handler_unittest.cc |
index fa69c8d39c892f63e8b07f152b017287d7dacb0f..17716bef0df110b91af679f2f1c4a0494b1af4d7 100644 |
--- a/content/browser/loader/mojo_async_resource_handler_unittest.cc |
+++ b/content/browser/loader/mojo_async_resource_handler_unittest.cc |
@@ -44,6 +44,7 @@ |
#include "net/http/http_status_code.h" |
#include "net/http/http_util.h" |
#include "net/ssl/client_cert_store.h" |
+#include "net/test/url_request/url_request_mock_data_job.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_status.h" |
@@ -56,6 +57,33 @@ namespace { |
constexpr int kSizeMimeSnifferRequiresForFirstOnWillRead = 2048; |
+class FakeUploadDataStream : public net::UploadDataStream { |
+ public: |
+ FakeUploadDataStream(int64_t position, int64_t size) |
+ : UploadDataStream(false, 0), position_(position), size_(size) {} |
+ |
+ void set_position(int64_t position) { position_ = position; } |
+ int InitInternal(const net::NetLogWithSource& net_log) override { |
+ NOTREACHED(); |
+ return 0; |
+ } |
+ int ReadInternal(net::IOBuffer* buf, int buf_len) override { |
+ NOTREACHED(); |
+ return 0; |
+ } |
+ void ResetInternal() override { NOTREACHED(); } |
+ |
+ net::UploadProgress GetUploadProgress() const override { |
+ return net::UploadProgress(position_, size_); |
+ } |
+ |
+ private: |
+ int64_t position_; |
+ int64_t size_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeUploadDataStream); |
+}; |
+ |
class TestResourceDispatcherHostDelegate final |
: public ResourceDispatcherHostDelegate { |
public: |
@@ -278,13 +306,19 @@ class MojoAsyncResourceHandlerTestBase { |
browser_context_(new TestBrowserContext()) { |
MojoAsyncResourceHandler::SetAllocationSizeForTesting(32 * 1024); |
rdh_.SetDelegate(&rdh_delegate_); |
+ } |
+ |
+ void SetUpRequest() { SetUpRequestWithUpload(nullptr); } |
+ void SetUpRequestWithUpload( |
+ std::unique_ptr<net::UploadDataStream> upload_stream) { |
// Create and initialize |request_|. None of this matters, for these tests, |
// just need something non-NULL. |
net::URLRequestContext* request_context = |
browser_context_->GetResourceContext()->GetRequestContext(); |
request_ = request_context->CreateRequest( |
GURL("http://foo/"), net::DEFAULT_PRIORITY, &url_request_delegate_); |
+ request_->set_upload(std::move(upload_stream)); |
ResourceRequestInfo::AllocateForTesting( |
request_.get(), // request |
RESOURCE_TYPE_XHR, // resource_type |
@@ -382,17 +416,20 @@ class MojoAsyncResourceHandlerWithAllocationSizeTest |
}; |
TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { |
+ SetUpRequest(); |
mmenke
2017/01/18 17:00:46
Can we do this in the constructor instead, and mak
tzik
2017/01/19 11:53:09
Done.
|
EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
handler_ = nullptr; |
EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { |
+ SetUpRequest(); |
EXPECT_EQ(MockResourceLoader::Status::IDLE, |
mock_loader_->OnWillStart(request_->url())); |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
+ SetUpRequest(); |
rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
scoped_refptr<net::IOBufferWithSize> metadata = new net::IOBufferWithSize(5); |
memcpy(metadata->data(), "hello", 5); |
@@ -431,6 +468,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -440,6 +478,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
+ SetUpRequest(); |
rdh_.set_max_num_in_flight_requests_per_process(0); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
@@ -451,6 +490,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
// The buffer size that the mime sniffer requires implicitly. |
@@ -481,6 +521,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
TEST_F(MojoAsyncResourceHandlerTest, |
OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
+ SetUpRequest(); |
MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
@@ -517,6 +558,7 @@ TEST_F(MojoAsyncResourceHandlerTest, |
TEST_F(MojoAsyncResourceHandlerTest, |
IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
// The io_buffer size that the mime sniffer requires implicitly. |
@@ -532,6 +574,7 @@ TEST_F(MojoAsyncResourceHandlerTest, |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ResourceRequestInfoImpl::ForRequest(request_.get()) |
@@ -555,6 +598,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
// This test case sets different status values from OnResponseCompleted. |
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
+ SetUpRequest(); |
rdh_.SetDelegate(nullptr); |
// Don't use CallOnWillStartAndOnResponseStarted as this test case manually |
// sets the null delegate. |
@@ -588,6 +632,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
+ SetUpRequest(); |
net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
net::ERR_TIMED_OUT); |
@@ -602,6 +647,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
+ SetUpRequest(); |
net::URLRequestStatus status(net::URLRequestStatus::FAILED, |
net::ERR_TIMED_OUT); |
@@ -616,6 +662,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -644,6 +691,7 @@ TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -683,6 +731,7 @@ TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { |
// In this case, an error is notified after OnWillRead, before OnReadCompleted. |
TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -710,12 +759,14 @@ TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
} |
TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
+ SetUpRequest(); |
handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); |
} |
TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
+ SetUpRequest(); |
handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -723,6 +774,7 @@ TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
TEST_F(MojoAsyncResourceHandlerTest, |
BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { |
+ SetUpRequest(); |
handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
size_t written = 0; |
@@ -760,6 +812,7 @@ TEST_F(MojoAsyncResourceHandlerTest, |
TEST_F(MojoAsyncResourceHandlerTest, |
EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { |
+ SetUpRequest(); |
MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
@@ -767,6 +820,7 @@ TEST_F(MojoAsyncResourceHandlerTest, |
} |
TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -778,6 +832,7 @@ TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
TEST_F(MojoAsyncResourceHandlerTest, |
EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
+ SetUpRequest(); |
MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -790,6 +845,7 @@ TEST_F(MojoAsyncResourceHandlerTest, |
TEST_F(MojoAsyncResourceHandlerTest, |
EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
+ SetUpRequest(); |
MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -824,8 +880,30 @@ TEST_F(MojoAsyncResourceHandlerTest, |
EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); |
} |
+TEST_F(MojoAsyncResourceHandlerTest, UploadProgressHandling) { |
+ net::URLRequestMockDataJob::AddUrlHandlerForHostname("foo"); |
+ FakeUploadDataStream* upload = new FakeUploadDataStream(0, 1000); |
+ SetUpRequestWithUpload(base::WrapUnique(upload)); |
+ request_->Start(); |
+ |
+ net::UploadProgress progress = request_->GetUploadProgress(); |
+ EXPECT_EQ(0u, progress.position()); |
+ EXPECT_EQ(1000u, progress.size()); |
+ |
+ EXPECT_EQ(0, url_loader_client_.current_upload_position()); |
+ EXPECT_EQ(0, url_loader_client_.total_upload_size()); |
+ |
+ upload->set_position(1000); |
+ ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
mmenke
2017/01/18 17:00:46
So there are three paths to update the status, so
tzik
2017/01/19 11:53:09
Done.
|
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(1000, url_loader_client_.current_upload_position()); |
+ EXPECT_EQ(1000, url_loader_client_.total_upload_size()); |
+} |
+ |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
OnWillReadWithLongContents) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
std::string expected; |
@@ -874,6 +952,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
BeginWriteFailsOnReadCompleted) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -885,6 +964,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
BeginWriteReturnsShouldWaitOnReadCompleted) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
@@ -896,6 +976,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
BeginWriteFailsOnResume) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
@@ -927,6 +1008,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
} |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
+ SetUpRequest(); |
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
while (true) { |
@@ -968,6 +1050,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
} |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
+ SetUpRequest(); |
rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, |
@@ -1033,6 +1116,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
// redirect, despite the fact that no redirect has been received yet. |
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
MalformedFollowRedirectRequest) { |
+ SetUpRequest(); |
handler_->FollowRedirect(); |
EXPECT_TRUE(handler_->has_received_bad_message()); |
@@ -1042,6 +1126,7 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
TEST_P( |
MojoAsyncResourceHandlerWithAllocationSizeTest, |
OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnResponseCompleted) { |
+ SetUpRequest(); |
rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, |
@@ -1092,6 +1177,7 @@ TEST_P( |
TEST_P( |
MojoAsyncResourceHandlerWithAllocationSizeTest, |
OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnResponseCompleted) { |
+ SetUpRequest(); |
rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
ASSERT_EQ(MockResourceLoader::Status::IDLE, |