summaryrefslogtreecommitdiff
path: root/chromium/net/http/bidirectional_stream_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-07-14 17:41:05 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-08-04 12:37:36 +0000
commit399c965b6064c440ddcf4015f5f8e9d131c7a0a6 (patch)
tree6b06b60ff365abef0e13b3503d593a0df48d20e8 /chromium/net/http/bidirectional_stream_unittest.cc
parent7366110654eec46f21b6824f302356426f48cd74 (diff)
downloadqtwebengine-chromium-399c965b6064c440ddcf4015f5f8e9d131c7a0a6.tar.gz
BASELINE: Update Chromium to 52.0.2743.76 and Ninja to 1.7.1
Change-Id: I382f51b959689505a60f8b707255ecb344f7d8b4 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/net/http/bidirectional_stream_unittest.cc')
-rw-r--r--chromium/net/http/bidirectional_stream_unittest.cc505
1 files changed, 384 insertions, 121 deletions
diff --git a/chromium/net/http/bidirectional_stream_unittest.cc b/chromium/net/http/bidirectional_stream_unittest.cc
index 4d6445f4631..8d7a9ed2063 100644
--- a/chromium/net/http/bidirectional_stream_unittest.cc
+++ b/chromium/net/http/bidirectional_stream_unittest.cc
@@ -4,8 +4,10 @@
#include "net/http/bidirectional_stream.h"
+#include <memory>
+
#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_piece.h"
@@ -18,6 +20,8 @@
#include "net/http/http_response_headers.h"
#include "net/http/http_server_properties.h"
#include "net/log/net_log.h"
+#include "net/log/test_net_log.h"
+#include "net/log/test_net_log_util.h"
#include "net/socket/socket_test_util.h"
#include "net/spdy/spdy_session.h"
#include "net/spdy/spdy_test_util_common.h"
@@ -40,11 +44,11 @@ class TestDelegateBase : public BidirectionalStream::Delegate {
TestDelegateBase(IOBuffer* read_buf, int read_buf_len)
: TestDelegateBase(read_buf,
read_buf_len,
- make_scoped_ptr(new base::Timer(false, false))) {}
+ base::WrapUnique(new base::Timer(false, false))) {}
TestDelegateBase(IOBuffer* read_buf,
int read_buf_len,
- scoped_ptr<base::Timer> timer)
+ std::unique_ptr<base::Timer> timer)
: read_buf_(read_buf),
read_buf_len_(read_buf_len),
timer_(std::move(timer)),
@@ -58,7 +62,15 @@ class TestDelegateBase : public BidirectionalStream::Delegate {
~TestDelegateBase() override {}
- void OnHeadersSent() override { CHECK(!not_expect_callback_); }
+ void OnStreamReady(bool request_headers_sent) override {
+ // Request headers should always be sent in H2's case, because the
+ // functionality to combine header frame with data frames is not
+ // implemented.
+ EXPECT_TRUE(request_headers_sent);
+ if (callback_.is_null())
+ return;
+ callback_.Run(OK);
+ }
void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override {
CHECK(!not_expect_callback_);
@@ -102,20 +114,40 @@ class TestDelegateBase : public BidirectionalStream::Delegate {
loop_->Quit();
}
- void Start(scoped_ptr<BidirectionalStreamRequestInfo> request_info,
+ void Start(std::unique_ptr<BidirectionalStreamRequestInfo> request_info,
HttpNetworkSession* session) {
stream_.reset(new BidirectionalStream(std::move(request_info), session,
- this, std::move(timer_)));
+ true, this, std::move(timer_)));
if (run_until_completion_)
loop_->Run();
}
- void SendData(IOBuffer* data, int length, bool end_of_stream) {
+ void Start(std::unique_ptr<BidirectionalStreamRequestInfo> request_info,
+ HttpNetworkSession* session,
+ const CompletionCallback& cb) {
+ callback_ = cb;
+ stream_.reset(new BidirectionalStream(std::move(request_info), session,
+ true, this, std::move(timer_)));
+ if (run_until_completion_)
+ loop_->Run();
+ }
+
+ void SendData(const scoped_refptr<IOBuffer>& data,
+ int length,
+ bool end_of_stream) {
not_expect_callback_ = true;
stream_->SendData(data, length, end_of_stream);
not_expect_callback_ = false;
}
+ void SendvData(const std::vector<scoped_refptr<IOBuffer>>& data,
+ const std::vector<int>& length,
+ bool end_of_stream) {
+ not_expect_callback_ = true;
+ stream_->SendvData(data, length, end_of_stream);
+ not_expect_callback_ = false;
+ }
+
// Starts or continues reading data from |stream_| until no more bytes
// can be read synchronously.
void StartOrContinueReading() {
@@ -174,12 +206,12 @@ class TestDelegateBase : public BidirectionalStream::Delegate {
void QuitLoop() { loop_->Quit(); }
private:
- scoped_ptr<BidirectionalStream> stream_;
+ std::unique_ptr<BidirectionalStream> stream_;
scoped_refptr<IOBuffer> read_buf_;
int read_buf_len_;
- scoped_ptr<base::Timer> timer_;
+ std::unique_ptr<base::Timer> timer_;
std::string data_received_;
- scoped_ptr<base::RunLoop> loop_;
+ std::unique_ptr<base::RunLoop> loop_;
SpdyHeaderBlock response_headers_;
SpdyHeaderBlock trailers_;
int error_;
@@ -191,6 +223,7 @@ class TestDelegateBase : public BidirectionalStream::Delegate {
// calling into |stream_|.
bool not_expect_callback_;
+ CompletionCallback callback_;
DISALLOW_COPY_AND_ASSIGN(TestDelegateBase);
};
@@ -302,6 +335,7 @@ class BidirectionalStreamTest : public testing::TestWithParam<bool> {
ssl_data_(SSLSocketDataProvider(ASYNC, OK)) {
ssl_data_.SetNextProto(kProtoHTTP2);
ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
+ net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes());
}
protected:
@@ -323,14 +357,17 @@ class BidirectionalStreamTest : public testing::TestWithParam<bool> {
sequenced_data_.reset(
new SequencedSocketData(reads, reads_count, writes, writes_count));
session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get());
+ session_deps_.net_log = net_log_.bound().net_log();
http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
- session_ = CreateSecureSpdySession(http_session_.get(), key, BoundNetLog());
+ session_ =
+ CreateSecureSpdySession(http_session_.get(), key, net_log_.bound());
}
+ BoundTestNetLog net_log_;
SpdyTestUtil spdy_util_;
SpdySessionDependencies session_deps_;
- scoped_ptr<SequencedSocketData> sequenced_data_;
- scoped_ptr<HttpNetworkSession> http_session_;
+ std::unique_ptr<SequencedSocketData> sequenced_data_;
+ std::unique_ptr<HttpNetworkSession> http_session_;
private:
SSLSocketDataProvider ssl_data_;
@@ -338,7 +375,7 @@ class BidirectionalStreamTest : public testing::TestWithParam<bool> {
};
TEST_F(BidirectionalStreamTest, CreateInsecureStream) {
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("http://www.example.org/");
@@ -346,20 +383,40 @@ TEST_F(BidirectionalStreamTest, CreateInsecureStream) {
TestDelegateBase delegate(nullptr, 0);
HttpNetworkSession::Params params =
SpdySessionDependencies::CreateSessionParams(&session_deps_);
- scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
+ std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
delegate.SetRunUntilCompletion(true);
delegate.Start(std::move(request_info), session.get());
EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, delegate.error());
}
+// Creates a BidirectionalStream with an insecure scheme. Destroy the stream
+// without waiting for the OnFailed task to be executed.
+TEST_F(BidirectionalStreamTest,
+ CreateInsecureStreamAndDestroyStreamRightAfter) {
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
+ new BidirectionalStreamRequestInfo);
+ request_info->method = "GET";
+ request_info->url = GURL("http://www.example.org/");
+
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(nullptr, 0));
+ HttpNetworkSession::Params params =
+ SpdySessionDependencies::CreateSessionParams(&session_deps_);
+ std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
+ delegate->Start(std::move(request_info), session.get());
+ // Reset stream right before the OnFailed task is executed.
+ delegate.reset();
+
+ base::RunLoop().RunUntilIdle();
+}
+
// Simulates user calling ReadData after END_STREAM has been received in
// BidirectionalStreamSpdyImpl.
TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
// Empty DATA frame with an END_STREAM flag.
- scoped_ptr<SpdySerializedFrame> end_stream(
+ std::unique_ptr<SpdySerializedFrame> end_stream(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockWrite writes[] = {
CreateMockWrite(*req.get(), 0),
@@ -367,13 +424,13 @@ TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> body_frame(
+ std::unique_ptr<SpdySerializedFrame> body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
// Last body frame has END_STREAM flag set.
- scoped_ptr<SpdySerializedFrame> last_body_frame(
+ std::unique_ptr<SpdySerializedFrame> last_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
@@ -391,7 +448,7 @@ TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -402,8 +459,8 @@ TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
// Create a MockTimer. Retain a raw pointer since the underlying
// BidirectionalStreamImpl owns it.
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
delegate->set_do_not_start_read(true);
delegate->Start(std::move(request_info), http_session_.get());
@@ -444,27 +501,162 @@ TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
delegate->GetTotalReceivedBytes());
}
+// Tests that the NetLog contains correct entries.
+TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) {
+ BufferedSpdyFramer framer(spdy_util_.spdy_version());
+
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
+ std::unique_ptr<SpdySerializedFrame> data_frame(
+ framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN));
+ MockWrite writes[] = {
+ CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3),
+ };
+
+ std::unique_ptr<SpdySerializedFrame> resp(
+ spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
+ std::unique_ptr<SpdySerializedFrame> response_body_frame1(
+ spdy_util_.ConstructSpdyBodyFrame(1, false));
+ std::unique_ptr<SpdySerializedFrame> response_body_frame2(
+ spdy_util_.ConstructSpdyBodyFrame(1, false));
+
+ SpdyHeaderBlock trailers;
+ trailers["foo"] = "bar";
+ std::unique_ptr<SpdySerializedFrame> response_trailers(
+ spdy_util_.ConstructSpdyResponseHeaders(1, trailers, true));
+
+ MockRead reads[] = {
+ CreateMockRead(*resp, 1),
+ MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
+ CreateMockRead(*response_body_frame1, 4),
+ MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
+ CreateMockRead(*response_body_frame2, 6),
+ CreateMockRead(*response_trailers, 7),
+ MockRead(ASYNC, 0, 8),
+ };
+
+ HostPortPair host_port_pair("www.example.org", 443);
+ SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
+ PRIVACY_MODE_DISABLED);
+ InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
+
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
+ new BidirectionalStreamRequestInfo);
+ request_info->method = "POST";
+ request_info->url = GURL("https://www.example.org/");
+ request_info->priority = LOWEST;
+ request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
+ base::SizeTToString(kBodyDataSize * 3));
+
+ scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
+ MockTimer* timer = new MockTimer();
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+ delegate->set_do_not_start_read(true);
+ delegate->Start(std::move(request_info), http_session_.get());
+ // Send the request and receive response headers.
+ sequenced_data_->RunUntilPaused();
+ EXPECT_FALSE(timer->IsRunning());
+
+ scoped_refptr<StringIOBuffer> buf(
+ new StringIOBuffer(std::string(kBodyData, kBodyDataSize)));
+ // Send a DATA frame.
+ delegate->SendData(buf, buf->size(), true);
+ // ReadData returns asynchronously because no data is buffered.
+ int rv = delegate->ReadData();
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ // Deliver the first DATA frame.
+ sequenced_data_->Resume();
+ sequenced_data_->RunUntilPaused();
+ // |sequenced_data_| is now stopped after delivering first DATA frame but
+ // before the second DATA frame.
+ // Fire the timer to allow the first ReadData to complete asynchronously.
+ timer->Fire();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, delegate->on_data_read_count());
+
+ // Now let |sequenced_data_| run until completion.
+ sequenced_data_->Resume();
+ base::RunLoop().RunUntilIdle();
+ // All data has been delivered, and OnClosed() has been invoked.
+ // Read now, and it should complete synchronously.
+ rv = delegate->ReadData();
+ EXPECT_EQ(kUploadDataSize, rv);
+ EXPECT_EQ("200", delegate->response_headers().find(":status")->second);
+ EXPECT_EQ(1, delegate->on_data_read_count());
+ EXPECT_EQ(1, delegate->on_data_sent_count());
+ EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
+ EXPECT_EQ("bar", delegate->trailers().find("foo")->second);
+ EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
+ delegate->GetTotalSentBytes());
+ EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
+ delegate->GetTotalReceivedBytes());
+
+ // Destroy the delegate will destroy the stream, so we can get an end event
+ // for BIDIRECTIONAL_STREAM_ALIVE.
+ delegate.reset();
+ TestNetLogEntry::List entries;
+ net_log_.GetEntries(&entries);
+ size_t index = ExpectLogContainsSomewhere(
+ entries, 0, NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE, NetLog::PHASE_BEGIN);
+ // HTTP_STREAM_REQUEST is nested inside in BIDIRECTIONAL_STREAM_ALIVE.
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_HTTP_STREAM_REQUEST, NetLog::PHASE_BEGIN);
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_HTTP_STREAM_REQUEST, NetLog::PHASE_END);
+ // Headers received should happen after HTTP_STREAM_REQUEST.
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_RECV_HEADERS,
+ NetLog::PHASE_NONE);
+ // Trailers received should happen after headers received. It might happen
+ // before the reads complete.
+ ExpectLogContainsSomewhere(entries, index,
+ NetLog::TYPE_BIDIRECTIONAL_STREAM_RECV_TRAILERS,
+ NetLog::PHASE_NONE);
+ // Sent bytes. Sending data is always asynchronous.
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT,
+ NetLog::PHASE_NONE);
+ TestNetLogEntry entry = entries[index];
+ EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type);
+ // Received bytes for asynchronous read.
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED,
+ NetLog::PHASE_NONE);
+ entry = entries[index];
+ EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type);
+ // Received bytes for synchronous read.
+ index = ExpectLogContainsSomewhere(
+ entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED,
+ NetLog::PHASE_NONE);
+ entry = entries[index];
+ EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type);
+ ExpectLogContainsSomewhere(entries, index,
+ NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE,
+ NetLog::PHASE_END);
+}
+
TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
BufferedSpdyFramer framer(spdy_util_.spdy_version());
- scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
"https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
- scoped_ptr<SpdySerializedFrame> data_frame1(
+ std::unique_ptr<SpdySerializedFrame> data_frame1(
framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
- scoped_ptr<SpdySerializedFrame> data_frame2(
+ std::unique_ptr<SpdySerializedFrame> data_frame2(
framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
- scoped_ptr<SpdySerializedFrame> data_frame3(
+ std::unique_ptr<SpdySerializedFrame> data_frame3(
framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN));
MockWrite writes[] = {
CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3),
CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9),
};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame1(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame1(
spdy_util_.ConstructSpdyBodyFrame(1, false));
- scoped_ptr<SpdySerializedFrame> response_body_frame2(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame2(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
@@ -482,7 +674,7 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "POST";
request_info->url = GURL("https://www.example.org/");
@@ -492,8 +684,8 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
delegate->set_do_not_start_read(true);
delegate->Start(std::move(request_info), http_session_.get());
// Send the request and receive response headers.
@@ -505,7 +697,7 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
new StringIOBuffer(std::string(kBodyData, kBodyDataSize)));
// Send a DATA frame.
- delegate->SendData(buf.get(), buf->size(), false);
+ delegate->SendData(buf, buf->size(), false);
// ReadData and it should return asynchronously because no data is buffered.
int rv = delegate->ReadData();
EXPECT_EQ(ERR_IO_PENDING, rv);
@@ -518,7 +710,7 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
EXPECT_EQ(1, delegate->on_data_read_count());
// Send a DATA frame.
- delegate->SendData(buf.get(), buf->size(), false);
+ delegate->SendData(buf, buf->size(), false);
// ReadData and it should return asynchronously because no data is buffered.
rv = delegate->ReadData();
EXPECT_EQ(ERR_IO_PENDING, rv);
@@ -532,7 +724,7 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
EXPECT_EQ(2, delegate->on_data_sent_count());
// Send the last body frame. Client half closes.
- delegate->SendData(buf.get(), buf->size(), true);
+ delegate->SendData(buf, buf->size(), true);
sequenced_data_->Resume();
base::RunLoop().RunUntilIdle();
EXPECT_EQ(3, delegate->on_data_sent_count());
@@ -551,21 +743,89 @@ TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
delegate->GetTotalReceivedBytes());
}
+TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) {
+ BufferedSpdyFramer framer(spdy_util_.spdy_version());
+
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ "https://www.example.org", 1, kBodyDataSize * 1, LOWEST, nullptr, 0));
+ std::string body_data = "some really long piece of data";
+ std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame(
+ 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN));
+ MockWrite writes[] = {
+ CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1),
+ };
+
+ std::unique_ptr<SpdySerializedFrame> resp(
+ spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
+ std::unique_ptr<SpdySerializedFrame> response_body_frame1(
+ spdy_util_.ConstructSpdyBodyFrame(1, true));
+ MockRead reads[] = {
+ CreateMockRead(*resp, 2),
+ MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause.
+ CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5),
+ };
+
+ HostPortPair host_port_pair("www.example.org", 443);
+ SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
+ PRIVACY_MODE_DISABLED);
+ InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
+
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
+ new BidirectionalStreamRequestInfo);
+ request_info->method = "POST";
+ request_info->url = GURL("https://www.example.org/");
+ request_info->priority = LOWEST;
+ request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
+ base::SizeTToString(kBodyDataSize * 1));
+
+ scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
+ MockTimer* timer = new MockTimer();
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+ delegate->set_do_not_start_read(true);
+ TestCompletionCallback callback;
+ delegate->Start(std::move(request_info), http_session_.get(),
+ callback.callback());
+ // Wait until the stream is ready.
+ callback.WaitForResult();
+ // Send a DATA frame.
+ scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(body_data.substr(0, 5)));
+ scoped_refptr<StringIOBuffer> buf2(
+ new StringIOBuffer(body_data.substr(5, body_data.size() - 5)));
+ delegate->SendvData({buf, buf2.get()}, {buf->size(), buf2->size()}, true);
+ sequenced_data_->RunUntilPaused(); // OnHeadersReceived.
+ // ReadData and it should return asynchronously because no data is buffered.
+ EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData());
+ sequenced_data_->Resume();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, delegate->on_data_sent_count());
+ EXPECT_EQ(1, delegate->on_data_read_count());
+
+ EXPECT_EQ("200", delegate->response_headers().find(":status")->second);
+ EXPECT_EQ(1, delegate->on_data_read_count());
+ EXPECT_EQ(1, delegate->on_data_sent_count());
+ EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
+ EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
+ delegate->GetTotalSentBytes());
+ EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
+ delegate->GetTotalReceivedBytes());
+}
+
// Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining
// read even if the read queue is empty.
TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
// Empty DATA frame with an END_STREAM flag.
- scoped_ptr<SpdySerializedFrame> end_stream(
+ std::unique_ptr<SpdySerializedFrame> end_stream(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockRead reads[] = {
@@ -579,7 +839,7 @@ TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -588,8 +848,8 @@ TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
delegate->set_do_not_start_read(true);
delegate->Start(std::move(request_info), http_session_.get());
// Write request, and deliver response headers.
@@ -616,23 +876,23 @@ TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
}
TEST_F(BidirectionalStreamTest, TestBuffering) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
// Empty DATA frame with an END_STREAM flag.
- scoped_ptr<SpdySerializedFrame> end_stream(
+ std::unique_ptr<SpdySerializedFrame> end_stream(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> body_frame(
+ std::unique_ptr<SpdySerializedFrame> body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
// Last body frame has END_STREAM flag set.
- scoped_ptr<SpdySerializedFrame> last_body_frame(
+ std::unique_ptr<SpdySerializedFrame> last_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
@@ -649,7 +909,7 @@ TEST_F(BidirectionalStreamTest, TestBuffering) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -658,8 +918,8 @@ TEST_F(BidirectionalStreamTest, TestBuffering) {
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
delegate->Start(std::move(request_info), http_session_.get());
// Deliver two DATA frames together.
sequenced_data_->RunUntilPaused();
@@ -698,10 +958,10 @@ TEST_F(BidirectionalStreamTest, TestBuffering) {
}
TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
// Empty DATA frame with an END_STREAM flag.
- scoped_ptr<SpdySerializedFrame> end_stream(
+ std::unique_ptr<SpdySerializedFrame> end_stream(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockWrite writes[] = {
@@ -710,22 +970,25 @@ TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> body_frame(
+ std::unique_ptr<SpdySerializedFrame> body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
- SpdyHeaderBlock late_headers;
- late_headers["foo"] = "bar";
- scoped_ptr<SpdySerializedFrame> trailers(
- spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true));
+ SpdyHeaderBlock trailers;
+ trailers["foo"] = "bar";
+ std::unique_ptr<SpdySerializedFrame> response_trailers(
+ spdy_util_.ConstructSpdyResponseHeaders(1, trailers, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2),
- CreateMockRead(*body_frame, 3), CreateMockRead(*body_frame, 4),
+ CreateMockRead(*resp, 1),
+ CreateMockRead(*body_frame, 2),
+ CreateMockRead(*body_frame, 3),
+ CreateMockRead(*body_frame, 4),
MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
- CreateMockRead(*trailers, 6), MockRead(SYNCHRONOUS, 0, 7),
+ CreateMockRead(*response_trailers, 6),
+ MockRead(SYNCHRONOUS, 0, 7),
};
HostPortPair host_port_pair("www.example.org", 443);
@@ -735,10 +998,10 @@ TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -778,11 +1041,11 @@ TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
BufferedSpdyFramer framer(spdy_util_.spdy_version());
- scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
"https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
- scoped_ptr<SpdySerializedFrame> data_frame(
+ std::unique_ptr<SpdySerializedFrame> data_frame(
framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
MockWrite writes[] = {
@@ -790,9 +1053,9 @@ TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
CreateMockWrite(*rst, 5),
};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
MockRead reads[] = {
@@ -807,7 +1070,7 @@ TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "POST";
request_info->url = GURL("https://www.example.org/");
@@ -816,7 +1079,7 @@ TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
base::SizeTToString(kBodyDataSize * 3));
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<TestDelegateBase> delegate(
+ std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->set_do_not_start_read(true);
delegate->Start(std::move(request_info), http_session_.get());
@@ -827,7 +1090,7 @@ TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
// Send a DATA frame.
scoped_refptr<StringIOBuffer> buf(
new StringIOBuffer(std::string(kBodyData, kBodyDataSize)));
- delegate->SendData(buf.get(), buf->size(), false);
+ delegate->SendData(buf, buf->size(), false);
sequenced_data_->Resume();
base::RunLoop().RunUntilIdle();
// Cancel the stream.
@@ -848,20 +1111,20 @@ TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
BufferedSpdyFramer framer(spdy_util_.spdy_version());
- scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
"https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
- scoped_ptr<SpdySerializedFrame> data_frame(
+ std::unique_ptr<SpdySerializedFrame> data_frame(
framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
MockWrite writes[] = {
CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
MockRead reads[] = {
@@ -875,7 +1138,7 @@ TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "POST";
request_info->url = GURL("https://www.example.org/");
@@ -884,7 +1147,7 @@ TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
base::SizeTToString(kBodyDataSize * 3));
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<TestDelegateBase> delegate(
+ std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->set_do_not_start_read(true);
delegate->Start(std::move(request_info), http_session_.get());
@@ -911,9 +1174,9 @@ TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
// Receiving a header with uppercase ASCII will result in a protocol error,
// which should be propagated via Delegate::OnFailed.
TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
- scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
+ std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
"https://www.example.org", 1, kBodyDataSize * 3, LOW, nullptr, 0));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
@@ -921,7 +1184,7 @@ TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
};
const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
MockRead reads[] = {
@@ -933,7 +1196,7 @@ TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "POST";
request_info->url = GURL("https://www.example.org/");
@@ -941,7 +1204,7 @@ TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
base::SizeTToString(kBodyDataSize * 3));
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<TestDelegateBase> delegate(
+ std::unique_ptr<TestDelegateBase> delegate(
new TestDelegateBase(read_buffer.get(), kReadBufferSize));
delegate->SetRunUntilCompletion(true);
delegate->Start(std::move(request_info), http_session_.get());
@@ -965,10 +1228,10 @@ INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests,
::testing::Values(true, false));
TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
MockWrite writes[] = {
CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
@@ -976,7 +1239,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
MockRead reads[] = {
@@ -988,7 +1251,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -996,7 +1259,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
request_info->end_stream_on_headers = true;
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<CancelOrDeleteStreamDelegate> delegate(
+ std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
new CancelOrDeleteStreamDelegate(
read_buffer.get(), kReadBufferSize,
CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED,
@@ -1021,10 +1284,10 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
}
TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
MockWrite writes[] = {
CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
@@ -1032,10 +1295,10 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
MockRead reads[] = {
@@ -1048,7 +1311,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -1056,7 +1319,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
request_info->end_stream_on_headers = true;
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<CancelOrDeleteStreamDelegate> delegate(
+ std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
new CancelOrDeleteStreamDelegate(
read_buffer.get(), kReadBufferSize,
CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam()));
@@ -1080,10 +1343,10 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
}
TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
MockWrite writes[] = {
CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
@@ -1091,20 +1354,20 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> response_body_frame(
+ std::unique_ptr<SpdySerializedFrame> response_body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, false));
- SpdyHeaderBlock late_headers;
- late_headers["foo"] = "bar";
- scoped_ptr<SpdySerializedFrame> trailers(
- spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true));
+ SpdyHeaderBlock trailers;
+ trailers["foo"] = "bar";
+ std::unique_ptr<SpdySerializedFrame> response_trailers(
+ spdy_util_.ConstructSpdyResponseHeaders(1, trailers, true));
MockRead reads[] = {
CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2),
- CreateMockRead(*trailers, 3), MockRead(ASYNC, 0, 5),
+ CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5),
};
HostPortPair host_port_pair("www.example.org", 443);
@@ -1112,7 +1375,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -1120,7 +1383,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
request_info->end_stream_on_headers = true;
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<CancelOrDeleteStreamDelegate> delegate(
+ std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
new CancelOrDeleteStreamDelegate(
read_buffer.get(), kReadBufferSize,
CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED,
@@ -1146,10 +1409,10 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
}
TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
- scoped_ptr<SpdySerializedFrame> rst(
+ std::unique_ptr<SpdySerializedFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
@@ -1157,7 +1420,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
};
const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
MockRead reads[] = {
@@ -1169,7 +1432,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
PRIVACY_MODE_DISABLED);
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -1177,7 +1440,7 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
request_info->end_stream_on_headers = true;
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
- scoped_ptr<CancelOrDeleteStreamDelegate> delegate(
+ std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
new CancelOrDeleteStreamDelegate(
read_buffer.get(), kReadBufferSize,
CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam()));
@@ -1200,10 +1463,10 @@ TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
}
TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
- scoped_ptr<SpdySerializedFrame> req(
+ std::unique_ptr<SpdySerializedFrame> req(
spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
// Empty DATA frame with an END_STREAM flag.
- scoped_ptr<SpdySerializedFrame> end_stream(
+ std::unique_ptr<SpdySerializedFrame> end_stream(
spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
@@ -1213,9 +1476,9 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
const char* const kExtraResponseHeaders[] = {"alt-svc",
alt_svc_header_value.c_str()};
- scoped_ptr<SpdySerializedFrame> resp(
+ std::unique_ptr<SpdySerializedFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
- scoped_ptr<SpdySerializedFrame> body_frame(
+ std::unique_ptr<SpdySerializedFrame> body_frame(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
@@ -1224,6 +1487,7 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
};
HostPortPair host_port_pair("www.example.org", 443);
+ url::SchemeHostPort server("https", "www.example.org", 443);
SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
PRIVACY_MODE_DISABLED);
session_deps_.parse_alternative_services = true;
@@ -1232,7 +1496,7 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
session_deps_.enable_quic = true;
InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
- scoped_ptr<BidirectionalStreamRequestInfo> request_info(
+ std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
request_info->url = GURL("https://www.example.org/");
@@ -1241,8 +1505,8 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
MockTimer* timer = new MockTimer();
- scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase(
- read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer)));
+ std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
+ read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
delegate->SetRunUntilCompletion(true);
delegate->Start(std::move(request_info), http_session_.get());
@@ -1258,8 +1522,7 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
delegate->GetTotalReceivedBytes());
AlternativeServiceVector alternative_service_vector =
- http_session_->http_server_properties()->GetAlternativeServices(
- host_port_pair);
+ http_session_->http_server_properties()->GetAlternativeServices(server);
ASSERT_EQ(1u, alternative_service_vector.size());
EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3),
alternative_service_vector[0].protocol);