| 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/quic/core/quic_headers_stream.h" | 5 #include "net/quic/core/quic_headers_stream.h" |
| 6 | 6 |
| 7 #include <ostream> | 7 #include <ostream> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <tuple> | 9 #include <tuple> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 257 |
| 258 QuicConsumedData SaveIovShort(const QuicIOVector& data) { | 258 QuicConsumedData SaveIovShort(const QuicIOVector& data) { |
| 259 const iovec* iov = data.iov; | 259 const iovec* iov = data.iov; |
| 260 int consumed = 1; | 260 int consumed = 1; |
| 261 saved_data_.append(static_cast<char*>(iov[0].iov_base), consumed); | 261 saved_data_.append(static_cast<char*>(iov[0].iov_base), consumed); |
| 262 return QuicConsumedData(consumed, false); | 262 return QuicConsumedData(consumed, false); |
| 263 } | 263 } |
| 264 | 264 |
| 265 QuicConsumedData SaveIovAndNotifyAckListener( | 265 QuicConsumedData SaveIovAndNotifyAckListener( |
| 266 const QuicIOVector& data, | 266 const QuicIOVector& data, |
| 267 QuicAckListenerInterface* ack_listener) { | 267 const scoped_refptr<QuicAckListenerInterface>& ack_listener) { |
| 268 QuicConsumedData result = SaveIov(data); | 268 QuicConsumedData result = SaveIov(data); |
| 269 if (ack_listener) { | 269 if (ack_listener) { |
| 270 ack_listener->OnPacketAcked(result.bytes_consumed, | 270 ack_listener->OnPacketAcked(result.bytes_consumed, |
| 271 QuicTime::Delta::Zero()); | 271 QuicTime::Delta::Zero()); |
| 272 } | 272 } |
| 273 return result; | 273 return result; |
| 274 } | 274 } |
| 275 | 275 |
| 276 void SavePayload(const char* data, size_t len) { | 276 void SavePayload(const char* data, size_t len) { |
| 277 saved_payloads_.append(data, len); | 277 saved_payloads_.append(data, len); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 | 317 |
| 318 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { | 318 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { |
| 319 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); | 319 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); |
| 320 } | 320 } |
| 321 | 321 |
| 322 void WriteHeadersAndCheckData(QuicStreamId stream_id, | 322 void WriteHeadersAndCheckData(QuicStreamId stream_id, |
| 323 bool fin, | 323 bool fin, |
| 324 SpdyPriority priority, | 324 SpdyPriority priority, |
| 325 bool is_request) { | 325 bool is_request) { |
| 326 // Write the headers and capture the outgoing data | 326 // Write the headers and capture the outgoing data |
| 327 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 327 EXPECT_CALL(session_, |
| 328 false, nullptr)) | 328 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
| 329 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 329 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
| 330 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, | 330 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, |
| 331 nullptr); | 331 nullptr); |
| 332 | 332 |
| 333 // Parse the outgoing data and check that it matches was was written. | 333 // Parse the outgoing data and check that it matches was was written. |
| 334 if (is_request) { | 334 if (is_request) { |
| 335 EXPECT_CALL(visitor_, | 335 EXPECT_CALL(visitor_, |
| 336 OnHeaders(stream_id, kHasPriority, | 336 OnHeaders(stream_id, kHasPriority, |
| 337 Spdy3PriorityToHttp2Weight(priority), | 337 Spdy3PriorityToHttp2Weight(priority), |
| 338 /*parent_stream_id=*/0, | 338 /*parent_stream_id=*/0, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 | 439 |
| 440 TEST_P(QuicHeadersStreamTest, WritePushPromises) { | 440 TEST_P(QuicHeadersStreamTest, WritePushPromises) { |
| 441 for (QuicStreamId stream_id = kClientDataStreamId1; | 441 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 442 stream_id < kClientDataStreamId3; stream_id += 2) { | 442 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 443 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 443 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
| 444 if (perspective() == Perspective::IS_SERVER) { | 444 if (perspective() == Perspective::IS_SERVER) { |
| 445 // Write the headers and capture the outgoing data | 445 // Write the headers and capture the outgoing data |
| 446 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 446 EXPECT_CALL(session_, |
| 447 false, nullptr)) | 447 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
| 448 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 448 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
| 449 headers_stream_->WritePushPromise(stream_id, promised_stream_id, | 449 headers_stream_->WritePushPromise(stream_id, promised_stream_id, |
| 450 headers_.Clone()); | 450 headers_.Clone()); |
| 451 | 451 |
| 452 // Parse the outgoing data and check that it matches was was written. | 452 // Parse the outgoing data and check that it matches was was written. |
| 453 EXPECT_CALL(visitor_, | 453 EXPECT_CALL(visitor_, |
| 454 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); | 454 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); |
| 455 headers_handler_.reset(new TestHeadersHandler); | 455 headers_handler_.reset(new TestHeadersHandler); |
| 456 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) | 456 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) |
| 457 .WillOnce(Return(headers_handler_.get())); | 457 .WillOnce(Return(headers_handler_.get())); |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 scoped_refptr<ForceHolAckListener> ack_listener; | 956 scoped_refptr<ForceHolAckListener> ack_listener; |
| 957 if (use_ack_listener) { | 957 if (use_ack_listener) { |
| 958 ack_listener = new ForceHolAckListener(); | 958 ack_listener = new ForceHolAckListener(); |
| 959 } | 959 } |
| 960 EXPECT_CALL(session_, | 960 EXPECT_CALL(session_, |
| 961 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) | 961 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
| 962 .WillRepeatedly(WithArgs<2, 5>(Invoke( | 962 .WillRepeatedly(WithArgs<2, 5>(Invoke( |
| 963 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); | 963 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); |
| 964 | 964 |
| 965 QuicConsumedData consumed_data = headers_stream_->WritevStreamData( | 965 QuicConsumedData consumed_data = headers_stream_->WritevStreamData( |
| 966 id, MakeIOVector(data, &iov), offset, fin, ack_listener.get()); | 966 id, MakeIOVector(data, &iov), offset, fin, ack_listener); |
| 967 | 967 |
| 968 EXPECT_EQ(consumed_data.bytes_consumed, data_len); | 968 EXPECT_EQ(consumed_data.bytes_consumed, data_len); |
| 969 EXPECT_EQ(consumed_data.fin_consumed, fin); | 969 EXPECT_EQ(consumed_data.fin_consumed, fin); |
| 970 // Now process the written data with the SPDY framer, and verify | 970 // Now process the written data with the SPDY framer, and verify |
| 971 // that the original data is unchanged. | 971 // that the original data is unchanged. |
| 972 EXPECT_CALL(visitor_, OnDataFrameHeader(id, _, _)) | 972 EXPECT_CALL(visitor_, OnDataFrameHeader(id, _, _)) |
| 973 .Times(AtLeast(kMinDataFrames)); | 973 .Times(AtLeast(kMinDataFrames)); |
| 974 EXPECT_CALL(visitor_, OnStreamFrameData(id, _, _)) | 974 EXPECT_CALL(visitor_, OnStreamFrameData(id, _, _)) |
| 975 .WillRepeatedly(WithArgs<1, 2>( | 975 .WillRepeatedly(WithArgs<1, 2>( |
| 976 Invoke(this, &QuicHeadersStreamTest::SavePayload))); | 976 Invoke(this, &QuicHeadersStreamTest::SavePayload))); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 consumed_data = headers_stream_->WritevStreamData( | 1045 consumed_data = headers_stream_->WritevStreamData( |
| 1046 id, MakeIOVector(data, &iov), offset, fin, nullptr); | 1046 id, MakeIOVector(data, &iov), offset, fin, nullptr); |
| 1047 | 1047 |
| 1048 EXPECT_EQ(consumed_data.bytes_consumed, 0u); | 1048 EXPECT_EQ(consumed_data.bytes_consumed, 0u); |
| 1049 EXPECT_EQ(consumed_data.fin_consumed, false); | 1049 EXPECT_EQ(consumed_data.fin_consumed, false); |
| 1050 } | 1050 } |
| 1051 | 1051 |
| 1052 } // namespace | 1052 } // namespace |
| 1053 } // namespace test | 1053 } // namespace test |
| 1054 } // namespace net | 1054 } // namespace net |
| OLD | NEW |