| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <iostream> | 6 #include <iostream> |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 } else { | 114 } else { |
| 115 // Done. | 115 // Done. |
| 116 finished_ = true; | 116 finished_ = true; |
| 117 } | 117 } |
| 118 return true; | 118 return true; |
| 119 } | 119 } |
| 120 | 120 |
| 121 virtual void OnSynStream(SpdyStreamId stream_id, | 121 virtual void OnSynStream(SpdyStreamId stream_id, |
| 122 SpdyStreamId associated_stream_id, | 122 SpdyStreamId associated_stream_id, |
| 123 SpdyPriority priority, | 123 SpdyPriority priority, |
| 124 uint8 slot, | |
| 125 bool fin, | 124 bool fin, |
| 126 bool unidirectional) OVERRIDE { | 125 bool unidirectional) OVERRIDE { |
| 127 SpdyFramer framer(version_); | 126 SpdyFramer framer(version_); |
| 128 framer.set_enable_compression(false); | 127 framer.set_enable_compression(false); |
| 129 SpdySynStreamIR syn_stream(stream_id); | 128 SpdySynStreamIR syn_stream(stream_id); |
| 130 syn_stream.set_associated_to_stream_id(associated_stream_id); | 129 syn_stream.set_associated_to_stream_id(associated_stream_id); |
| 131 syn_stream.set_priority(priority); | 130 syn_stream.set_priority(priority); |
| 132 syn_stream.set_slot(slot); | |
| 133 syn_stream.set_fin(fin); | 131 syn_stream.set_fin(fin); |
| 134 syn_stream.set_unidirectional(unidirectional); | 132 syn_stream.set_unidirectional(unidirectional); |
| 135 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 133 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 136 ResetBuffer(); | 134 ResetBuffer(); |
| 137 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize()); | 135 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize()); |
| 138 size_ += framer.GetSynStreamMinimumSize(); | 136 size_ += framer.GetSynStreamMinimumSize(); |
| 139 } | 137 } |
| 140 | 138 |
| 141 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { | 139 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { |
| 142 SpdyFramer framer(version_); | 140 SpdyFramer framer(version_); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 return false; | 305 return false; |
| 308 } | 306 } |
| 309 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); | 307 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); |
| 310 header_buffer_length_ += len; | 308 header_buffer_length_ += len; |
| 311 return true; | 309 return true; |
| 312 } | 310 } |
| 313 | 311 |
| 314 virtual void OnSynStream(SpdyStreamId stream_id, | 312 virtual void OnSynStream(SpdyStreamId stream_id, |
| 315 SpdyStreamId associated_stream_id, | 313 SpdyStreamId associated_stream_id, |
| 316 SpdyPriority priority, | 314 SpdyPriority priority, |
| 317 uint8 credential_slot, | |
| 318 bool fin, | 315 bool fin, |
| 319 bool unidirectional) OVERRIDE { | 316 bool unidirectional) OVERRIDE { |
| 320 syn_frame_count_++; | 317 syn_frame_count_++; |
| 321 InitHeaderStreaming(SYN_STREAM, stream_id); | 318 InitHeaderStreaming(SYN_STREAM, stream_id); |
| 322 if (fin) { | 319 if (fin) { |
| 323 fin_flag_count_++; | 320 fin_flag_count_++; |
| 324 } | 321 } |
| 325 } | 322 } |
| 326 | 323 |
| 327 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { | 324 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 EXPECT_TRUE(frame.get() != NULL); | 611 EXPECT_TRUE(frame.get() != NULL); |
| 615 | 612 |
| 616 base::StringPiece serialized_headers = | 613 base::StringPiece serialized_headers = |
| 617 GetSerializedHeaders(frame.get(), framer); | 614 GetSerializedHeaders(frame.get(), framer); |
| 618 SpdyHeaderBlock new_headers; | 615 SpdyHeaderBlock new_headers; |
| 619 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), | 616 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), |
| 620 serialized_headers.size() - 2, | 617 serialized_headers.size() - 2, |
| 621 &new_headers)); | 618 &new_headers)); |
| 622 } | 619 } |
| 623 | 620 |
| 624 TEST_P(SpdyFramerTest, OutOfOrderHeaders) { | |
| 625 SpdyFramer framer(spdy_version_); | |
| 626 framer.set_enable_compression(false); | |
| 627 | |
| 628 // Frame builder with plentiful buffer size. | |
| 629 SpdyFrameBuilder frame(1024); | |
| 630 if (spdy_version_ < 4) { | |
| 631 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | |
| 632 frame.WriteUInt32(3); // stream_id | |
| 633 } else { | |
| 634 frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3); | |
| 635 } | |
| 636 | |
| 637 frame.WriteUInt32(0); // Associated stream id | |
| 638 frame.WriteUInt16(0); // Priority. | |
| 639 | |
| 640 if (IsSpdy2()) { | |
| 641 frame.WriteUInt16(2); // Number of headers. | |
| 642 frame.WriteString("gamma"); | |
| 643 frame.WriteString("gamma"); | |
| 644 frame.WriteString("alpha"); | |
| 645 frame.WriteString("alpha"); | |
| 646 } else { | |
| 647 frame.WriteUInt32(2); // Number of headers. | |
| 648 frame.WriteStringPiece32("gamma"); | |
| 649 frame.WriteStringPiece32("gamma"); | |
| 650 frame.WriteStringPiece32("alpha"); | |
| 651 frame.WriteStringPiece32("alpha"); | |
| 652 } | |
| 653 // write the length | |
| 654 frame.RewriteLength(framer); | |
| 655 | |
| 656 SpdyHeaderBlock new_headers; | |
| 657 scoped_ptr<SpdyFrame> control_frame(frame.take()); | |
| 658 base::StringPiece serialized_headers = | |
| 659 GetSerializedHeaders(control_frame.get(), framer); | |
| 660 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), | |
| 661 serialized_headers.size(), | |
| 662 &new_headers)); | |
| 663 } | |
| 664 | |
| 665 // Test that if we receive a SYN_STREAM with stream ID zero, we signal an error | |
| 666 // (but don't crash). | |
| 667 TEST_P(SpdyFramerTest, SynStreamWithStreamIdZero) { | |
| 668 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | |
| 669 SpdyFramer framer(spdy_version_); | |
| 670 framer.set_visitor(&visitor); | |
| 671 | |
| 672 SpdySynStreamIR syn_stream(0); | |
| 673 syn_stream.set_priority(1); | |
| 674 syn_stream.SetHeader("alpha", "beta"); | |
| 675 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | |
| 676 ASSERT_TRUE(frame.get() != NULL); | |
| 677 | |
| 678 // We shouldn't have to read the whole frame before we signal an error. | |
| 679 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); | |
| 680 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size())); | |
| 681 EXPECT_TRUE(framer.HasError()); | |
| 682 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code()) | |
| 683 << SpdyFramer::ErrorCodeToString(framer.error_code()); | |
| 684 } | |
| 685 | |
| 686 // Test that if we receive a SYN_REPLY with stream ID zero, we signal an error | 621 // Test that if we receive a SYN_REPLY with stream ID zero, we signal an error |
| 687 // (but don't crash). | 622 // (but don't crash). |
| 688 TEST_P(SpdyFramerTest, SynReplyWithStreamIdZero) { | 623 TEST_P(SpdyFramerTest, SynReplyWithStreamIdZero) { |
| 689 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 624 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 690 SpdyFramer framer(spdy_version_); | 625 SpdyFramer framer(spdy_version_); |
| 691 framer.set_visitor(&visitor); | 626 framer.set_visitor(&visitor); |
| 692 | 627 |
| 693 SpdySynReplyIR syn_reply(0); | 628 SpdySynReplyIR syn_reply(0); |
| 694 syn_reply.SetHeader("alpha", "beta"); | 629 syn_reply.SetHeader("alpha", "beta"); |
| 695 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeSynReply(syn_reply)); | 630 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeSynReply(syn_reply)); |
| (...skipping 988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1684 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); | 1619 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); |
| 1685 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize); | 1620 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize); |
| 1686 } | 1621 } |
| 1687 } | 1622 } |
| 1688 | 1623 |
| 1689 TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { | 1624 TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { |
| 1690 SpdyFramer framer(spdy_version_); | 1625 SpdyFramer framer(spdy_version_); |
| 1691 framer.set_enable_compression(false); | 1626 framer.set_enable_compression(false); |
| 1692 | 1627 |
| 1693 { | 1628 { |
| 1694 const char kDescription[] = "SYN_STREAM frame, lowest pri, slot 2, no FIN"; | 1629 const char kDescription[] = "SYN_STREAM frame, lowest pri, no FIN"; |
| 1695 | 1630 |
| 1696 const unsigned char kPri = IsSpdy2() ? 0xC0 : 0xE0; | 1631 const unsigned char kPri = IsSpdy2() ? 0xC0 : 0xE0; |
| 1697 const unsigned char kCre = IsSpdy2() ? 0 : 2; | |
| 1698 const unsigned char kV2FrameData[] = { | 1632 const unsigned char kV2FrameData[] = { |
| 1699 0x80, spdy_version_ch_, 0x00, 0x01, | 1633 0x80, spdy_version_ch_, 0x00, 0x01, |
| 1700 0x00, 0x00, 0x00, 0x20, | 1634 0x00, 0x00, 0x00, 0x20, |
| 1701 0x00, 0x00, 0x00, 0x01, | 1635 0x00, 0x00, 0x00, 0x01, |
| 1702 0x00, 0x00, 0x00, 0x00, | 1636 0x00, 0x00, 0x00, 0x00, |
| 1703 kPri, 0x00, 0x00, 0x02, | 1637 kPri, 0x00, 0x00, 0x02, |
| 1704 0x00, 0x03, 'b', 'a', | 1638 0x00, 0x03, 'b', 'a', |
| 1705 'r', 0x00, 0x03, 'f', | 1639 'r', 0x00, 0x03, 'f', |
| 1706 'o', 'o', 0x00, 0x03, | 1640 'o', 'o', 0x00, 0x03, |
| 1707 'f', 'o', 'o', 0x00, | 1641 'f', 'o', 'o', 0x00, |
| 1708 0x03, 'b', 'a', 'r' | 1642 0x03, 'b', 'a', 'r' |
| 1709 }; | 1643 }; |
| 1710 const unsigned char kV3FrameData[] = { | 1644 const unsigned char kV3FrameData[] = { |
| 1711 0x80, spdy_version_ch_, 0x00, 0x01, | 1645 0x80, spdy_version_ch_, 0x00, 0x01, |
| 1712 0x00, 0x00, 0x00, 0x2a, | 1646 0x00, 0x00, 0x00, 0x2a, |
| 1713 0x00, 0x00, 0x00, 0x01, | 1647 0x00, 0x00, 0x00, 0x01, |
| 1714 0x00, 0x00, 0x00, 0x00, | 1648 0x00, 0x00, 0x00, 0x00, |
| 1715 kPri, kCre, 0x00, 0x00, | 1649 kPri, 0x00, 0x00, 0x00, |
| 1716 0x00, 0x02, 0x00, 0x00, | 1650 0x00, 0x02, 0x00, 0x00, |
| 1717 0x00, 0x03, 'b', 'a', | 1651 0x00, 0x03, 'b', 'a', |
| 1718 'r', 0x00, 0x00, 0x00, | 1652 'r', 0x00, 0x00, 0x00, |
| 1719 0x03, 'f', 'o', 'o', | 1653 0x03, 'f', 'o', 'o', |
| 1720 0x00, 0x00, 0x00, 0x03, | 1654 0x00, 0x00, 0x00, 0x03, |
| 1721 'f', 'o', 'o', 0x00, | 1655 'f', 'o', 'o', 0x00, |
| 1722 0x00, 0x00, 0x03, 'b', | 1656 0x00, 0x00, 0x03, 'b', |
| 1723 'a', 'r' | 1657 'a', 'r' |
| 1724 }; | 1658 }; |
| 1725 const unsigned char kV4FrameData[] = { | 1659 const unsigned char kV4FrameData[] = { |
| 1726 0x00, 0x2c, 0x08, 0x08, | 1660 0x00, 0x2c, 0x08, 0x08, |
| 1727 0x00, 0x00, 0x00, 0x01, | 1661 0x00, 0x00, 0x00, 0x01, |
| 1728 0x00, 0x00, 0x00, 0x07, | 1662 0x00, 0x00, 0x00, 0x07, |
| 1729 0x00, 0x00, 0x00, 0x02, | 1663 0x00, 0x00, 0x00, 0x02, |
| 1730 0x00, 0x00, 0x00, 0x03, | 1664 0x00, 0x00, 0x00, 0x03, |
| 1731 'b', 'a', 'r', 0x00, | 1665 'b', 'a', 'r', 0x00, |
| 1732 0x00, 0x00, 0x03, 'f', | 1666 0x00, 0x00, 0x03, 'f', |
| 1733 'o', 'o', 0x00, 0x00, | 1667 'o', 'o', 0x00, 0x00, |
| 1734 0x00, 0x03, 'f', 'o', | 1668 0x00, 0x03, 'f', 'o', |
| 1735 'o', 0x00, 0x00, 0x00, | 1669 'o', 0x00, 0x00, 0x00, |
| 1736 0x03, 'b', 'a', 'r' | 1670 0x03, 'b', 'a', 'r' |
| 1737 }; | 1671 }; |
| 1738 SpdySynStreamIR syn_stream(1); | 1672 SpdySynStreamIR syn_stream(1); |
| 1739 syn_stream.set_priority(framer.GetLowestPriority()); | 1673 syn_stream.set_priority(framer.GetLowestPriority()); |
| 1740 syn_stream.set_slot(kCre); | |
| 1741 syn_stream.SetHeader("bar", "foo"); | 1674 syn_stream.SetHeader("bar", "foo"); |
| 1742 syn_stream.SetHeader("foo", "bar"); | 1675 syn_stream.SetHeader("foo", "bar"); |
| 1743 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 1676 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 1744 if (IsSpdy2()) { | 1677 if (IsSpdy2()) { |
| 1745 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 1678 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| 1746 } else if (IsSpdy3()) { | 1679 } else if (IsSpdy3()) { |
| 1747 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 1680 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 1748 } else { | 1681 } else { |
| 1749 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); | 1682 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
| 1750 } | 1683 } |
| (...skipping 1978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3729 | 3662 |
| 3730 if (!IsSpdy4() && | 3663 if (!IsSpdy4() && |
| 3731 flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { | 3664 flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { |
| 3732 EXPECT_CALL(visitor, OnError(_)); | 3665 EXPECT_CALL(visitor, OnError(_)); |
| 3733 } else if (IsSpdy4() && | 3666 } else if (IsSpdy4() && |
| 3734 flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) { | 3667 flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) { |
| 3735 EXPECT_CALL(visitor, OnError(_)); | 3668 EXPECT_CALL(visitor, OnError(_)); |
| 3736 } else { | 3669 } else { |
| 3737 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _)); | 3670 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _)); |
| 3738 if (IsSpdy4()) { | 3671 if (IsSpdy4()) { |
| 3739 EXPECT_CALL(visitor, OnSynStream(8, 0, 1, 0, flags & CONTROL_FLAG_FIN, | 3672 EXPECT_CALL(visitor, OnSynStream(8, 0, 1, flags & CONTROL_FLAG_FIN, |
| 3740 false)); | 3673 false)); |
| 3741 } else { | 3674 } else { |
| 3742 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, 0, flags & CONTROL_FLAG_FIN, | 3675 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, flags & CONTROL_FLAG_FIN, |
| 3743 flags & CONTROL_FLAG_UNIDIRECTIONAL)); | 3676 flags & CONTROL_FLAG_UNIDIRECTIONAL)); |
| 3744 } | 3677 } |
| 3745 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _)) | 3678 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _)) |
| 3746 .WillRepeatedly(testing::Return(true)); | 3679 .WillRepeatedly(testing::Return(true)); |
| 3747 if (flags & DATA_FLAG_FIN) { | 3680 if (flags & DATA_FLAG_FIN) { |
| 3748 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); | 3681 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); |
| 3749 } | 3682 } |
| 3750 } | 3683 } |
| 3751 | 3684 |
| 3752 framer.ProcessInput(frame->data(), frame->size()); | 3685 framer.ProcessInput(frame->data(), frame->size()); |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4084 framer.GetSynStreamMinimumSize(), | 4017 framer.GetSynStreamMinimumSize(), |
| 4085 spdy_version_); | 4018 spdy_version_); |
| 4086 } else { | 4019 } else { |
| 4087 SetFrameLength( | 4020 SetFrameLength( |
| 4088 frame.get(), | 4021 frame.get(), |
| 4089 framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(), | 4022 framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(), |
| 4090 spdy_version_); | 4023 spdy_version_); |
| 4091 } | 4024 } |
| 4092 | 4025 |
| 4093 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(1, SYN_STREAM, _)); | 4026 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(1, SYN_STREAM, _)); |
| 4094 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, 0, false, false)); | 4027 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, false, false)); |
| 4095 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); | 4028 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); |
| 4096 | 4029 |
| 4097 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize()); | 4030 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize()); |
| 4098 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); | 4031 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 4099 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 4032 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 4100 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 4033 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 4101 } | 4034 } |
| 4102 | 4035 |
| 4103 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { | 4036 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { |
| 4104 const uint32 kId = 0x020304; | 4037 const uint32 kId = 0x020304; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4227 SpdyBlockedIR blocked_ir(0); | 4160 SpdyBlockedIR blocked_ir(0); |
| 4228 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); | 4161 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); |
| 4229 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); | 4162 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); |
| 4230 | 4163 |
| 4231 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); | 4164 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 4232 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 4165 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 4233 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 4166 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 4234 } | 4167 } |
| 4235 | 4168 |
| 4236 } // namespace net | 4169 } // namespace net |
| OLD | NEW |