| 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/quic_headers_stream.h" | 5 #include "net/quic/quic_headers_stream.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "net/quic/quic_utils.h" | 10 #include "net/quic/quic_utils.h" |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 } | 226 } |
| 227 | 227 |
| 228 void WriteHeadersAndCheckData(QuicStreamId stream_id, | 228 void WriteHeadersAndCheckData(QuicStreamId stream_id, |
| 229 bool fin, | 229 bool fin, |
| 230 SpdyPriority priority, | 230 SpdyPriority priority, |
| 231 SpdyFrameType type) { | 231 SpdyFrameType type) { |
| 232 // Write the headers and capture the outgoing data | 232 // Write the headers and capture the outgoing data |
| 233 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 233 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, |
| 234 false, nullptr)) | 234 false, nullptr)) |
| 235 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 235 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
| 236 headers_stream_->WriteHeaders(stream_id, headers_, fin, priority, nullptr); | 236 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, |
| 237 nullptr); |
| 237 | 238 |
| 238 // Parse the outgoing data and check that it matches was was written. | 239 // Parse the outgoing data and check that it matches was was written. |
| 239 if (type == SYN_STREAM) { | 240 if (type == SYN_STREAM) { |
| 240 EXPECT_CALL(visitor_, | 241 EXPECT_CALL(visitor_, |
| 241 OnHeaders(stream_id, kHasPriority, | 242 OnHeaders(stream_id, kHasPriority, |
| 242 Spdy3PriorityToHttp2Weight(priority), | 243 Spdy3PriorityToHttp2Weight(priority), |
| 243 /*parent_stream_id=*/0, | 244 /*parent_stream_id=*/0, |
| 244 /*exclusive=*/false, fin, kFrameComplete)); | 245 /*exclusive=*/false, fin, kFrameComplete)); |
| 245 } else { | 246 } else { |
| 246 EXPECT_CALL(visitor_, | 247 EXPECT_CALL(visitor_, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 | 333 |
| 333 TEST_P(QuicHeadersStreamTest, WritePushPromises) { | 334 TEST_P(QuicHeadersStreamTest, WritePushPromises) { |
| 334 for (QuicStreamId stream_id = kClientDataStreamId1; | 335 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 335 stream_id < kClientDataStreamId3; stream_id += 2) { | 336 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 336 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 337 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
| 337 if (perspective() == Perspective::IS_SERVER) { | 338 if (perspective() == Perspective::IS_SERVER) { |
| 338 // Write the headers and capture the outgoing data | 339 // Write the headers and capture the outgoing data |
| 339 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 340 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, |
| 340 false, nullptr)) | 341 false, nullptr)) |
| 341 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 342 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
| 342 headers_stream_->WritePushPromise(stream_id, promised_stream_id, headers_, | 343 headers_stream_->WritePushPromise(stream_id, promised_stream_id, |
| 343 nullptr); | 344 headers_.Clone(), nullptr); |
| 344 | 345 |
| 345 // Parse the outgoing data and check that it matches was was written. | 346 // Parse the outgoing data and check that it matches was was written. |
| 346 EXPECT_CALL(visitor_, | 347 EXPECT_CALL(visitor_, |
| 347 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); | 348 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); |
| 348 headers_handler_.reset(new TestHeadersHandler); | 349 headers_handler_.reset(new TestHeadersHandler); |
| 349 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) | 350 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) |
| 350 .WillOnce(Return(headers_handler_.get())); | 351 .WillOnce(Return(headers_handler_.get())); |
| 351 EXPECT_CALL(visitor_, OnHeaderFrameEnd(stream_id, true)).Times(1); | 352 EXPECT_CALL(visitor_, OnHeaderFrameEnd(stream_id, true)).Times(1); |
| 352 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); | 353 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); |
| 353 EXPECT_FALSE(framer_->HasError()) | 354 EXPECT_FALSE(framer_->HasError()) |
| 354 << SpdyFramer::ErrorCodeToString(framer_->error_code()); | 355 << SpdyFramer::ErrorCodeToString(framer_->error_code()); |
| 355 CheckHeaders(); | 356 CheckHeaders(); |
| 356 saved_data_.clear(); | 357 saved_data_.clear(); |
| 357 } else { | 358 } else { |
| 358 EXPECT_DFATAL(headers_stream_->WritePushPromise( | 359 EXPECT_DFATAL( |
| 359 stream_id, promised_stream_id, headers_, nullptr), | 360 headers_stream_->WritePushPromise(stream_id, promised_stream_id, |
| 360 "Client shouldn't send PUSH_PROMISE"); | 361 headers_.Clone(), nullptr), |
| 362 "Client shouldn't send PUSH_PROMISE"); |
| 361 } | 363 } |
| 362 } | 364 } |
| 363 } | 365 } |
| 364 | 366 |
| 365 TEST_P(QuicHeadersStreamTest, ProcessRawData) { | 367 TEST_P(QuicHeadersStreamTest, ProcessRawData) { |
| 366 for (QuicStreamId stream_id = kClientDataStreamId1; | 368 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 367 stream_id < kClientDataStreamId3; stream_id += 2) { | 369 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 368 for (bool fin : {false, true}) { | 370 for (bool fin : {false, true}) { |
| 369 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 371 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
| 370 // Replace with "WriteHeadersAndSaveData" | 372 // Replace with "WriteHeadersAndSaveData" |
| 371 SpdySerializedFrame frame; | 373 SpdySerializedFrame frame; |
| 372 if (perspective() == Perspective::IS_SERVER) { | 374 if (perspective() == Perspective::IS_SERVER) { |
| 373 SpdyHeadersIR headers_frame(stream_id, headers_); | 375 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 374 headers_frame.set_fin(fin); | 376 headers_frame.set_fin(fin); |
| 375 headers_frame.set_has_priority(true); | 377 headers_frame.set_has_priority(true); |
| 376 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); | 378 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); |
| 377 frame = framer_->SerializeFrame(headers_frame); | 379 frame = framer_->SerializeFrame(headers_frame); |
| 378 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 380 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 379 } else { | 381 } else { |
| 380 SpdyHeadersIR headers_frame(stream_id, headers_); | 382 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 381 headers_frame.set_fin(fin); | 383 headers_frame.set_fin(fin); |
| 382 frame = framer_->SerializeFrame(headers_frame); | 384 frame = framer_->SerializeFrame(headers_frame); |
| 383 } | 385 } |
| 384 EXPECT_CALL(session_, | 386 EXPECT_CALL(session_, |
| 385 OnStreamHeaderList(stream_id, fin, frame.size(), _)) | 387 OnStreamHeaderList(stream_id, fin, frame.size(), _)) |
| 386 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); | 388 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); |
| 387 stream_frame_.data_buffer = frame.data(); | 389 stream_frame_.data_buffer = frame.data(); |
| 388 stream_frame_.data_length = frame.size(); | 390 stream_frame_.data_length = frame.size(); |
| 389 headers_stream_->OnStreamFrame(stream_frame_); | 391 headers_stream_->OnStreamFrame(stream_frame_); |
| 390 stream_frame_.offset += frame.size(); | 392 stream_frame_.offset += frame.size(); |
| 391 CheckHeaders(); | 393 CheckHeaders(); |
| 392 } | 394 } |
| 393 } | 395 } |
| 394 } | 396 } |
| 395 } | 397 } |
| 396 | 398 |
| 397 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { | 399 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { |
| 398 if (perspective() == Perspective::IS_SERVER) | 400 if (perspective() == Perspective::IS_SERVER) |
| 399 return; | 401 return; |
| 400 for (QuicStreamId stream_id = kClientDataStreamId1; | 402 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 401 stream_id < kClientDataStreamId3; stream_id += 2) { | 403 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 402 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 404 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
| 403 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id, headers_); | 405 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id, |
| 406 headers_.Clone()); |
| 404 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise)); | 407 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise)); |
| 405 if (perspective() == Perspective::IS_SERVER) { | 408 if (perspective() == Perspective::IS_SERVER) { |
| 406 EXPECT_CALL(*connection_, | 409 EXPECT_CALL(*connection_, |
| 407 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 410 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 408 "PUSH_PROMISE not supported.", _)) | 411 "PUSH_PROMISE not supported.", _)) |
| 409 .WillRepeatedly(InvokeWithoutArgs( | 412 .WillRepeatedly(InvokeWithoutArgs( |
| 410 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 413 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 411 } else { | 414 } else { |
| 412 EXPECT_CALL(session_, OnPromiseHeaderList(stream_id, promised_stream_id, | 415 EXPECT_CALL(session_, OnPromiseHeaderList(stream_id, promised_stream_id, |
| 413 frame.size(), _)) | 416 frame.size(), _)) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 429 return; | 432 return; |
| 430 } | 433 } |
| 431 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0); | 434 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0); |
| 432 testing::InSequence seq; | 435 testing::InSequence seq; |
| 433 bool fin = true; | 436 bool fin = true; |
| 434 for (int stream_num = 0; stream_num < 10; stream_num++) { | 437 for (int stream_num = 0; stream_num < 10; stream_num++) { |
| 435 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); | 438 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); |
| 436 // Replace with "WriteHeadersAndSaveData" | 439 // Replace with "WriteHeadersAndSaveData" |
| 437 SpdySerializedFrame frame; | 440 SpdySerializedFrame frame; |
| 438 if (perspective() == Perspective::IS_SERVER) { | 441 if (perspective() == Perspective::IS_SERVER) { |
| 439 SpdyHeadersIR headers_frame(stream_id, headers_); | 442 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 440 headers_frame.set_fin(fin); | 443 headers_frame.set_fin(fin); |
| 441 headers_frame.set_has_priority(true); | 444 headers_frame.set_has_priority(true); |
| 442 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); | 445 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); |
| 443 frame = framer_->SerializeFrame(headers_frame); | 446 frame = framer_->SerializeFrame(headers_frame); |
| 444 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 447 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 445 } else { | 448 } else { |
| 446 SpdyHeadersIR headers_frame(stream_id, headers_); | 449 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 447 headers_frame.set_fin(fin); | 450 headers_frame.set_fin(fin); |
| 448 frame = framer_->SerializeFrame(headers_frame); | 451 frame = framer_->SerializeFrame(headers_frame); |
| 449 } | 452 } |
| 450 EXPECT_CALL(session_, OnStreamHeaderList(stream_id, fin, frame.size(), _)) | 453 EXPECT_CALL(session_, OnStreamHeaderList(stream_id, fin, frame.size(), _)) |
| 451 .Times(1); | 454 .Times(1); |
| 452 stream_frame_.data_buffer = frame.data(); | 455 stream_frame_.data_buffer = frame.data(); |
| 453 stream_frame_.data_length = frame.size(); | 456 stream_frame_.data_length = frame.size(); |
| 454 headers_stream_->OnStreamFrame(stream_frame_); | 457 headers_stream_->OnStreamFrame(stream_frame_); |
| 455 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 458 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
| 456 stream_frame_.offset += frame.size(); | 459 stream_frame_.offset += frame.size(); |
| 457 } | 460 } |
| 458 } | 461 } |
| 459 | 462 |
| 460 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { | 463 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { |
| 461 if (!FLAGS_quic_measure_headers_hol_blocking_time) { | 464 if (!FLAGS_quic_measure_headers_hol_blocking_time) { |
| 462 return; | 465 return; |
| 463 } | 466 } |
| 464 QuicStreamId stream_id; | 467 QuicStreamId stream_id; |
| 465 bool fin = true; | 468 bool fin = true; |
| 466 QuicStreamFrame stream_frames[10]; | 469 QuicStreamFrame stream_frames[10]; |
| 467 SpdySerializedFrame frames[10]; | 470 SpdySerializedFrame frames[10]; |
| 468 // First create all the frames in order | 471 // First create all the frames in order |
| 469 { | 472 { |
| 470 InSequence seq; | 473 InSequence seq; |
| 471 for (int stream_num = 0; stream_num < 10; ++stream_num) { | 474 for (int stream_num = 0; stream_num < 10; ++stream_num) { |
| 472 stream_id = QuicClientDataStreamId(stream_num); | 475 stream_id = QuicClientDataStreamId(stream_num); |
| 473 if (perspective() == Perspective::IS_SERVER) { | 476 if (perspective() == Perspective::IS_SERVER) { |
| 474 SpdyHeadersIR headers_frame(stream_id, headers_); | 477 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 475 headers_frame.set_fin(fin); | 478 headers_frame.set_fin(fin); |
| 476 headers_frame.set_has_priority(true); | 479 headers_frame.set_has_priority(true); |
| 477 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); | 480 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); |
| 478 frames[stream_num] = framer_->SerializeFrame(headers_frame); | 481 frames[stream_num] = framer_->SerializeFrame(headers_frame); |
| 479 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); | 482 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); |
| 480 } else { | 483 } else { |
| 481 SpdyHeadersIR headers_frame(stream_id, headers_); | 484 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 482 headers_frame.set_fin(fin); | 485 headers_frame.set_fin(fin); |
| 483 frames[stream_num] = framer_->SerializeFrame(headers_frame); | 486 frames[stream_num] = framer_->SerializeFrame(headers_frame); |
| 484 } | 487 } |
| 485 stream_frames[stream_num].stream_id = stream_frame_.stream_id; | 488 stream_frames[stream_num].stream_id = stream_frame_.stream_id; |
| 486 stream_frames[stream_num].offset = stream_frame_.offset; | 489 stream_frames[stream_num].offset = stream_frame_.offset; |
| 487 stream_frames[stream_num].data_buffer = frames[stream_num].data(); | 490 stream_frames[stream_num].data_buffer = frames[stream_num].data(); |
| 488 stream_frames[stream_num].data_length = frames[stream_num].size(); | 491 stream_frames[stream_num].data_length = frames[stream_num].size(); |
| 489 DVLOG(1) << "make frame for stream " << stream_num << " offset " | 492 DVLOG(1) << "make frame for stream " << stream_num << " offset " |
| 490 << stream_frames[stream_num].offset; | 493 << stream_frames[stream_num].offset; |
| 491 stream_frame_.offset += frames[stream_num].size(); | 494 stream_frame_.offset += frames[stream_num].size(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 511 headers_["key0"] = string(1 << 13, '.'); | 514 headers_["key0"] = string(1 << 13, '.'); |
| 512 headers_["key1"] = string(1 << 13, '.'); | 515 headers_["key1"] = string(1 << 13, '.'); |
| 513 headers_["key2"] = string(1 << 13, '.'); | 516 headers_["key2"] = string(1 << 13, '.'); |
| 514 for (QuicStreamId stream_id = kClientDataStreamId1; | 517 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 515 stream_id < kClientDataStreamId3; stream_id += 2) { | 518 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 516 for (bool fin : {false, true}) { | 519 for (bool fin : {false, true}) { |
| 517 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 520 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
| 518 // Replace with "WriteHeadersAndSaveData" | 521 // Replace with "WriteHeadersAndSaveData" |
| 519 SpdySerializedFrame frame; | 522 SpdySerializedFrame frame; |
| 520 if (perspective() == Perspective::IS_SERVER) { | 523 if (perspective() == Perspective::IS_SERVER) { |
| 521 SpdyHeadersIR headers_frame(stream_id, headers_); | 524 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 522 headers_frame.set_fin(fin); | 525 headers_frame.set_fin(fin); |
| 523 headers_frame.set_has_priority(true); | 526 headers_frame.set_has_priority(true); |
| 524 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); | 527 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); |
| 525 frame = framer_->SerializeFrame(headers_frame); | 528 frame = framer_->SerializeFrame(headers_frame); |
| 526 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 529 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 527 } else { | 530 } else { |
| 528 SpdyHeadersIR headers_frame(stream_id, headers_); | 531 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 529 headers_frame.set_fin(fin); | 532 headers_frame.set_fin(fin); |
| 530 frame = framer_->SerializeFrame(headers_frame); | 533 frame = framer_->SerializeFrame(headers_frame); |
| 531 } | 534 } |
| 532 EXPECT_CALL(session_, | 535 EXPECT_CALL(session_, |
| 533 OnStreamHeaderList(stream_id, fin, frame.size(), _)) | 536 OnStreamHeaderList(stream_id, fin, frame.size(), _)) |
| 534 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); | 537 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); |
| 535 stream_frame_.data_buffer = frame.data(); | 538 stream_frame_.data_buffer = frame.data(); |
| 536 stream_frame_.data_length = frame.size(); | 539 stream_frame_.data_length = frame.size(); |
| 537 headers_stream_->OnStreamFrame(stream_frame_); | 540 headers_stream_->OnStreamFrame(stream_frame_); |
| 538 stream_frame_.offset += frame.size(); | 541 stream_frame_.offset += frame.size(); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 .Times(4); | 719 .Times(4); |
| 717 } | 720 } |
| 718 } | 721 } |
| 719 for (QuicStreamId stream_id = kClientDataStreamId1; | 722 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 720 stream_id < kClientDataStreamId3; stream_id += 2) { | 723 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 721 for (bool fin : {false, true}) { | 724 for (bool fin : {false, true}) { |
| 722 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 725 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
| 723 // Replace with "WriteHeadersAndSaveData" | 726 // Replace with "WriteHeadersAndSaveData" |
| 724 SpdySerializedFrame frame; | 727 SpdySerializedFrame frame; |
| 725 if (perspective() == Perspective::IS_SERVER) { | 728 if (perspective() == Perspective::IS_SERVER) { |
| 726 SpdyHeadersIR headers_frame(stream_id, headers_); | 729 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 727 headers_frame.set_fin(fin); | 730 headers_frame.set_fin(fin); |
| 728 headers_frame.set_has_priority(true); | 731 headers_frame.set_has_priority(true); |
| 729 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); | 732 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); |
| 730 frame = framer_->SerializeFrame(headers_frame); | 733 frame = framer_->SerializeFrame(headers_frame); |
| 731 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 734 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 732 } else { | 735 } else { |
| 733 SpdyHeadersIR headers_frame(stream_id, headers_); | 736 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); |
| 734 headers_frame.set_fin(fin); | 737 headers_frame.set_fin(fin); |
| 735 frame = framer_->SerializeFrame(headers_frame); | 738 frame = framer_->SerializeFrame(headers_frame); |
| 736 } | 739 } |
| 737 EXPECT_CALL(session_, | 740 EXPECT_CALL(session_, |
| 738 OnStreamHeaderList(stream_id, fin, frame.size(), _)) | 741 OnStreamHeaderList(stream_id, fin, frame.size(), _)) |
| 739 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); | 742 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList)); |
| 740 stream_frame_.data_buffer = frame.data(); | 743 stream_frame_.data_buffer = frame.data(); |
| 741 stream_frame_.data_length = frame.size(); | 744 stream_frame_.data_length = frame.size(); |
| 742 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 745 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
| 743 headers_stream_->OnStreamFrame(stream_frame_); | 746 headers_stream_->OnStreamFrame(stream_frame_); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 783 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
| 781 } | 784 } |
| 782 } | 785 } |
| 783 } | 786 } |
| 784 } | 787 } |
| 785 } | 788 } |
| 786 | 789 |
| 787 } // namespace | 790 } // namespace |
| 788 } // namespace test | 791 } // namespace test |
| 789 } // namespace net | 792 } // namespace net |
| OLD | NEW |