From 819ba85927138d71e488fb7a006d10e7abeec01b Mon Sep 17 00:00:00 2001 From: "maksim.sisov" Date: Wed, 17 Aug 2016 01:22:52 -0700 Subject: [PATCH] Add net log to UploadDataStream. Improve the granularity of net-internals logging for upload to be able to discover where the hang is occurring in situations like in the issue 611436. BUG=613337 Review-Url: https://codereview.chromium.org/2227503003 Cr-Commit-Position: refs/heads/master@{#412474} --- .../devtools_network_controller_unittest.cc | 4 +- .../devtools_network_upload_data_stream.cc | 6 +- .../devtools_network_upload_data_stream.h | 2 +- .../android/cronet_upload_data_stream.cc | 2 +- .../android/cronet_upload_data_stream.h | 2 +- .../test/test_upload_data_stream_handler.cc | 6 +- .../domain_reliability/uploader_unittest.cc | 3 +- .../loader/resource_loader_unittest.cc | 5 +- .../upload_data_stream_builder_unittest.cc | 9 ++- net/base/chunked_upload_data_stream.cc | 2 +- net/base/chunked_upload_data_stream.h | 2 +- .../chunked_upload_data_stream_unittest.cc | 42 +++++++---- net/base/elements_upload_data_stream.cc | 2 +- net/base/elements_upload_data_stream.h | 2 +- .../elements_upload_data_stream_unittest.cc | 65 +++++++++++------ net/base/upload_data_stream.cc | 71 +++++++++++++++++-- net/base/upload_data_stream.h | 7 +- net/http/http_network_transaction.cc | 2 +- net/http/http_stream_parser_unittest.cc | 46 ++++++++---- net/log/net_log_event_type_list.h | 23 ++++++ net/quic/chromium/quic_http_stream_test.cc | 22 +++--- net/quic/core/quic_end_to_end_unittest.cc | 5 +- net/spdy/spdy_http_stream_unittest.cc | 39 +++++++--- 23 files changed, 267 insertions(+), 102 deletions(-) diff --git a/chrome/browser/devtools/devtools_network_controller_unittest.cc b/chrome/browser/devtools/devtools_network_controller_unittest.cc index 0e51b24f9ecb64..25376301da2707 100644 --- a/chrome/browser/devtools/devtools_network_controller_unittest.cc +++ b/chrome/browser/devtools/devtools_network_controller_unittest.cc @@ -126,8 +126,8 @@ class DevToolsNetworkControllerHelper { } int ReadUploadData() { - EXPECT_EQ(net::OK, - transaction_->custom_upload_data_stream_->Init(completion_callback_)); + EXPECT_EQ(net::OK, transaction_->custom_upload_data_stream_->Init( + completion_callback_, net::BoundNetLog())); return transaction_->custom_upload_data_stream_->Read( buffer_.get(), 64, completion_callback_); } diff --git a/chrome/browser/devtools/devtools_network_upload_data_stream.cc b/chrome/browser/devtools/devtools_network_upload_data_stream.cc index 4eaddbf3799833..8e8031c09cd581 100644 --- a/chrome/browser/devtools/devtools_network_upload_data_stream.cc +++ b/chrome/browser/devtools/devtools_network_upload_data_stream.cc @@ -33,11 +33,13 @@ bool DevToolsNetworkUploadDataStream::IsInMemory() const { return false; } -int DevToolsNetworkUploadDataStream::InitInternal() { +int DevToolsNetworkUploadDataStream::InitInternal( + const net::BoundNetLog& net_log) { throttled_byte_count_ = 0; int result = upload_data_stream_->Init( base::Bind(&DevToolsNetworkUploadDataStream::StreamInitCallback, - base::Unretained(this))); + base::Unretained(this)), + net_log); if (result == net::OK && !is_chunked()) SetSize(upload_data_stream_->size()); return result; diff --git a/chrome/browser/devtools/devtools_network_upload_data_stream.h b/chrome/browser/devtools/devtools_network_upload_data_stream.h index ee5def070768b6..be365c2cc51c60 100644 --- a/chrome/browser/devtools/devtools_network_upload_data_stream.h +++ b/chrome/browser/devtools/devtools_network_upload_data_stream.h @@ -29,7 +29,7 @@ class DevToolsNetworkUploadDataStream : public net::UploadDataStream { private: // net::UploadDataStream implementation. bool IsInMemory() const override; - int InitInternal() override; + int InitInternal(const net::BoundNetLog& net_log) override; int ReadInternal(net::IOBuffer* buf, int buf_len) override; void ResetInternal() override; diff --git a/components/cronet/android/cronet_upload_data_stream.cc b/components/cronet/android/cronet_upload_data_stream.cc index f3b234e9021566..750919c2c1db8a 100644 --- a/components/cronet/android/cronet_upload_data_stream.cc +++ b/components/cronet/android/cronet_upload_data_stream.cc @@ -24,7 +24,7 @@ CronetUploadDataStream::~CronetUploadDataStream() { delegate_->OnUploadDataStreamDestroyed(); } -int CronetUploadDataStream::InitInternal() { +int CronetUploadDataStream::InitInternal(const net::BoundNetLog& net_log) { // ResetInternal should have been called before init, if the stream was in // use. DCHECK(!waiting_on_read_); diff --git a/components/cronet/android/cronet_upload_data_stream.h b/components/cronet/android/cronet_upload_data_stream.h index e0aac96bba4096..97b6e4e053c4bf 100644 --- a/components/cronet/android/cronet_upload_data_stream.h +++ b/components/cronet/android/cronet_upload_data_stream.h @@ -67,7 +67,7 @@ class CronetUploadDataStream : public net::UploadDataStream { private: // net::UploadDataStream implementation: - int InitInternal() override; + int InitInternal(const net::BoundNetLog& net_log) override; int ReadInternal(net::IOBuffer* buf, int buf_len) override; void ResetInternal() override; diff --git a/components/cronet/android/test/test_upload_data_stream_handler.cc b/components/cronet/android/test/test_upload_data_stream_handler.cc index e3fb74efa74f59..455f4ba7e643e4 100644 --- a/components/cronet/android/test/test_upload_data_stream_handler.cc +++ b/components/cronet/android/test/test_upload_data_stream_handler.cc @@ -115,8 +115,10 @@ void TestUploadDataStreamHandler::InitOnNetworkThread() { init_callback_invoked_ = false; read_buffer_ = nullptr; bytes_read_ = 0; - int res = upload_data_stream_->Init(base::Bind( - &TestUploadDataStreamHandler::OnInitCompleted, base::Unretained(this))); + int res = upload_data_stream_->Init( + base::Bind(&TestUploadDataStreamHandler::OnInitCompleted, + base::Unretained(this)), + net::BoundNetLog()); JNIEnv* env = base::android::AttachCurrentThread(); cronet::Java_TestUploadDataStreamHandler_onInitCalled( env, jtest_upload_data_stream_handler_, res); diff --git a/components/domain_reliability/uploader_unittest.cc b/components/domain_reliability/uploader_unittest.cc index 808ffc3901040c..5f13a1c6067059 100644 --- a/components/domain_reliability/uploader_unittest.cc +++ b/components/domain_reliability/uploader_unittest.cc @@ -52,7 +52,8 @@ class UploadMockURLRequestJob : public net::URLRequestJob { void Start() override { int rv = upload_stream_->Init( base::Bind(&UploadMockURLRequestJob::OnStreamInitialized, - base::Unretained(this))); + base::Unretained(this)), + net::BoundNetLog()); if (rv == net::ERR_IO_PENDING) return; OnStreamInitialized(rv); diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc index de9261d0b02ba4..9bb2394d689789 100644 --- a/content/browser/loader/resource_loader_unittest.cc +++ b/content/browser/loader/resource_loader_unittest.cc @@ -497,10 +497,11 @@ class NonChunkedUploadDataStream : public net::UploadDataStream { } private: - int InitInternal() override { + int InitInternal(const net::BoundNetLog& net_log) override { SetSize(size_); stream_.Init(base::Bind(&NonChunkedUploadDataStream::OnInitCompleted, - base::Unretained(this))); + base::Unretained(this)), + net_log); return net::OK; } diff --git a/content/browser/loader/upload_data_stream_builder_unittest.cc b/content/browser/loader/upload_data_stream_builder_unittest.cc index c39d83cd0e877b..815cb835b193cb 100644 --- a/content/browser/loader/upload_data_stream_builder_unittest.cc +++ b/content/browser/loader/upload_data_stream_builder_unittest.cc @@ -136,7 +136,8 @@ TEST(UploadDataStreamBuilderTest, ASSERT_EQ(3U, readers.size()); net::TestCompletionCallback init_callback; - ASSERT_EQ(net::ERR_IO_PENDING, upload->Init(init_callback.callback())); + ASSERT_EQ(net::ERR_IO_PENDING, + upload->Init(init_callback.callback(), net::BoundNetLog())); EXPECT_EQ(net::OK, init_callback.WaitForResult()); EXPECT_EQ(kZeroLength, upload->size()); @@ -183,7 +184,8 @@ TEST(UploadDataStreamBuilderTest, ResetUploadStreamWithBlob) { base::ThreadTaskRunnerHandle::Get().get())); net::TestCompletionCallback init_callback; - ASSERT_EQ(net::OK, upload->Init(init_callback.callback())); + ASSERT_EQ(net::OK, + upload->Init(init_callback.callback(), net::BoundNetLog())); // Read part of the data. const int kBufferLength = 4; @@ -197,7 +199,8 @@ TEST(UploadDataStreamBuilderTest, ResetUploadStreamWithBlob) { std::memcmp(kBlobData.c_str(), buffer->data(), buffer->size())); // Reset. - ASSERT_EQ(net::OK, upload->Init(init_callback.callback())); + ASSERT_EQ(net::OK, + upload->Init(init_callback.callback(), net::BoundNetLog())); // Read all the data. buffer = new net::IOBufferWithSize(kBlobDataLength); diff --git a/net/base/chunked_upload_data_stream.cc b/net/base/chunked_upload_data_stream.cc index 8d5a2912bcc009..724af3424bd15b 100644 --- a/net/base/chunked_upload_data_stream.cc +++ b/net/base/chunked_upload_data_stream.cc @@ -64,7 +64,7 @@ void ChunkedUploadDataStream::AppendData( OnReadCompleted(result); } -int ChunkedUploadDataStream::InitInternal() { +int ChunkedUploadDataStream::InitInternal(const BoundNetLog& net_log) { // ResetInternal should already have been called. DCHECK(!read_buffer_.get()); DCHECK_EQ(0u, read_index_); diff --git a/net/base/chunked_upload_data_stream.h b/net/base/chunked_upload_data_stream.h index f58faf6a09cb14..4c23d102f96165 100644 --- a/net/base/chunked_upload_data_stream.h +++ b/net/base/chunked_upload_data_stream.h @@ -79,7 +79,7 @@ class NET_EXPORT ChunkedUploadDataStream : public UploadDataStream { private: // UploadDataStream implementation. - int InitInternal() override; + int InitInternal(const BoundNetLog& net_log) override; int ReadInternal(IOBuffer* buf, int buf_len) override; void ResetInternal() override; diff --git a/net/base/chunked_upload_data_stream_unittest.cc b/net/base/chunked_upload_data_stream_unittest.cc index 926e927e78bac0..67a35c36c688f6 100644 --- a/net/base/chunked_upload_data_stream_unittest.cc +++ b/net/base/chunked_upload_data_stream_unittest.cc @@ -43,7 +43,8 @@ std::string ReadSync(UploadDataStream* stream, int buffer_size) { TEST(ChunkedUploadDataStreamTest, AppendOnce) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -66,7 +67,8 @@ TEST(ChunkedUploadDataStreamTest, AppendOnce) { TEST(ChunkedUploadDataStreamTest, AppendOnceBeforeRead) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -88,7 +90,8 @@ TEST(ChunkedUploadDataStreamTest, AppendOnceBeforeInit) { ChunkedUploadDataStream stream(0); stream.AppendData(kTestData, kTestDataSize, true); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -104,7 +107,8 @@ TEST(ChunkedUploadDataStreamTest, AppendOnceBeforeInit) { TEST(ChunkedUploadDataStreamTest, MultipleAppends) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); EXPECT_EQ(0u, stream.position()); @@ -133,7 +137,8 @@ TEST(ChunkedUploadDataStreamTest, MultipleAppends) { TEST(ChunkedUploadDataStreamTest, MultipleAppendsBetweenReads) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -162,7 +167,8 @@ TEST(ChunkedUploadDataStreamTest, MultipleAppendsBeforeInit) { stream.AppendData(kTestData + 1, 1, false); stream.AppendData(kTestData + 2, kTestDataSize - 2, true); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -184,7 +190,8 @@ TEST(ChunkedUploadDataStreamTest, MultipleReads) { stream.AppendData(kTestData, kTestDataSize, false); stream.AppendData(kTestData, kTestDataSize, true); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -214,7 +221,8 @@ TEST(ChunkedUploadDataStreamTest, MultipleReads) { TEST(ChunkedUploadDataStreamTest, EmptyUpload) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -236,7 +244,8 @@ TEST(ChunkedUploadDataStreamTest, EmptyUploadEndedBeforeInit) { ChunkedUploadDataStream stream(0); stream.AppendData(NULL, 0, true); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -253,7 +262,8 @@ TEST(ChunkedUploadDataStreamTest, RewindAfterComplete) { stream.AppendData(kTestData, 1, false); stream.AppendData(kTestData + 1, kTestDataSize - 1, true); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -265,7 +275,8 @@ TEST(ChunkedUploadDataStreamTest, RewindAfterComplete) { ASSERT_TRUE(stream.IsEOF()); // Rewind stream and repeat. - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -280,7 +291,8 @@ TEST(ChunkedUploadDataStreamTest, RewindAfterComplete) { TEST(ChunkedUploadDataStreamTest, RewindWhileReading) { ChunkedUploadDataStream stream(0); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -291,7 +303,8 @@ TEST(ChunkedUploadDataStreamTest, RewindWhileReading) { int result = stream.Read(buf.get(), kTestBufferSize, callback.callback()); ASSERT_THAT(result, IsError(ERR_IO_PENDING)); - ASSERT_THAT(stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); EXPECT_FALSE(stream.IsInMemory()); EXPECT_EQ(0u, stream.size()); // Content-Length is 0 for chunked data. EXPECT_EQ(0u, stream.position()); @@ -319,7 +332,8 @@ TEST(ChunkedUploadDataStreamTest, ChunkedUploadDataStreamWriter) { // Write before Init. ASSERT_TRUE(writer->AppendData(kTestData, 1, false)); - ASSERT_THAT(stream->Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(stream->Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); // Write after Init. ASSERT_TRUE(writer->AppendData(kTestData + 1, kTestDataSize - 1, false)); diff --git a/net/base/elements_upload_data_stream.cc b/net/base/elements_upload_data_stream.cc index 2fdbf1934e3ae7..bd6d39fe3ed132 100644 --- a/net/base/elements_upload_data_stream.cc +++ b/net/base/elements_upload_data_stream.cc @@ -35,7 +35,7 @@ std::unique_ptr ElementsUploadDataStream::CreateWithReader( new ElementsUploadDataStream(std::move(readers), identifier)); } -int ElementsUploadDataStream::InitInternal() { +int ElementsUploadDataStream::InitInternal(const BoundNetLog& net_log) { return InitElements(0); } diff --git a/net/base/elements_upload_data_stream.h b/net/base/elements_upload_data_stream.h index 296cfbb80520e9..e787852d12574e 100644 --- a/net/base/elements_upload_data_stream.h +++ b/net/base/elements_upload_data_stream.h @@ -43,7 +43,7 @@ class NET_EXPORT ElementsUploadDataStream : public UploadDataStream { bool IsInMemory() const override; const std::vector>* GetElementReaders() const override; - int InitInternal() override; + int InitInternal(const net::BoundNetLog& net_log) override; int ReadInternal(IOBuffer* buf, int buf_len) override; void ResetInternal() override; diff --git a/net/base/elements_upload_data_stream_unittest.cc b/net/base/elements_upload_data_stream_unittest.cc index fadf45d4d911a4..2c00e9d7a1d7dd 100644 --- a/net/base/elements_upload_data_stream_unittest.cc +++ b/net/base/elements_upload_data_stream_unittest.cc @@ -154,7 +154,7 @@ class ElementsUploadDataStreamTest : public PlatformTest { TEST_F(ElementsUploadDataStreamTest, EmptyUploadData) { std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(stream->Init(CompletionCallback(), BoundNetLog()), IsOk()); EXPECT_TRUE(stream->IsInMemory()); EXPECT_EQ(0U, stream->size()); EXPECT_EQ(0U, stream->position()); @@ -166,7 +166,7 @@ TEST_F(ElementsUploadDataStreamTest, ConsumeAllBytes) { base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(stream->Init(CompletionCallback(), BoundNetLog()), IsOk()); EXPECT_TRUE(stream->IsInMemory()); EXPECT_EQ(kTestDataSize, stream->size()); EXPECT_EQ(0U, stream->position()); @@ -195,7 +195,8 @@ TEST_F(ElementsUploadDataStreamTest, File) { TestCompletionCallback init_callback; std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(init_callback.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsInMemory()); EXPECT_EQ(kTestDataSize, stream->size()); @@ -231,7 +232,8 @@ TEST_F(ElementsUploadDataStreamTest, FileSmallerThanLength) { TestCompletionCallback init_callback; std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(init_callback.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsInMemory()); EXPECT_EQ(kFakeSize, stream->size()); @@ -272,7 +274,7 @@ TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) { new ElementsUploadDataStream(std::move(element_readers_), 0)); // Run Init(). - ASSERT_THAT(stream->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(stream->Init(CompletionCallback(), BoundNetLog()), IsOk()); EXPECT_EQ(kTestDataSize*2, stream->size()); EXPECT_EQ(0U, stream->position()); EXPECT_FALSE(stream->IsEOF()); @@ -308,7 +310,8 @@ TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) { // Run Init(). TestCompletionCallback init_callback; - ASSERT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback.WaitForResult(), IsOk()); EXPECT_EQ(kTestDataSize*2, stream->size()); EXPECT_EQ(0U, stream->position()); @@ -350,7 +353,8 @@ TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { TestCompletionCallback init_callback; std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(init_callback.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsInMemory()); EXPECT_EQ(kStreamSize, stream->size()); @@ -402,7 +406,8 @@ TEST_F(ElementsUploadDataStreamTest, InitAsync) { // Run Init(). TestCompletionCallback callback; - ASSERT_THAT(stream->Init(callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(callback.WaitForResult(), IsOk()); } @@ -419,7 +424,8 @@ TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureAsync) { // Run Init(). TestCompletionCallback callback; - ASSERT_THAT(stream->Init(callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(callback.WaitForResult(), IsError(ERR_FAILED)); } @@ -441,7 +447,8 @@ TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureSync) { // Run Init(). TestCompletionCallback callback; - ASSERT_THAT(stream->Init(callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(callback.WaitForResult(), IsError(ERR_FAILED)); } @@ -452,7 +459,7 @@ TEST_F(ElementsUploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers_), 0)); - ASSERT_THAT(stream->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(stream->Init(CompletionCallback(), BoundNetLog()), IsOk()); EXPECT_TRUE(stream->IsInMemory()); EXPECT_EQ(kTestDataSize, stream->size()); EXPECT_EQ(0U, stream->position()); @@ -496,7 +503,8 @@ TEST_F(ElementsUploadDataStreamTest, ReadAsync) { // Run Init(). TestCompletionCallback init_callback; - EXPECT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + EXPECT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback.WaitForResult(), IsOk()); scoped_refptr buf = new IOBuffer(kTestBufferSize); @@ -536,7 +544,8 @@ void ElementsUploadDataStreamTest::FileChangedHelper( TestCompletionCallback init_callback; std::unique_ptr stream( new ElementsUploadDataStream(std::move(element_readers), 0)); - ASSERT_THAT(stream->Init(init_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); int error_code = init_callback.WaitForResult(); if (error_expected) ASSERT_THAT(error_code, IsError(ERR_UPLOAD_FILE_CHANGED)); @@ -584,7 +593,8 @@ TEST_F(ElementsUploadDataStreamTest, MultipleInit) { // Call Init(). TestCompletionCallback init_callback1; - ASSERT_THAT(stream->Init(init_callback1.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback1.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(init_callback1.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -595,7 +605,8 @@ TEST_F(ElementsUploadDataStreamTest, MultipleInit) { // Call Init() again to reset. TestCompletionCallback init_callback2; - ASSERT_THAT(stream->Init(init_callback2.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback2.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(init_callback2.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -626,7 +637,8 @@ TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { expected_data += expected_data; // Call Init(). - ASSERT_THAT(stream->Init(test_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(test_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(test_callback.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -636,7 +648,8 @@ TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { EXPECT_TRUE(stream->IsEOF()); // Call Init() again to reset. - ASSERT_THAT(stream->Init(test_callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(test_callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(test_callback.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -668,7 +681,8 @@ TEST_F(ElementsUploadDataStreamTest, InitToReset) { // Call Init(). TestCompletionCallback init_callback1; - ASSERT_THAT(stream->Init(init_callback1.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback1.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback1.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -686,7 +700,8 @@ TEST_F(ElementsUploadDataStreamTest, InitToReset) { // Call Init to reset the state. TestCompletionCallback init_callback2; - ASSERT_THAT(stream->Init(init_callback2.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback2.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback2.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -724,11 +739,13 @@ TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncInit) { // Start Init. TestCompletionCallback init_callback1; - EXPECT_THAT(stream->Init(init_callback1.callback()), IsError(ERR_IO_PENDING)); + EXPECT_THAT(stream->Init(init_callback1.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); // Call Init again to cancel the previous init. TestCompletionCallback init_callback2; - EXPECT_THAT(stream->Init(init_callback2.callback()), IsError(ERR_IO_PENDING)); + EXPECT_THAT(stream->Init(init_callback2.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback2.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -770,7 +787,8 @@ TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { // Call Init(). TestCompletionCallback init_callback1; - ASSERT_THAT(stream->Init(init_callback1.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(stream->Init(init_callback1.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback1.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); @@ -786,7 +804,8 @@ TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { // Call Init to cancel the previous read. TestCompletionCallback init_callback2; - EXPECT_THAT(stream->Init(init_callback2.callback()), IsError(ERR_IO_PENDING)); + EXPECT_THAT(stream->Init(init_callback2.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); EXPECT_THAT(init_callback2.WaitForResult(), IsOk()); EXPECT_FALSE(stream->IsEOF()); EXPECT_EQ(kTestDataSize*2, stream->size()); diff --git a/net/base/upload_data_stream.cc b/net/base/upload_data_stream.cc index 37e19aed313d21..feb0fa037b8c9a 100644 --- a/net/base/upload_data_stream.cc +++ b/net/base/upload_data_stream.cc @@ -6,11 +6,38 @@ #include "base/callback_helpers.h" #include "base/logging.h" +#include "base/values.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" namespace net { +namespace { + +std::unique_ptr NetLogInitEndInfoCallback( + int result, + int total_size, + bool is_chunked, + NetLogCaptureMode /* capture_mode */) { + std::unique_ptr dict(new base::DictionaryValue()); + + dict->SetInteger("net_error", result); + dict->SetInteger("total_size", total_size); + dict->SetBoolean("is_chunked", is_chunked); + return std::move(dict); +} + +std::unique_ptr NetLogReadInfoCallback( + int current_position, + NetLogCaptureMode /* capture_mode */) { + std::unique_ptr dict(new base::DictionaryValue()); + + dict->SetInteger("current_position", current_position); + return std::move(dict); +} + +} // namespace + UploadDataStream::UploadDataStream(bool is_chunked, int64_t identifier) : total_size_(0), current_position_(0), @@ -23,18 +50,23 @@ UploadDataStream::UploadDataStream(bool is_chunked, int64_t identifier) UploadDataStream::~UploadDataStream() { } -int UploadDataStream::Init(const CompletionCallback& callback) { +int UploadDataStream::Init(const CompletionCallback& callback, + const BoundNetLog& net_log) { Reset(); DCHECK(!initialized_successfully_); DCHECK(callback_.is_null()); DCHECK(!callback.is_null() || IsInMemory()); - int result = InitInternal(); + net_log_ = net_log; + net_log_.BeginEvent(NetLog::TYPE_UPLOAD_DATA_STREAM_INIT); + + int result = InitInternal(net_log_); if (result == ERR_IO_PENDING) { DCHECK(!IsInMemory()); callback_ = callback; } else { OnInitCompleted(result); } + return result; } @@ -44,15 +76,21 @@ int UploadDataStream::Read(IOBuffer* buf, DCHECK(!callback.is_null() || IsInMemory()); DCHECK(initialized_successfully_); DCHECK_GT(buf_len, 0); - if (is_eof_) - return 0; - int result = ReadInternal(buf, buf_len); + + net_log_.BeginEvent(NetLog::TYPE_UPLOAD_DATA_STREAM_READ, + base::Bind(&NetLogReadInfoCallback, current_position_)); + + int result = 0; + if (!is_eof_) + result = ReadInternal(buf, buf_len); + if (result == ERR_IO_PENDING) { DCHECK(!IsInMemory()); callback_ = callback; } else { OnReadCompleted(result); } + return result; } @@ -63,6 +101,21 @@ bool UploadDataStream::IsEOF() const { } void UploadDataStream::Reset() { + // If there's a pending callback, there's a pending init or read call that is + // being canceled. + if (!callback_.is_null()) { + if (!initialized_successfully_) { + // If initialization has not yet succeeded, this call is aborting + // initialization. + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_UPLOAD_DATA_STREAM_INIT, + ERR_ABORTED); + } else { + // Otherwise, a read is being aborted. + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_UPLOAD_DATA_STREAM_READ, + ERR_ABORTED); + } + } + current_position_ = 0; initialized_successfully_ = false; is_eof_ = false; @@ -104,6 +157,11 @@ void UploadDataStream::OnInitCompleted(int result) { if (!is_chunked_ && total_size_ == 0) is_eof_ = true; } + + net_log_.EndEvent( + NetLog::TYPE_UPLOAD_DATA_STREAM_INIT, + base::Bind(&NetLogInitEndInfoCallback, result, total_size_, is_chunked_)); + if (!callback_.is_null()) base::ResetAndReturn(&callback_).Run(result); } @@ -122,6 +180,9 @@ void UploadDataStream::OnReadCompleted(int result) { } } + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_UPLOAD_DATA_STREAM_READ, + result); + if (!callback_.is_null()) base::ResetAndReturn(&callback_).Run(result); } diff --git a/net/base/upload_data_stream.h b/net/base/upload_data_stream.h index b3f360ef67f16b..9c269613e69524 100644 --- a/net/base/upload_data_stream.h +++ b/net/base/upload_data_stream.h @@ -13,6 +13,7 @@ #include "base/macros.h" #include "net/base/completion_callback.h" #include "net/base/net_export.h" +#include "net/log/net_log.h" namespace net { @@ -43,7 +44,7 @@ class NET_EXPORT UploadDataStream { // Returns OK on success. Returns ERR_UPLOAD_FILE_CHANGED if the expected // file modification time is set (usually not set, but set for sliced // files) and the target file is changed. - int Init(const CompletionCallback& callback); + int Init(const CompletionCallback& callback, const BoundNetLog& net_log); // When possible, reads up to |buf_len| bytes synchronously from the upload // data stream to |buf| and returns the number of bytes read; otherwise, @@ -107,7 +108,7 @@ class NET_EXPORT UploadDataStream { // See Init(). If it returns ERR_IO_PENDING, OnInitCompleted must be called // once it completes. If the upload is not chunked, SetSize must be called // before it completes. - virtual int InitInternal() = 0; + virtual int InitInternal(const BoundNetLog& net_log) = 0; // See Read(). For chunked uploads, must call SetIsFinalChunk if this is the // final chunk. For non-chunked uploads, the UploadDataStream determins which @@ -135,6 +136,8 @@ class NET_EXPORT UploadDataStream { CompletionCallback callback_; + BoundNetLog net_log_; + DISALLOW_COPY_AND_ASSIGN(UploadDataStream); }; diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index ada7a37af36074..b5db3d24cf5990 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -1074,7 +1074,7 @@ int HttpNetworkTransaction::DoInitRequestBody() { next_state_ = STATE_INIT_REQUEST_BODY_COMPLETE; int rv = OK; if (request_->upload_data_stream) - rv = request_->upload_data_stream->Init(io_callback_); + rv = request_->upload_data_stream->Init(io_callback_, net_log_); return rv; } diff --git a/net/http/http_stream_parser_unittest.cc b/net/http/http_stream_parser_unittest.cc index f72cd5f7d5e1ff..72a02ee0af3f2f 100644 --- a/net/http/http_stream_parser_unittest.cc +++ b/net/http/http_stream_parser_unittest.cc @@ -79,7 +79,7 @@ class ReadErrorUploadDataStream : public UploadDataStream { void CompleteRead() { UploadDataStream::OnReadCompleted(ERR_FAILED); } // UploadDataStream implementation: - int InitInternal() override { return OK; } + int InitInternal(const BoundNetLog& net_log) override { return OK; } int ReadInternal(IOBuffer* buf, int buf_len) override { if (async_ == FailureMode::ASYNC) { @@ -112,7 +112,8 @@ TEST(HttpStreamParser, DataReadErrorSynchronous) { ReadErrorUploadDataStream upload_data_stream( ReadErrorUploadDataStream::FailureMode::SYNC); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -148,7 +149,8 @@ TEST(HttpStreamParser, DataReadErrorAsynchronous) { ReadErrorUploadDataStream upload_data_stream( ReadErrorUploadDataStream::FailureMode::ASYNC); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -241,7 +243,7 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_EmptyBody) { std::vector> element_readers; std::unique_ptr body(base::WrapUnique( new ElementsUploadDataStream(std::move(element_readers), 0))); - ASSERT_THAT(body->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(body->Init(CompletionCallback(), BoundNetLog()), IsOk()); // Shouldn't be merged if upload data is empty. ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( "some header", body.get())); @@ -251,7 +253,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) { const std::string payload = "123"; std::unique_ptr body(new ChunkedUploadDataStream(0)); body->AppendData(payload.data(), payload.size(), true); - ASSERT_THAT(body->Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT(body->Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); // Shouldn't be merged if upload data carries chunked data. ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( "some header", body.get())); @@ -274,7 +277,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) { std::unique_ptr body( new ElementsUploadDataStream(std::move(element_readers), 0)); TestCompletionCallback callback; - ASSERT_THAT(body->Init(callback.callback()), IsError(ERR_IO_PENDING)); + ASSERT_THAT(body->Init(callback.callback(), BoundNetLog()), + IsError(ERR_IO_PENDING)); ASSERT_THAT(callback.WaitForResult(), IsOk()); // Shouldn't be merged if upload data carries a file, as it's not in-memory. ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( @@ -293,7 +297,7 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_SmallBodyInMemory) { std::unique_ptr body( new ElementsUploadDataStream(std::move(element_readers), 0)); - ASSERT_THAT(body->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(body->Init(CompletionCallback(), BoundNetLog()), IsOk()); // Yes, should be merged if the in-memory body is small here. ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( "some header", body.get())); @@ -307,7 +311,7 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_LargeBodyInMemory) { std::unique_ptr body( new ElementsUploadDataStream(std::move(element_readers), 0)); - ASSERT_THAT(body->Init(CompletionCallback()), IsOk()); + ASSERT_THAT(body->Init(CompletionCallback(), BoundNetLog()), IsOk()); // Shouldn't be merged if the in-memory body is large here. ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( "some header", body.get())); @@ -449,7 +453,8 @@ TEST(HttpStreamParser, SentBytesPost) { element_readers.push_back( base::WrapUnique(new UploadBytesElementReader("hello world!", 12))); ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -487,7 +492,8 @@ TEST(HttpStreamParser, SentBytesChunkedPostError) { CreateConnectedSocketHandle(&data); ChunkedUploadDataStream upload_data_stream(0); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -544,7 +550,9 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) { }; ChunkedUploadDataStream upload_stream(0); - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); std::unique_ptr socket_handle = @@ -620,7 +628,9 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) { }; ChunkedUploadDataStream upload_stream(0); - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); // Append the only chunk. upload_stream.AppendData(kChunk, arraysize(kChunk) - 1, true); @@ -700,7 +710,9 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) { ChunkedUploadDataStream upload_stream(0); upload_stream.AppendData(kChunk1, arraysize(kChunk1) - 1, false); - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); std::unique_ptr socket_handle = @@ -782,7 +794,9 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) { }; ChunkedUploadDataStream upload_stream(0); - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); std::unique_ptr socket_handle = @@ -853,7 +867,9 @@ TEST(HttpStreamParser, SyncEmptyChunkedUpload) { }; ChunkedUploadDataStream upload_stream(0); - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); // Append final empty chunk. upload_stream.AppendData(nullptr, 0, true); diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h index 6a26dc65bc0654..833e421f022c68 100644 --- a/net/log/net_log_event_type_list.h +++ b/net/log/net_log_event_type_list.h @@ -3019,3 +3019,26 @@ EVENT_TYPE(SAFE_BROWSING_CHECKING_URL) // "resumed_redirect", "unchecked_redirect"> // } EVENT_TYPE(SAFE_BROWSING_DEFERRED) + +// Marks start of UploadDataStream that is logged on initialization. +// The END phase contains the following parameters: +// { +// "net_error": , +// "total_size": , +// "is_chunked": +// } +EVENT_TYPE(UPLOAD_DATA_STREAM_INIT) + +// The start/end of UploadDataStream::Read method. +// +// The BEGIN phase contains the following information: +// { +// "current_position": , +// } +// +// The END phase contains the following information: +// { +// "result": 0 is bytes read. Result == 0 means +// the end of file. Result < 0 means an error.> +// } +EVENT_TYPE(UPLOAD_DATA_STREAM_READ) diff --git a/net/quic/chromium/quic_http_stream_test.cc b/net/quic/chromium/quic_http_stream_test.cc index 1545cd1ebd0cf2..c4461f2fb2d267 100644 --- a/net/quic/chromium/quic_http_stream_test.cc +++ b/net/quic/chromium/quic_http_stream_test.cc @@ -123,7 +123,7 @@ class ReadErrorUploadDataStream : public UploadDataStream { void CompleteRead() { UploadDataStream::OnReadCompleted(ERR_FAILED); } // UploadDataStream implementation: - int InitInternal() override { return OK; } + int InitInternal(const BoundNetLog& net_log) override { return OK; } int ReadInternal(IOBuffer* buf, int buf_len) override { if (async_ == FailureMode::ASYNC) { @@ -960,7 +960,9 @@ TEST_P(QuicHttpStreamTest, SendPostRequest) { request_.method = "POST"; request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; - ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback()), IsOk()); + ASSERT_THAT( + request_.upload_data_stream->Init(CompletionCallback(), BoundNetLog()), + IsOk()); EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1026,7 +1028,7 @@ TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); ASSERT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1096,7 +1098,7 @@ TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); ASSERT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1160,7 +1162,7 @@ TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); ASSERT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1350,7 +1352,7 @@ TEST_P(QuicHttpStreamTest, SessionClosedDuringDoLoop) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); size_t chunk_size = strlen(kUploadData); upload_data_stream.AppendData(kUploadData, chunk_size, false); @@ -1378,7 +1380,7 @@ TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendHeadersComplete) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); ASSERT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1403,7 +1405,7 @@ TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); ASSERT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1901,7 +1903,7 @@ TEST_P(QuicHttpStreamTest, DataReadErrorSynchronous) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, @@ -1933,7 +1935,7 @@ TEST_P(QuicHttpStreamTest, DataReadErrorAsynchronous) { request_.url = GURL("http://www.example.org/"); request_.upload_data_stream = &upload_data_stream; ASSERT_EQ(OK, request_.upload_data_stream->Init( - TestCompletionCallback().callback())); + TestCompletionCallback().callback(), BoundNetLog())); EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, diff --git a/net/quic/core/quic_end_to_end_unittest.cc b/net/quic/core/quic_end_to_end_unittest.cc index 79e1c26b9ea34b..809f61bda03d7b 100644 --- a/net/quic/core/quic_end_to_end_unittest.cc +++ b/net/quic/core/quic_end_to_end_unittest.cc @@ -238,8 +238,9 @@ class QuicEndToEndTest : public ::testing::TestWithParam { request_.method = "POST"; request_.url = GURL("https://test.example.com/"); request_.upload_data_stream = upload_data_stream_.get(); - ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback()), - IsOk()); + ASSERT_THAT( + request_.upload_data_stream->Init(CompletionCallback(), BoundNetLog()), + IsOk()); } // Checks that |consumer| completed and received |status_line| and |body|. diff --git a/net/spdy/spdy_http_stream_unittest.cc b/net/spdy/spdy_http_stream_unittest.cc index 7afb3321330b55..1c5fb345cc2614 100644 --- a/net/spdy/spdy_http_stream_unittest.cc +++ b/net/spdy/spdy_http_stream_unittest.cc @@ -76,7 +76,7 @@ class ReadErrorUploadDataStream : public UploadDataStream { void CompleteRead() { UploadDataStream::OnReadCompleted(ERR_FAILED); } // UploadDataStream implementation: - int InitInternal() override { return OK; } + int InitInternal(const BoundNetLog& net_log) override { return OK; } int ReadInternal(IOBuffer* buf, int buf_len) override { if (async_ == FailureMode::ASYNC) { @@ -364,7 +364,9 @@ TEST_F(SpdyHttpStreamTest, SendChunkedPost) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); TestCompletionCallback callback; HttpResponseInfo response; @@ -418,7 +420,9 @@ TEST_F(SpdyHttpStreamTest, SendChunkedPostLastEmpty) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); TestCompletionCallback callback; HttpResponseInfo response; @@ -469,7 +473,9 @@ TEST_F(SpdyHttpStreamTest, ConnectionClosedDuringChunkedPost) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); TestCompletionCallback callback; HttpResponseInfo response; @@ -536,7 +542,9 @@ TEST_F(SpdyHttpStreamTest, DelayedSendChunkedPost) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); upload_stream.AppendData(kUploadData, kUploadDataSize, false); BoundNetLog net_log; @@ -628,7 +636,9 @@ TEST_F(SpdyHttpStreamTest, DelayedSendChunkedPostWithEmptyFinalDataFrame) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); upload_stream.AppendData(kUploadData, kUploadDataSize, false); BoundNetLog net_log; @@ -709,7 +719,9 @@ TEST_F(SpdyHttpStreamTest, ChunkedPostWithEmptyPayload) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); upload_stream.AppendData("", 0, true); BoundNetLog net_log; @@ -820,7 +832,9 @@ TEST_F(SpdyHttpStreamTest, DelayedSendChunkedPostWithWindowUpdate) { request.url = GURL("http://www.example.org/"); request.upload_data_stream = &upload_stream; - ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); + ASSERT_THAT( + upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), + IsOk()); BoundNetLog net_log; std::unique_ptr http_stream( @@ -914,7 +928,8 @@ TEST_F(SpdyHttpStreamTest, DataReadErrorSynchronous) { ReadErrorUploadDataStream upload_data_stream( ReadErrorUploadDataStream::FailureMode::SYNC); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -962,7 +977,8 @@ TEST_F(SpdyHttpStreamTest, DataReadErrorAsynchronous) { ReadErrorUploadDataStream upload_data_stream( ReadErrorUploadDataStream::FailureMode::ASYNC); - ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), + ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), + BoundNetLog()), IsOk()); HttpRequestInfo request; @@ -1006,7 +1022,8 @@ TEST_F(SpdyHttpStreamTest, RequestCallbackCancelsStream) { request.upload_data_stream = &upload_stream; TestCompletionCallback upload_callback; - ASSERT_THAT(upload_stream.Init(upload_callback.callback()), IsOk()); + ASSERT_THAT(upload_stream.Init(upload_callback.callback(), BoundNetLog()), + IsOk()); upload_stream.AppendData("", 0, true); BoundNetLog net_log;