| 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 |