OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/core/spdy_deframer_visitor.h" | 5 #include "net/spdy/core/spdy_deframer_visitor.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <cstdint> | 10 #include <cstdint> |
11 #include <limits> | 11 #include <limits> |
12 | 12 |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "net/spdy/core/hpack/hpack_constants.h" | 15 #include "net/spdy/core/hpack/hpack_constants.h" |
16 #include "net/spdy/core/mock_spdy_framer_visitor.h" | 16 #include "net/spdy/core/mock_spdy_framer_visitor.h" |
17 #include "net/spdy/core/spdy_frame_builder.h" | 17 #include "net/spdy/core/spdy_frame_builder.h" |
18 #include "net/spdy/core/spdy_frame_reader.h" | 18 #include "net/spdy/core/spdy_frame_reader.h" |
19 #include "net/spdy/core/spdy_protocol.h" | 19 #include "net/spdy/core/spdy_protocol.h" |
20 #include "net/spdy/core/spdy_test_utils.h" | 20 #include "net/spdy/core/spdy_test_utils.h" |
| 21 #include "net/spdy/platform/api/spdy_ptr_util.h" |
| 22 #include "net/spdy/platform/api/spdy_string_piece.h" |
21 | 23 |
22 using ::base::MakeUnique; | |
23 using ::testing::AssertionFailure; | 24 using ::testing::AssertionFailure; |
24 using ::testing::AssertionResult; | 25 using ::testing::AssertionResult; |
25 using ::testing::AssertionSuccess; | 26 using ::testing::AssertionSuccess; |
26 | 27 |
27 namespace net { | 28 namespace net { |
28 namespace test { | 29 namespace test { |
29 | 30 |
30 // Specify whether to process headers as request or response in visitor-related | 31 // Specify whether to process headers as request or response in visitor-related |
31 // params. | 32 // params. |
32 enum class HeaderDirection { REQUEST, RESPONSE }; | 33 enum class HeaderDirection { REQUEST, RESPONSE }; |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 | 232 |
232 private: | 233 private: |
233 std::unique_ptr<SpdyDeframerVisitorInterface> listener_; | 234 std::unique_ptr<SpdyDeframerVisitorInterface> listener_; |
234 | 235 |
235 DISALLOW_COPY_AND_ASSIGN(SpdyTestDeframerImpl); | 236 DISALLOW_COPY_AND_ASSIGN(SpdyTestDeframerImpl); |
236 }; | 237 }; |
237 | 238 |
238 // static | 239 // static |
239 std::unique_ptr<SpdyTestDeframer> SpdyTestDeframer::CreateConverter( | 240 std::unique_ptr<SpdyTestDeframer> SpdyTestDeframer::CreateConverter( |
240 std::unique_ptr<SpdyDeframerVisitorInterface> listener) { | 241 std::unique_ptr<SpdyDeframerVisitorInterface> listener) { |
241 return MakeUnique<SpdyTestDeframerImpl>(std::move(listener)); | 242 return SpdyMakeUnique<SpdyTestDeframerImpl>(std::move(listener)); |
242 } | 243 } |
243 | 244 |
244 void SpdyTestDeframerImpl::AtDataEnd() { | 245 void SpdyTestDeframerImpl::AtDataEnd() { |
245 DVLOG(1) << "AtDataEnd"; | 246 DVLOG(1) << "AtDataEnd"; |
246 CHECK_EQ(data_len_, padding_len_ + data_->size()); | 247 CHECK_EQ(data_len_, padding_len_ + data_->size()); |
247 auto ptr = MakeUnique<SpdyDataIR>(stream_id_, std::move(*data_)); | 248 auto ptr = SpdyMakeUnique<SpdyDataIR>(stream_id_, std::move(*data_)); |
248 CHECK_EQ(0u, data_->size()); | 249 CHECK_EQ(0u, data_->size()); |
249 data_.reset(); | 250 data_.reset(); |
250 | 251 |
251 CHECK_LE(0u, padding_len_); | 252 CHECK_LE(0u, padding_len_); |
252 CHECK_LE(padding_len_, 256u); | 253 CHECK_LE(padding_len_, 256u); |
253 if (padding_len_ > 0) { | 254 if (padding_len_ > 0) { |
254 ptr->set_padding_len(padding_len_); | 255 ptr->set_padding_len(padding_len_); |
255 } | 256 } |
256 padding_len_ = 0; | 257 padding_len_ = 0; |
257 | 258 |
258 ptr->set_fin(fin_); | 259 ptr->set_fin(fin_); |
259 listener_->OnData(std::move(ptr)); | 260 listener_->OnData(std::move(ptr)); |
260 frame_type_ = UNSET; | 261 frame_type_ = UNSET; |
261 fin_ = false; | 262 fin_ = false; |
262 data_len_ = 0; | 263 data_len_ = 0; |
263 } | 264 } |
264 | 265 |
265 void SpdyTestDeframerImpl::AtGoAwayEnd() { | 266 void SpdyTestDeframerImpl::AtGoAwayEnd() { |
266 DVLOG(1) << "AtDataEnd"; | 267 DVLOG(1) << "AtDataEnd"; |
267 CHECK_EQ(frame_type_, GOAWAY); | 268 CHECK_EQ(frame_type_, GOAWAY); |
268 CHECK(goaway_description_); | 269 CHECK(goaway_description_); |
269 if (goaway_description_->empty()) { | 270 if (goaway_description_->empty()) { |
270 listener_->OnGoAway(std::move(goaway_ir_)); | 271 listener_->OnGoAway(std::move(goaway_ir_)); |
271 } else { | 272 } else { |
272 listener_->OnGoAway(MakeUnique<SpdyGoAwayIR>( | 273 listener_->OnGoAway(SpdyMakeUnique<SpdyGoAwayIR>( |
273 goaway_ir_->last_good_stream_id(), goaway_ir_->error_code(), | 274 goaway_ir_->last_good_stream_id(), goaway_ir_->error_code(), |
274 std::move(*goaway_description_))); | 275 std::move(*goaway_description_))); |
275 CHECK_EQ(0u, goaway_description_->size()); | 276 CHECK_EQ(0u, goaway_description_->size()); |
276 } | 277 } |
277 goaway_description_.reset(); | 278 goaway_description_.reset(); |
278 goaway_ir_.reset(); | 279 goaway_ir_.reset(); |
279 frame_type_ = UNSET; | 280 frame_type_ = UNSET; |
280 } | 281 } |
281 | 282 |
282 void SpdyTestDeframerImpl::AtHeadersEnd() { | 283 void SpdyTestDeframerImpl::AtHeadersEnd() { |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 // Overridden methods from SpdyFramerVisitorInterface in alpha order... | 409 // Overridden methods from SpdyFramerVisitorInterface in alpha order... |
409 | 410 |
410 void SpdyTestDeframerImpl::OnAltSvc( | 411 void SpdyTestDeframerImpl::OnAltSvc( |
411 SpdyStreamId stream_id, | 412 SpdyStreamId stream_id, |
412 SpdyStringPiece origin, | 413 SpdyStringPiece origin, |
413 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector) { | 414 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector) { |
414 DVLOG(1) << "OnAltSvc stream_id: " << stream_id; | 415 DVLOG(1) << "OnAltSvc stream_id: " << stream_id; |
415 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 416 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
416 << Http2FrameTypeToString(frame_type_); | 417 << Http2FrameTypeToString(frame_type_); |
417 CHECK_GT(stream_id, 0u); | 418 CHECK_GT(stream_id, 0u); |
418 auto ptr = MakeUnique<SpdyAltSvcIR>(stream_id); | 419 auto ptr = SpdyMakeUnique<SpdyAltSvcIR>(stream_id); |
419 ptr->set_origin(SpdyString(origin)); | 420 ptr->set_origin(SpdyString(origin)); |
420 for (auto& altsvc : altsvc_vector) { | 421 for (auto& altsvc : altsvc_vector) { |
421 ptr->add_altsvc(altsvc); | 422 ptr->add_altsvc(altsvc); |
422 } | 423 } |
423 listener_->OnAltSvc(std::move(ptr)); | 424 listener_->OnAltSvc(std::move(ptr)); |
424 } | 425 } |
425 | 426 |
426 // A CONTINUATION frame contains a Header Block Fragment, and immediately | 427 // A CONTINUATION frame contains a Header Block Fragment, and immediately |
427 // follows another frame that contains a Header Block Fragment (HEADERS, | 428 // follows another frame that contains a Header Block Fragment (HEADERS, |
428 // PUSH_PROMISE or CONTINUATION). The last such frame has the END flag set. | 429 // PUSH_PROMISE or CONTINUATION). The last such frame has the END flag set. |
(...skipping 19 matching lines...) Expand all Loading... |
448 DVLOG(1) << "OnDataFrameHeader stream_id: " << stream_id; | 449 DVLOG(1) << "OnDataFrameHeader stream_id: " << stream_id; |
449 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 450 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
450 << Http2FrameTypeToString(frame_type_); | 451 << Http2FrameTypeToString(frame_type_); |
451 CHECK_GT(stream_id, 0u); | 452 CHECK_GT(stream_id, 0u); |
452 CHECK_EQ(data_.get(), nullptr); | 453 CHECK_EQ(data_.get(), nullptr); |
453 frame_type_ = DATA; | 454 frame_type_ = DATA; |
454 | 455 |
455 stream_id_ = stream_id; | 456 stream_id_ = stream_id; |
456 fin_ = fin; | 457 fin_ = fin; |
457 data_len_ = length; | 458 data_len_ = length; |
458 data_.reset(new SpdyString()); | 459 data_ = SpdyMakeUnique<SpdyString>(); |
459 } | 460 } |
460 | 461 |
461 // The SpdyFramer will not process any more data at this point. | 462 // The SpdyFramer will not process any more data at this point. |
462 void SpdyTestDeframerImpl::OnError(SpdyFramer* framer) { | 463 void SpdyTestDeframerImpl::OnError(SpdyFramer* framer) { |
463 DVLOG(1) << "SpdyFramer detected an error in the stream: " | 464 DVLOG(1) << "SpdyFramer detected an error in the stream: " |
464 << SpdyFramer::SpdyFramerErrorToString(framer->spdy_framer_error()) | 465 << SpdyFramer::SpdyFramerErrorToString(framer->spdy_framer_error()) |
465 << " frame_type_: " << Http2FrameTypeToString(frame_type_); | 466 << " frame_type_: " << Http2FrameTypeToString(frame_type_); |
466 listener_->OnError(framer, this); | 467 listener_->OnError(framer, this); |
467 } | 468 } |
468 | 469 |
469 // Received a GOAWAY frame from the peer. The last stream id it accepted from us | 470 // Received a GOAWAY frame from the peer. The last stream id it accepted from us |
470 // is |last_accepted_stream_id|. |status| is a protocol defined error code. | 471 // is |last_accepted_stream_id|. |status| is a protocol defined error code. |
471 // The frame may also contain data. After this OnGoAwayFrameData will be called | 472 // The frame may also contain data. After this OnGoAwayFrameData will be called |
472 // for any non-zero amount of data, and after that it will be called with len==0 | 473 // for any non-zero amount of data, and after that it will be called with len==0 |
473 // to indicate the end of the GOAWAY frame. | 474 // to indicate the end of the GOAWAY frame. |
474 void SpdyTestDeframerImpl::OnGoAway(SpdyStreamId last_good_stream_id, | 475 void SpdyTestDeframerImpl::OnGoAway(SpdyStreamId last_good_stream_id, |
475 SpdyErrorCode error_code) { | 476 SpdyErrorCode error_code) { |
476 DVLOG(1) << "OnGoAway last_good_stream_id: " << last_good_stream_id | 477 DVLOG(1) << "OnGoAway last_good_stream_id: " << last_good_stream_id |
477 << " error code: " << error_code; | 478 << " error code: " << error_code; |
478 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 479 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
479 << Http2FrameTypeToString(frame_type_); | 480 << Http2FrameTypeToString(frame_type_); |
480 frame_type_ = GOAWAY; | 481 frame_type_ = GOAWAY; |
481 goaway_ir_ = MakeUnique<SpdyGoAwayIR>(last_good_stream_id, error_code, ""); | 482 goaway_ir_ = |
482 goaway_description_.reset(new SpdyString()); | 483 SpdyMakeUnique<SpdyGoAwayIR>(last_good_stream_id, error_code, ""); |
| 484 goaway_description_ = SpdyMakeUnique<SpdyString>(); |
483 } | 485 } |
484 | 486 |
485 // If len==0 then we've reached the end of the GOAWAY frame. | 487 // If len==0 then we've reached the end of the GOAWAY frame. |
486 bool SpdyTestDeframerImpl::OnGoAwayFrameData(const char* goaway_data, | 488 bool SpdyTestDeframerImpl::OnGoAwayFrameData(const char* goaway_data, |
487 size_t len) { | 489 size_t len) { |
488 DVLOG(1) << "OnGoAwayFrameData"; | 490 DVLOG(1) << "OnGoAwayFrameData"; |
489 CHECK_EQ(frame_type_, GOAWAY) << " frame_type_=" | 491 CHECK_EQ(frame_type_, GOAWAY) << " frame_type_=" |
490 << Http2FrameTypeToString(frame_type_); | 492 << Http2FrameTypeToString(frame_type_); |
491 CHECK(goaway_description_); | 493 CHECK(goaway_description_); |
492 goaway_description_->append(goaway_data, len); | 494 goaway_description_->append(goaway_data, len); |
(...skipping 28 matching lines...) Expand all Loading... |
521 DVLOG(1) << "OnHeaders stream_id: " << stream_id; | 523 DVLOG(1) << "OnHeaders stream_id: " << stream_id; |
522 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 524 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
523 << Http2FrameTypeToString(frame_type_); | 525 << Http2FrameTypeToString(frame_type_); |
524 CHECK_GT(stream_id, 0u); | 526 CHECK_GT(stream_id, 0u); |
525 frame_type_ = HEADERS; | 527 frame_type_ = HEADERS; |
526 | 528 |
527 stream_id_ = stream_id; | 529 stream_id_ = stream_id; |
528 fin_ = fin; | 530 fin_ = fin; |
529 end_ = end; | 531 end_ = end; |
530 | 532 |
531 headers_.reset(new StringPairVector()); | 533 headers_ = SpdyMakeUnique<StringPairVector>(); |
532 headers_handler_.reset(new TestHeadersHandler()); | 534 headers_handler_ = SpdyMakeUnique<TestHeadersHandler>(); |
533 headers_ir_ = MakeUnique<SpdyHeadersIR>(stream_id); | 535 headers_ir_ = SpdyMakeUnique<SpdyHeadersIR>(stream_id); |
534 headers_ir_->set_fin(fin); | 536 headers_ir_->set_fin(fin); |
535 if (has_priority) { | 537 if (has_priority) { |
536 headers_ir_->set_has_priority(true); | 538 headers_ir_->set_has_priority(true); |
537 headers_ir_->set_weight(weight); | 539 headers_ir_->set_weight(weight); |
538 headers_ir_->set_parent_stream_id(parent_stream_id); | 540 headers_ir_->set_parent_stream_id(parent_stream_id); |
539 headers_ir_->set_exclusive(exclusive); | 541 headers_ir_->set_exclusive(exclusive); |
540 } | 542 } |
541 } | 543 } |
542 | 544 |
543 // The HTTP/2 protocol refers to the payload, |unique_id| here, as 8 octets of | 545 // The HTTP/2 protocol refers to the payload, |unique_id| here, as 8 octets of |
544 // opaque data that is to be echoed back to the sender, with the ACK bit added. | 546 // opaque data that is to be echoed back to the sender, with the ACK bit added. |
545 // It isn't defined as a counter, | 547 // It isn't defined as a counter, |
546 // or frame id, as the SpdyPingId naming might imply. | 548 // or frame id, as the SpdyPingId naming might imply. |
547 // Responding to a PING is supposed to be at the highest priority. | 549 // Responding to a PING is supposed to be at the highest priority. |
548 void SpdyTestDeframerImpl::OnPing(uint64_t unique_id, bool is_ack) { | 550 void SpdyTestDeframerImpl::OnPing(uint64_t unique_id, bool is_ack) { |
549 DVLOG(1) << "OnPing unique_id: " << unique_id | 551 DVLOG(1) << "OnPing unique_id: " << unique_id |
550 << " is_ack: " << (is_ack ? "true" : "false"); | 552 << " is_ack: " << (is_ack ? "true" : "false"); |
551 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 553 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
552 << Http2FrameTypeToString(frame_type_); | 554 << Http2FrameTypeToString(frame_type_); |
553 auto ptr = MakeUnique<SpdyPingIR>(unique_id); | 555 auto ptr = SpdyMakeUnique<SpdyPingIR>(unique_id); |
554 if (is_ack) { | 556 if (is_ack) { |
555 ptr->set_is_ack(is_ack); | 557 ptr->set_is_ack(is_ack); |
556 listener_->OnPingAck(std::move(ptr)); | 558 listener_->OnPingAck(std::move(ptr)); |
557 } else { | 559 } else { |
558 listener_->OnPing(std::move(ptr)); | 560 listener_->OnPing(std::move(ptr)); |
559 } | 561 } |
560 } | 562 } |
561 | 563 |
562 void SpdyTestDeframerImpl::OnPriority(SpdyStreamId stream_id, | 564 void SpdyTestDeframerImpl::OnPriority(SpdyStreamId stream_id, |
563 SpdyStreamId parent_stream_id, | 565 SpdyStreamId parent_stream_id, |
564 int weight, | 566 int weight, |
565 bool exclusive) { | 567 bool exclusive) { |
566 DVLOG(1) << "OnPriority stream_id: " << stream_id; | 568 DVLOG(1) << "OnPriority stream_id: " << stream_id; |
567 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 569 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
568 << Http2FrameTypeToString(frame_type_); | 570 << Http2FrameTypeToString(frame_type_); |
569 CHECK_GT(stream_id, 0u); | 571 CHECK_GT(stream_id, 0u); |
570 | 572 |
571 listener_->OnPriority(MakeUnique<SpdyPriorityIR>(stream_id, parent_stream_id, | 573 listener_->OnPriority(SpdyMakeUnique<SpdyPriorityIR>( |
572 weight, exclusive)); | 574 stream_id, parent_stream_id, weight, exclusive)); |
573 } | 575 } |
574 | 576 |
575 void SpdyTestDeframerImpl::OnPushPromise(SpdyStreamId stream_id, | 577 void SpdyTestDeframerImpl::OnPushPromise(SpdyStreamId stream_id, |
576 SpdyStreamId promised_stream_id, | 578 SpdyStreamId promised_stream_id, |
577 bool end) { | 579 bool end) { |
578 DVLOG(1) << "OnPushPromise stream_id: " << stream_id; | 580 DVLOG(1) << "OnPushPromise stream_id: " << stream_id; |
579 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 581 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
580 << Http2FrameTypeToString(frame_type_); | 582 << Http2FrameTypeToString(frame_type_); |
581 CHECK_GT(stream_id, 0u); | 583 CHECK_GT(stream_id, 0u); |
582 | 584 |
583 frame_type_ = PUSH_PROMISE; | 585 frame_type_ = PUSH_PROMISE; |
584 stream_id_ = stream_id; | 586 stream_id_ = stream_id; |
585 end_ = end; | 587 end_ = end; |
586 | 588 |
587 headers_.reset(new StringPairVector()); | 589 headers_ = SpdyMakeUnique<StringPairVector>(); |
588 headers_handler_.reset(new TestHeadersHandler()); | 590 headers_handler_ = SpdyMakeUnique<TestHeadersHandler>(); |
589 push_promise_ir_ = | 591 push_promise_ir_ = |
590 MakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id); | 592 SpdyMakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id); |
591 } | 593 } |
592 | 594 |
593 // Closes the specified stream. After this the sender may still send PRIORITY | 595 // Closes the specified stream. After this the sender may still send PRIORITY |
594 // frames for this stream, which we can ignore. | 596 // frames for this stream, which we can ignore. |
595 void SpdyTestDeframerImpl::OnRstStream(SpdyStreamId stream_id, | 597 void SpdyTestDeframerImpl::OnRstStream(SpdyStreamId stream_id, |
596 SpdyErrorCode error_code) { | 598 SpdyErrorCode error_code) { |
597 DVLOG(1) << "OnRstStream stream_id: " << stream_id | 599 DVLOG(1) << "OnRstStream stream_id: " << stream_id |
598 << " error code: " << error_code; | 600 << " error code: " << error_code; |
599 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 601 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
600 << Http2FrameTypeToString(frame_type_); | 602 << Http2FrameTypeToString(frame_type_); |
601 CHECK_GT(stream_id, 0u); | 603 CHECK_GT(stream_id, 0u); |
602 | 604 |
603 listener_->OnRstStream(MakeUnique<SpdyRstStreamIR>(stream_id, error_code)); | 605 listener_->OnRstStream( |
| 606 SpdyMakeUnique<SpdyRstStreamIR>(stream_id, error_code)); |
604 } | 607 } |
605 | 608 |
606 // Called for an individual setting. There is no negotiation, the sender is | 609 // Called for an individual setting. There is no negotiation, the sender is |
607 // stating the value that the sender is using. | 610 // stating the value that the sender is using. |
608 void SpdyTestDeframerImpl::OnSetting(SpdySettingsIds id, uint32_t value) { | 611 void SpdyTestDeframerImpl::OnSetting(SpdySettingsIds id, uint32_t value) { |
609 DVLOG(1) << "OnSetting id: " << id << std::hex << " value: " << value; | 612 DVLOG(1) << "OnSetting id: " << id << std::hex << " value: " << value; |
610 CHECK_EQ(frame_type_, SETTINGS) << " frame_type_=" | 613 CHECK_EQ(frame_type_, SETTINGS) << " frame_type_=" |
611 << Http2FrameTypeToString(frame_type_); | 614 << Http2FrameTypeToString(frame_type_); |
612 CHECK(settings_); | 615 CHECK(settings_); |
613 settings_->push_back(std::make_pair(id, value)); | 616 settings_->push_back(std::make_pair(id, value)); |
614 settings_ir_->AddSetting(id, value); | 617 settings_ir_->AddSetting(id, value); |
615 } | 618 } |
616 | 619 |
617 // Called at the start of a SETTINGS frame with setting entries, but not the | 620 // Called at the start of a SETTINGS frame with setting entries, but not the |
618 // (required) ACK of a SETTINGS frame. There is no stream_id because | 621 // (required) ACK of a SETTINGS frame. There is no stream_id because |
619 // the settings apply to the entire connection, not to an individual stream. | 622 // the settings apply to the entire connection, not to an individual stream. |
620 // The |clear_persisted| flag is a pre-HTTP/2 remnant. | 623 // The |clear_persisted| flag is a pre-HTTP/2 remnant. |
621 void SpdyTestDeframerImpl::OnSettings(bool /*clear_persisted*/) { | 624 void SpdyTestDeframerImpl::OnSettings(bool /*clear_persisted*/) { |
622 DVLOG(1) << "OnSettings"; | 625 DVLOG(1) << "OnSettings"; |
623 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 626 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
624 << Http2FrameTypeToString(frame_type_); | 627 << Http2FrameTypeToString(frame_type_); |
625 CHECK_EQ(nullptr, settings_ir_.get()); | 628 CHECK_EQ(nullptr, settings_ir_.get()); |
626 CHECK_EQ(nullptr, settings_.get()); | 629 CHECK_EQ(nullptr, settings_.get()); |
627 frame_type_ = SETTINGS; | 630 frame_type_ = SETTINGS; |
628 ack_ = false; | 631 ack_ = false; |
629 | 632 |
630 settings_.reset(new SettingVector()); | 633 settings_ = SpdyMakeUnique<SettingVector>(); |
631 settings_ir_.reset(new SpdySettingsIR()); | 634 settings_ir_ = SpdyMakeUnique<SpdySettingsIR>(); |
632 } | 635 } |
633 | 636 |
634 void SpdyTestDeframerImpl::OnSettingsAck() { | 637 void SpdyTestDeframerImpl::OnSettingsAck() { |
635 DVLOG(1) << "OnSettingsAck"; | 638 DVLOG(1) << "OnSettingsAck"; |
636 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 639 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
637 << Http2FrameTypeToString(frame_type_); | 640 << Http2FrameTypeToString(frame_type_); |
638 auto ptr = MakeUnique<SpdySettingsIR>(); | 641 auto ptr = SpdyMakeUnique<SpdySettingsIR>(); |
639 ptr->set_is_ack(true); | 642 ptr->set_is_ack(true); |
640 listener_->OnSettingsAck(std::move(ptr)); | 643 listener_->OnSettingsAck(std::move(ptr)); |
641 } | 644 } |
642 | 645 |
643 void SpdyTestDeframerImpl::OnSettingsEnd() { | 646 void SpdyTestDeframerImpl::OnSettingsEnd() { |
644 DVLOG(1) << "OnSettingsEnd"; | 647 DVLOG(1) << "OnSettingsEnd"; |
645 CHECK_EQ(frame_type_, SETTINGS) << " frame_type_=" | 648 CHECK_EQ(frame_type_, SETTINGS) << " frame_type_=" |
646 << Http2FrameTypeToString(frame_type_); | 649 << Http2FrameTypeToString(frame_type_); |
647 CHECK(!ack_); | 650 CHECK(!ack_); |
648 CHECK_NE(nullptr, settings_ir_.get()); | 651 CHECK_NE(nullptr, settings_ir_.get()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 // closed. | 703 // closed. |
701 void SpdyTestDeframerImpl::OnWindowUpdate(SpdyStreamId stream_id, | 704 void SpdyTestDeframerImpl::OnWindowUpdate(SpdyStreamId stream_id, |
702 int delta_window_size) { | 705 int delta_window_size) { |
703 DVLOG(1) << "OnWindowUpdate stream_id: " << stream_id | 706 DVLOG(1) << "OnWindowUpdate stream_id: " << stream_id |
704 << " delta_window_size: " << delta_window_size; | 707 << " delta_window_size: " << delta_window_size; |
705 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 708 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
706 << Http2FrameTypeToString(frame_type_); | 709 << Http2FrameTypeToString(frame_type_); |
707 CHECK_NE(0, delta_window_size); | 710 CHECK_NE(0, delta_window_size); |
708 | 711 |
709 listener_->OnWindowUpdate( | 712 listener_->OnWindowUpdate( |
710 MakeUnique<SpdyWindowUpdateIR>(stream_id, delta_window_size)); | 713 SpdyMakeUnique<SpdyWindowUpdateIR>(stream_id, delta_window_size)); |
711 } | 714 } |
712 | 715 |
713 // Return true to indicate that the stream_id is valid; if not valid then | 716 // Return true to indicate that the stream_id is valid; if not valid then |
714 // SpdyFramer considers the connection corrupted. Requires keeping track | 717 // SpdyFramer considers the connection corrupted. Requires keeping track |
715 // of the set of currently open streams. For now we'll assume that unknown | 718 // of the set of currently open streams. For now we'll assume that unknown |
716 // frame types are unsupported. | 719 // frame types are unsupported. |
717 bool SpdyTestDeframerImpl::OnUnknownFrame(SpdyStreamId stream_id, | 720 bool SpdyTestDeframerImpl::OnUnknownFrame(SpdyStreamId stream_id, |
718 uint8_t frame_type) { | 721 uint8_t frame_type) { |
719 DVLOG(1) << "OnAltSvc stream_id: " << stream_id; | 722 DVLOG(1) << "OnAltSvc stream_id: " << stream_id; |
720 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" | 723 CHECK_EQ(frame_type_, UNSET) << " frame_type_=" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 CHECK(!got_hpack_end_); | 771 CHECK(!got_hpack_end_); |
769 got_hpack_end_ = true; | 772 got_hpack_end_ = true; |
770 } | 773 } |
771 | 774 |
772 class LoggingSpdyDeframerDelegate : public SpdyDeframerVisitorInterface { | 775 class LoggingSpdyDeframerDelegate : public SpdyDeframerVisitorInterface { |
773 public: | 776 public: |
774 explicit LoggingSpdyDeframerDelegate( | 777 explicit LoggingSpdyDeframerDelegate( |
775 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped) | 778 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped) |
776 : wrapped_(std::move(wrapped)) { | 779 : wrapped_(std::move(wrapped)) { |
777 if (!wrapped_) { | 780 if (!wrapped_) { |
778 wrapped_ = MakeUnique<SpdyDeframerVisitorInterface>(); | 781 wrapped_ = SpdyMakeUnique<SpdyDeframerVisitorInterface>(); |
779 } | 782 } |
780 } | 783 } |
781 ~LoggingSpdyDeframerDelegate() override {} | 784 ~LoggingSpdyDeframerDelegate() override {} |
782 | 785 |
783 void OnAltSvc(std::unique_ptr<SpdyAltSvcIR> frame) override { | 786 void OnAltSvc(std::unique_ptr<SpdyAltSvcIR> frame) override { |
784 DVLOG(1) << "LoggingSpdyDeframerDelegate::OnAltSvc"; | 787 DVLOG(1) << "LoggingSpdyDeframerDelegate::OnAltSvc"; |
785 wrapped_->OnAltSvc(std::move(frame)); | 788 wrapped_->OnAltSvc(std::move(frame)); |
786 } | 789 } |
787 void OnData(std::unique_ptr<SpdyDataIR> frame) override { | 790 void OnData(std::unique_ptr<SpdyDataIR> frame) override { |
788 DVLOG(1) << "LoggingSpdyDeframerDelegate::OnData"; | 791 DVLOG(1) << "LoggingSpdyDeframerDelegate::OnData"; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 } | 861 } |
859 | 862 |
860 private: | 863 private: |
861 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped_; | 864 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped_; |
862 }; | 865 }; |
863 | 866 |
864 // static | 867 // static |
865 std::unique_ptr<SpdyDeframerVisitorInterface> | 868 std::unique_ptr<SpdyDeframerVisitorInterface> |
866 SpdyDeframerVisitorInterface::LogBeforeVisiting( | 869 SpdyDeframerVisitorInterface::LogBeforeVisiting( |
867 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped_listener) { | 870 std::unique_ptr<SpdyDeframerVisitorInterface> wrapped_listener) { |
868 return MakeUnique<LoggingSpdyDeframerDelegate>(std::move(wrapped_listener)); | 871 return SpdyMakeUnique<LoggingSpdyDeframerDelegate>( |
| 872 std::move(wrapped_listener)); |
869 } | 873 } |
870 | 874 |
871 CollectedFrame::CollectedFrame() {} | 875 CollectedFrame::CollectedFrame() {} |
872 | 876 |
873 CollectedFrame::CollectedFrame(CollectedFrame&& other) | 877 CollectedFrame::CollectedFrame(CollectedFrame&& other) |
874 : frame_ir(std::move(other.frame_ir)), | 878 : frame_ir(std::move(other.frame_ir)), |
875 headers(std::move(other.headers)), | 879 headers(std::move(other.headers)), |
876 settings(std::move(other.settings)), | 880 settings(std::move(other.settings)), |
877 error_reported(other.error_reported) {} | 881 error_reported(other.error_reported) {} |
878 | 882 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 // The SpdyFramer will not process any more data at this point. | 1020 // The SpdyFramer will not process any more data at this point. |
1017 void DeframerCallbackCollector::OnError(SpdyFramer* framer, | 1021 void DeframerCallbackCollector::OnError(SpdyFramer* framer, |
1018 SpdyTestDeframer* deframer) { | 1022 SpdyTestDeframer* deframer) { |
1019 CollectedFrame cf; | 1023 CollectedFrame cf; |
1020 cf.error_reported = true; | 1024 cf.error_reported = true; |
1021 collected_frames_->push_back(std::move(cf)); | 1025 collected_frames_->push_back(std::move(cf)); |
1022 } | 1026 } |
1023 | 1027 |
1024 } // namespace test | 1028 } // namespace test |
1025 } // namespace net | 1029 } // namespace net |
OLD | NEW |