OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/spdy/spdy_stream.h" | 5 #include "net/spdy/spdy_stream.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <cstddef> | 9 #include <cstddef> |
10 #include <limits> | 10 #include <limits> |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 size_t GetNumReads() const { | 128 size_t GetNumReads() const { |
129 return reads_.size(); | 129 return reads_.size(); |
130 } | 130 } |
131 | 131 |
132 MockWrite* GetWrites() { return writes_.data(); } | 132 MockWrite* GetWrites() { return writes_.data(); } |
133 | 133 |
134 int GetNumWrites() const { | 134 int GetNumWrites() const { |
135 return writes_.size(); | 135 return writes_.size(); |
136 } | 136 } |
137 | 137 |
| 138 void ActivatePushStream(SpdySession* session, SpdyStream* stream) { |
| 139 std::unique_ptr<SpdyStream> activated = |
| 140 session->ActivateCreatedStream(stream); |
| 141 activated->set_stream_id(2); |
| 142 session->InsertActivatedStream(std::move(activated)); |
| 143 } |
| 144 |
138 SpdyTestUtil spdy_util_; | 145 SpdyTestUtil spdy_util_; |
139 SpdySessionDependencies session_deps_; | 146 SpdySessionDependencies session_deps_; |
140 std::unique_ptr<HttpNetworkSession> session_; | 147 std::unique_ptr<HttpNetworkSession> session_; |
141 | 148 |
142 private: | 149 private: |
143 // Used by Add{Read,Write}() above. | 150 // Used by Add{Read,Write}() above. |
144 std::vector<MockWrite> writes_; | 151 std::vector<MockWrite> writes_; |
145 std::vector<MockRead> reads_; | 152 std::vector<MockRead> reads_; |
146 int offset_; | 153 int offset_; |
147 }; | 154 }; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), | 305 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |
299 GetNumWrites()); | 306 GetNumWrites()); |
300 MockConnect connect_data(SYNCHRONOUS, OK); | 307 MockConnect connect_data(SYNCHRONOUS, OK); |
301 data.set_connect_data(connect_data); | 308 data.set_connect_data(connect_data); |
302 | 309 |
303 session_deps_.socket_factory->AddSocketDataProvider(&data); | 310 session_deps_.socket_factory->AddSocketDataProvider(&data); |
304 | 311 |
305 base::WeakPtr<SpdySession> spdy_session(CreateDefaultSpdySession()); | 312 base::WeakPtr<SpdySession> spdy_session(CreateDefaultSpdySession()); |
306 | 313 |
307 // Conjure up a stream. | 314 // Conjure up a stream. |
308 SpdyStream stream(SPDY_PUSH_STREAM, spdy_session, GURL(), DEFAULT_PRIORITY, | 315 SpdyStreamRequest stream_request; |
309 SpdySession::GetDefaultInitialWindowSize(kProtoSPDY31), | 316 int result = stream_request.StartRequest(SPDY_PUSH_STREAM, spdy_session, |
310 SpdySession::GetDefaultInitialWindowSize(kProtoSPDY31), | 317 GURL(), DEFAULT_PRIORITY, |
311 BoundNetLog()); | 318 BoundNetLog(), CompletionCallback()); |
312 stream.set_stream_id(2); | 319 ASSERT_EQ(OK, result); |
313 EXPECT_FALSE(stream.HasUrlFromHeaders()); | 320 base::WeakPtr<SpdyStream> stream = stream_request.ReleaseStream(); |
| 321 ActivatePushStream(spdy_session.get(), stream.get()); |
| 322 |
| 323 EXPECT_FALSE(stream->HasUrlFromHeaders()); |
314 | 324 |
315 // Set required request headers. | 325 // Set required request headers. |
316 SpdyHeaderBlock request_headers; | 326 SpdyHeaderBlock request_headers; |
317 spdy_util_.AddUrlToHeaderBlock(kStreamUrl, &request_headers); | 327 spdy_util_.AddUrlToHeaderBlock(kStreamUrl, &request_headers); |
318 stream.OnPushPromiseHeadersReceived(request_headers); | 328 stream->OnPushPromiseHeadersReceived(request_headers); |
319 | 329 |
| 330 base::Time response_time = base::Time::Now(); |
| 331 base::TimeTicks first_byte_time = base::TimeTicks::Now(); |
320 // Send some basic response headers. | 332 // Send some basic response headers. |
321 SpdyHeaderBlock response; | 333 SpdyHeaderBlock response; |
322 response[spdy_util_.GetStatusKey()] = "200"; | 334 response[spdy_util_.GetStatusKey()] = "200"; |
323 response[spdy_util_.GetVersionKey()] = "OK"; | 335 response[spdy_util_.GetVersionKey()] = "OK"; |
324 stream.OnInitialResponseHeadersReceived( | 336 stream->OnInitialResponseHeadersReceived(response, response_time, |
325 response, base::Time::Now(), base::TimeTicks::Now()); | 337 first_byte_time); |
326 | 338 |
327 // And some more headers. | 339 // And some more headers. |
328 // TODO(baranovich): not valid for HTTP 2. | 340 // TODO(baranovich): not valid for HTTP 2. |
329 SpdyHeaderBlock headers; | 341 SpdyHeaderBlock headers; |
330 headers["alpha"] = "beta"; | 342 headers["alpha"] = "beta"; |
331 stream.OnAdditionalResponseHeadersReceived(headers); | 343 stream->OnAdditionalResponseHeadersReceived(headers); |
332 | 344 |
333 EXPECT_TRUE(stream.HasUrlFromHeaders()); | 345 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
334 EXPECT_EQ(kStreamUrl, stream.GetUrlFromHeaders().spec()); | 346 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); |
335 | 347 |
336 StreamDelegateDoNothing delegate(stream.GetWeakPtr()); | 348 StreamDelegateDoNothing delegate(stream->GetWeakPtr()); |
337 stream.SetDelegate(&delegate); | 349 stream->SetDelegate(&delegate); |
| 350 |
| 351 LoadTimingInfo load_timing_info; |
| 352 EXPECT_TRUE(stream->GetLoadTimingInfo(&load_timing_info)); |
| 353 EXPECT_EQ(first_byte_time, load_timing_info.push_start); |
| 354 EXPECT_TRUE(load_timing_info.push_end.is_null()); |
| 355 |
| 356 stream->OnDataReceived(nullptr); |
| 357 LoadTimingInfo load_timing_info2; |
| 358 EXPECT_TRUE(stream->GetLoadTimingInfo(&load_timing_info2)); |
| 359 EXPECT_FALSE(load_timing_info2.push_end.is_null()); |
338 | 360 |
339 base::RunLoop().RunUntilIdle(); | 361 base::RunLoop().RunUntilIdle(); |
340 | 362 |
341 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 363 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
342 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha")); | 364 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha")); |
343 | 365 |
344 EXPECT_TRUE(spdy_session == NULL); | 366 EXPECT_TRUE(spdy_session == NULL); |
345 } | 367 } |
346 | 368 |
347 TEST_P(SpdyStreamTest, StreamError) { | 369 TEST_P(SpdyStreamTest, StreamError) { |
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 EXPECT_EQ(response_len, stream->raw_received_bytes()); | 1148 EXPECT_EQ(response_len, stream->raw_received_bytes()); |
1127 | 1149 |
1128 // FIN | 1150 // FIN |
1129 data.Resume(); | 1151 data.Resume(); |
1130 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); | 1152 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); |
1131 } | 1153 } |
1132 | 1154 |
1133 } // namespace test | 1155 } // namespace test |
1134 | 1156 |
1135 } // namespace net | 1157 } // namespace net |
OLD | NEW |