| 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 "net/spdy/spdy_framer.h" | 5 #include "net/spdy/spdy_framer.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| 11 #include <limits> | 11 #include <limits> |
| 12 #include <memory> | 12 #include <memory> |
| 13 #include <string> | 13 #include <string> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "base/compiler_specific.h" | 16 #include "base/compiler_specific.h" |
| 17 #include "base/macros.h" |
| 17 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/scoped_ptr.h" |
| 18 #include "net/spdy/hpack/hpack_constants.h" | 19 #include "net/spdy/hpack/hpack_constants.h" |
| 19 #include "net/spdy/mock_spdy_framer_visitor.h" | 20 #include "net/spdy/mock_spdy_framer_visitor.h" |
| 20 #include "net/spdy/spdy_frame_builder.h" | 21 #include "net/spdy/spdy_frame_builder.h" |
| 21 #include "net/spdy/spdy_frame_reader.h" | 22 #include "net/spdy/spdy_frame_reader.h" |
| 22 #include "net/spdy/spdy_protocol.h" | 23 #include "net/spdy/spdy_protocol.h" |
| 23 #include "net/spdy/spdy_test_utils.h" | 24 #include "net/spdy/spdy_test_utils.h" |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/platform_test.h" | 26 #include "testing/platform_test.h" |
| 26 | 27 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); | 153 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); |
| 153 ResetBuffer(); | 154 ResetBuffer(); |
| 154 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); | 155 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); |
| 155 size_ += framer.GetSynStreamMinimumSize(); | 156 size_ += framer.GetSynStreamMinimumSize(); |
| 156 } | 157 } |
| 157 | 158 |
| 158 void OnRstStream(SpdyStreamId stream_id, | 159 void OnRstStream(SpdyStreamId stream_id, |
| 159 SpdyRstStreamStatus status) override { | 160 SpdyRstStreamStatus status) override { |
| 160 LOG(FATAL); | 161 LOG(FATAL); |
| 161 } | 162 } |
| 162 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { | 163 void OnSetting(SpdySettingsIds id, uint8_t flags, uint32_t value) override { |
| 163 LOG(FATAL); | 164 LOG(FATAL); |
| 164 } | 165 } |
| 165 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } | 166 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } |
| 166 void OnSettingsEnd() override { LOG(FATAL); } | 167 void OnSettingsEnd() override { LOG(FATAL); } |
| 167 void OnGoAway(SpdyStreamId last_accepted_stream_id, | 168 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
| 168 SpdyGoAwayStatus status) override { | 169 SpdyGoAwayStatus status) override { |
| 169 LOG(FATAL); | 170 LOG(FATAL); |
| 170 } | 171 } |
| 171 | 172 |
| 172 void OnHeaders(SpdyStreamId stream_id, | 173 void OnHeaders(SpdyStreamId stream_id, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 memcpy(buffer_.get(), frame->data(), framer.GetPushPromiseMinimumSize()); | 207 memcpy(buffer_.get(), frame->data(), framer.GetPushPromiseMinimumSize()); |
| 207 size_ += framer.GetPushPromiseMinimumSize(); | 208 size_ += framer.GetPushPromiseMinimumSize(); |
| 208 } | 209 } |
| 209 | 210 |
| 210 void OnContinuation(SpdyStreamId stream_id, bool end) override { | 211 void OnContinuation(SpdyStreamId stream_id, bool end) override { |
| 211 LOG(FATAL); | 212 LOG(FATAL); |
| 212 } | 213 } |
| 213 | 214 |
| 214 void OnPriority(SpdyStreamId stream_id, | 215 void OnPriority(SpdyStreamId stream_id, |
| 215 SpdyStreamId parent_stream_id, | 216 SpdyStreamId parent_stream_id, |
| 216 uint8 weight, | 217 uint8_t weight, |
| 217 bool exclusive) override { | 218 bool exclusive) override { |
| 218 // Do nothing. | 219 // Do nothing. |
| 219 } | 220 } |
| 220 | 221 |
| 221 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { | 222 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { |
| 222 LOG(FATAL); | 223 LOG(FATAL); |
| 223 return false; | 224 return false; |
| 224 } | 225 } |
| 225 | 226 |
| 226 char* ReleaseBuffer() { | 227 char* ReleaseBuffer() { |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 ++fin_frame_count_; | 397 ++fin_frame_count_; |
| 397 } | 398 } |
| 398 | 399 |
| 399 bool OnRstStreamFrameData(const char* rst_stream_data, size_t len) override { | 400 bool OnRstStreamFrameData(const char* rst_stream_data, size_t len) override { |
| 400 if ((rst_stream_data != NULL) && (len > 0)) { | 401 if ((rst_stream_data != NULL) && (len > 0)) { |
| 401 fin_opaque_data_ += string(rst_stream_data, len); | 402 fin_opaque_data_ += string(rst_stream_data, len); |
| 402 } | 403 } |
| 403 return true; | 404 return true; |
| 404 } | 405 } |
| 405 | 406 |
| 406 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { | 407 void OnSetting(SpdySettingsIds id, uint8_t flags, uint32_t value) override { |
| 407 ++setting_count_; | 408 ++setting_count_; |
| 408 } | 409 } |
| 409 | 410 |
| 410 void OnSettingsAck() override { | 411 void OnSettingsAck() override { |
| 411 DCHECK_LT(SPDY3, framer_.protocol_version()); | 412 DCHECK_LT(SPDY3, framer_.protocol_version()); |
| 412 ++settings_ack_received_; | 413 ++settings_ack_received_; |
| 413 } | 414 } |
| 414 | 415 |
| 415 void OnSettingsEnd() override { | 416 void OnSettingsEnd() override { |
| 416 if (framer_.protocol_version() <= SPDY3) { return; } | 417 if (framer_.protocol_version() <= SPDY3) { return; } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 } | 470 } |
| 470 for (const SpdyAltSvcWireFormat::AlternativeService& altsvc : | 471 for (const SpdyAltSvcWireFormat::AlternativeService& altsvc : |
| 471 altsvc_vector) { | 472 altsvc_vector) { |
| 472 test_altsvc_ir_.add_altsvc(altsvc); | 473 test_altsvc_ir_.add_altsvc(altsvc); |
| 473 } | 474 } |
| 474 ++altsvc_count_; | 475 ++altsvc_count_; |
| 475 } | 476 } |
| 476 | 477 |
| 477 void OnPriority(SpdyStreamId stream_id, | 478 void OnPriority(SpdyStreamId stream_id, |
| 478 SpdyStreamId parent_stream_id, | 479 SpdyStreamId parent_stream_id, |
| 479 uint8 weight, | 480 uint8_t weight, |
| 480 bool exclusive) override { | 481 bool exclusive) override { |
| 481 ++priority_count_; | 482 ++priority_count_; |
| 482 } | 483 } |
| 483 | 484 |
| 484 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { | 485 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { |
| 485 DLOG(INFO) << "Unknown frame type " << frame_type; | 486 DLOG(INFO) << "Unknown frame type " << frame_type; |
| 486 return on_unknown_frame_result_; | 487 return on_unknown_frame_result_; |
| 487 } | 488 } |
| 488 | 489 |
| 489 void OnSendCompressedFrame(SpdyStreamId stream_id, | 490 void OnSendCompressedFrame(SpdyStreamId stream_id, |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 StringPiece GetSerializedHeaders(const SpdyFrame* frame, | 616 StringPiece GetSerializedHeaders(const SpdyFrame* frame, |
| 616 const SpdyFramer& framer) { | 617 const SpdyFramer& framer) { |
| 617 SpdyFrameReader reader(frame->data(), frame->size()); | 618 SpdyFrameReader reader(frame->data(), frame->size()); |
| 618 if (framer.protocol_version() > SPDY3) { | 619 if (framer.protocol_version() > SPDY3) { |
| 619 reader.Seek(3); // Seek past the frame length. | 620 reader.Seek(3); // Seek past the frame length. |
| 620 } else { | 621 } else { |
| 621 reader.Seek(2); // Seek past the frame length. | 622 reader.Seek(2); // Seek past the frame length. |
| 622 } | 623 } |
| 623 SpdyFrameType frame_type; | 624 SpdyFrameType frame_type; |
| 624 if (framer.protocol_version() > SPDY3) { | 625 if (framer.protocol_version() > SPDY3) { |
| 625 uint8 serialized_type; | 626 uint8_t serialized_type; |
| 626 reader.ReadUInt8(&serialized_type); | 627 reader.ReadUInt8(&serialized_type); |
| 627 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(), | 628 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(), |
| 628 serialized_type); | 629 serialized_type); |
| 629 DCHECK_EQ(HEADERS, frame_type); | 630 DCHECK_EQ(HEADERS, frame_type); |
| 630 uint8 flags; | 631 uint8_t flags; |
| 631 reader.ReadUInt8(&flags); | 632 reader.ReadUInt8(&flags); |
| 632 if (flags & HEADERS_FLAG_PRIORITY) { | 633 if (flags & HEADERS_FLAG_PRIORITY) { |
| 633 frame_type = SYN_STREAM; | 634 frame_type = SYN_STREAM; |
| 634 } | 635 } |
| 635 } else { | 636 } else { |
| 636 uint16 serialized_type; | 637 uint16_t serialized_type; |
| 637 reader.ReadUInt16(&serialized_type); | 638 reader.ReadUInt16(&serialized_type); |
| 638 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(), | 639 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(), |
| 639 serialized_type); | 640 serialized_type); |
| 640 DCHECK(frame_type == HEADERS || | 641 DCHECK(frame_type == HEADERS || |
| 641 frame_type == SYN_STREAM) << frame_type; | 642 frame_type == SYN_STREAM) << frame_type; |
| 642 } | 643 } |
| 643 | 644 |
| 644 if (frame_type == SYN_STREAM) { | 645 if (frame_type == SYN_STREAM) { |
| 645 return StringPiece(frame->data() + framer.GetSynStreamMinimumSize(), | 646 return StringPiece(frame->data() + framer.GetSynStreamMinimumSize(), |
| 646 frame->size() - framer.GetSynStreamMinimumSize()); | 647 frame->size() - framer.GetSynStreamMinimumSize()); |
| (...skipping 1886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2533 0x01, 0x00, 0x00, 0x07, | 2534 0x01, 0x00, 0x00, 0x07, |
| 2534 0x0a, 0x0b, 0x0c, 0x0d, | 2535 0x0a, 0x0b, 0x0c, 0x0d, |
| 2535 }; | 2536 }; |
| 2536 const unsigned char kH2FrameData[] = { | 2537 const unsigned char kH2FrameData[] = { |
| 2537 0x00, 0x00, 0x06, 0x04, | 2538 0x00, 0x00, 0x06, 0x04, |
| 2538 0x00, 0x00, 0x00, 0x00, | 2539 0x00, 0x00, 0x00, 0x00, |
| 2539 0x00, 0x00, 0x04, 0x0a, | 2540 0x00, 0x00, 0x04, 0x0a, |
| 2540 0x0b, 0x0c, 0x0d, | 2541 0x0b, 0x0c, 0x0d, |
| 2541 }; | 2542 }; |
| 2542 | 2543 |
| 2543 uint32 kValue = 0x0a0b0c0d; | 2544 uint32_t kValue = 0x0a0b0c0d; |
| 2544 SpdySettingsIR settings_ir; | 2545 SpdySettingsIR settings_ir; |
| 2545 | 2546 |
| 2546 SpdySettingsFlags kFlags = static_cast<SpdySettingsFlags>(0x01); | 2547 SpdySettingsFlags kFlags = static_cast<SpdySettingsFlags>(0x01); |
| 2547 SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE; | 2548 SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE; |
| 2548 settings_ir.AddSetting(kId, | 2549 settings_ir.AddSetting(kId, |
| 2549 kFlags & SETTINGS_FLAG_PLEASE_PERSIST, | 2550 kFlags & SETTINGS_FLAG_PLEASE_PERSIST, |
| 2550 kFlags & SETTINGS_FLAG_PERSISTED, | 2551 kFlags & SETTINGS_FLAG_PERSISTED, |
| 2551 kValue); | 2552 kValue); |
| 2552 | 2553 |
| 2553 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); | 2554 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); |
| (...skipping 2336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4890 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) | 4891 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) |
| 4891 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 4892 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 4892 } | 4893 } |
| 4893 } | 4894 } |
| 4894 | 4895 |
| 4895 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) { | 4896 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) { |
| 4896 if (spdy_version_ > SPDY3) { | 4897 if (spdy_version_ > SPDY3) { |
| 4897 return; | 4898 return; |
| 4898 } | 4899 } |
| 4899 | 4900 |
| 4900 uint8 flags = 0; | 4901 uint8_t flags = 0; |
| 4901 do { | 4902 do { |
| 4902 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 4903 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 4903 | 4904 |
| 4904 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 4905 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 4905 SpdyFramer framer(spdy_version_); | 4906 SpdyFramer framer(spdy_version_); |
| 4906 framer.set_visitor(&visitor); | 4907 framer.set_visitor(&visitor); |
| 4907 | 4908 |
| 4908 SpdyDataIR data_ir(1, "hello"); | 4909 SpdyDataIR data_ir(1, "hello"); |
| 4909 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); | 4910 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); |
| 4910 SetFrameFlags(frame.get(), flags, spdy_version_); | 4911 SetFrameFlags(frame.get(), flags, spdy_version_); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4931 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 4932 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 4932 } | 4933 } |
| 4933 } while (++flags != 0); | 4934 } while (++flags != 0); |
| 4934 } | 4935 } |
| 4935 | 4936 |
| 4936 TEST_P(SpdyFramerTest, DataFrameFlagsV4) { | 4937 TEST_P(SpdyFramerTest, DataFrameFlagsV4) { |
| 4937 if (spdy_version_ <= SPDY3) { | 4938 if (spdy_version_ <= SPDY3) { |
| 4938 return; | 4939 return; |
| 4939 } | 4940 } |
| 4940 | 4941 |
| 4941 uint8 valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT | | 4942 uint8_t valid_data_flags = |
| 4942 DATA_FLAG_PADDED; | 4943 DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT | DATA_FLAG_PADDED; |
| 4943 | 4944 |
| 4944 uint8 flags = 0; | 4945 uint8_t flags = 0; |
| 4945 do { | 4946 do { |
| 4946 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 4947 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 4947 | 4948 |
| 4948 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 4949 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 4949 SpdyFramer framer(spdy_version_); | 4950 SpdyFramer framer(spdy_version_); |
| 4950 framer.set_visitor(&visitor); | 4951 framer.set_visitor(&visitor); |
| 4951 | 4952 |
| 4952 SpdyDataIR data_ir(1, "hello"); | 4953 SpdyDataIR data_ir(1, "hello"); |
| 4953 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); | 4954 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); |
| 4954 SetFrameFlags(frame.get(), flags, spdy_version_); | 4955 SetFrameFlags(frame.get(), flags, spdy_version_); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 4981 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 4982 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 4982 } | 4983 } |
| 4983 } while (++flags != 0); | 4984 } while (++flags != 0); |
| 4984 } | 4985 } |
| 4985 | 4986 |
| 4986 TEST_P(SpdyFramerTest, SynStreamFrameFlags) { | 4987 TEST_P(SpdyFramerTest, SynStreamFrameFlags) { |
| 4987 if (!IsSpdy2() && !IsSpdy3()) { | 4988 if (!IsSpdy2() && !IsSpdy3()) { |
| 4988 // SYN_STREAM not supported in SPDY>3 | 4989 // SYN_STREAM not supported in SPDY>3 |
| 4989 return; | 4990 return; |
| 4990 } | 4991 } |
| 4991 uint8 flags = 0; | 4992 uint8_t flags = 0; |
| 4992 do { | 4993 do { |
| 4993 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 4994 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 4994 | 4995 |
| 4995 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 4996 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 4996 testing::StrictMock<test::MockDebugVisitor> debug_visitor; | 4997 testing::StrictMock<test::MockDebugVisitor> debug_visitor; |
| 4997 SpdyFramer framer(spdy_version_); | 4998 SpdyFramer framer(spdy_version_); |
| 4998 framer.set_visitor(&visitor); | 4999 framer.set_visitor(&visitor); |
| 4999 framer.set_debug_visitor(&debug_visitor); | 5000 framer.set_debug_visitor(&debug_visitor); |
| 5000 | 5001 |
| 5001 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(8, SYN_STREAM, _, _)); | 5002 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(8, SYN_STREAM, _, _)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5035 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5036 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5036 } | 5037 } |
| 5037 } while (++flags != 0); | 5038 } while (++flags != 0); |
| 5038 } | 5039 } |
| 5039 | 5040 |
| 5040 TEST_P(SpdyFramerTest, SynReplyFrameFlags) { | 5041 TEST_P(SpdyFramerTest, SynReplyFrameFlags) { |
| 5041 if (!IsSpdy2() && !IsSpdy3()) { | 5042 if (!IsSpdy2() && !IsSpdy3()) { |
| 5042 // SYN_REPLY not supported in SPDY>3 | 5043 // SYN_REPLY not supported in SPDY>3 |
| 5043 return; | 5044 return; |
| 5044 } | 5045 } |
| 5045 uint8 flags = 0; | 5046 uint8_t flags = 0; |
| 5046 do { | 5047 do { |
| 5047 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5048 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5048 | 5049 |
| 5049 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5050 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5050 SpdyFramer framer(spdy_version_); | 5051 SpdyFramer framer(spdy_version_); |
| 5051 framer.set_visitor(&visitor); | 5052 framer.set_visitor(&visitor); |
| 5052 | 5053 |
| 5053 SpdySynReplyIR syn_reply(37); | 5054 SpdySynReplyIR syn_reply(37); |
| 5054 syn_reply.SetHeader("foo", "bar"); | 5055 syn_reply.SetHeader("foo", "bar"); |
| 5055 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply)); | 5056 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 5074 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5075 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5075 } else { | 5076 } else { |
| 5076 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5077 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5077 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5078 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5078 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5079 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5079 } | 5080 } |
| 5080 } while (++flags != 0); | 5081 } while (++flags != 0); |
| 5081 } | 5082 } |
| 5082 | 5083 |
| 5083 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { | 5084 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { |
| 5084 uint8 flags = 0; | 5085 uint8_t flags = 0; |
| 5085 do { | 5086 do { |
| 5086 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5087 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5087 | 5088 |
| 5088 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5089 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5089 SpdyFramer framer(spdy_version_); | 5090 SpdyFramer framer(spdy_version_); |
| 5090 framer.set_visitor(&visitor); | 5091 framer.set_visitor(&visitor); |
| 5091 | 5092 |
| 5092 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL); | 5093 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL); |
| 5093 scoped_ptr<SpdyFrame> frame(framer.SerializeRstStream(rst_stream)); | 5094 scoped_ptr<SpdyFrame> frame(framer.SerializeRstStream(rst_stream)); |
| 5094 SetFrameFlags(frame.get(), flags, spdy_version_); | 5095 SetFrameFlags(frame.get(), flags, spdy_version_); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 5108 } else { | 5109 } else { |
| 5109 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5110 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5110 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5111 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5111 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5112 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5112 } | 5113 } |
| 5113 } while (++flags != 0); | 5114 } while (++flags != 0); |
| 5114 } | 5115 } |
| 5115 | 5116 |
| 5116 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) { | 5117 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) { |
| 5117 if (spdy_version_ > SPDY3) { return; } | 5118 if (spdy_version_ > SPDY3) { return; } |
| 5118 uint8 flags = 0; | 5119 uint8_t flags = 0; |
| 5119 do { | 5120 do { |
| 5120 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5121 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5121 | 5122 |
| 5122 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5123 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5123 SpdyFramer framer(spdy_version_); | 5124 SpdyFramer framer(spdy_version_); |
| 5124 framer.set_visitor(&visitor); | 5125 framer.set_visitor(&visitor); |
| 5125 | 5126 |
| 5126 SpdySettingsIR settings_ir; | 5127 SpdySettingsIR settings_ir; |
| 5127 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH, | 5128 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH, |
| 5128 false, | 5129 false, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 5150 } else { | 5151 } else { |
| 5151 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5152 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5152 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5153 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5153 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5154 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5154 } | 5155 } |
| 5155 } while (++flags != 0); | 5156 } while (++flags != 0); |
| 5156 } | 5157 } |
| 5157 | 5158 |
| 5158 TEST_P(SpdyFramerTest, SettingsFrameFlags) { | 5159 TEST_P(SpdyFramerTest, SettingsFrameFlags) { |
| 5159 if (spdy_version_ <= SPDY3) { return; } | 5160 if (spdy_version_ <= SPDY3) { return; } |
| 5160 uint8 flags = 0; | 5161 uint8_t flags = 0; |
| 5161 do { | 5162 do { |
| 5162 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5163 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5163 | 5164 |
| 5164 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5165 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5165 SpdyFramer framer(spdy_version_); | 5166 SpdyFramer framer(spdy_version_); |
| 5166 framer.set_visitor(&visitor); | 5167 framer.set_visitor(&visitor); |
| 5167 | 5168 |
| 5168 SpdySettingsIR settings_ir; | 5169 SpdySettingsIR settings_ir; |
| 5169 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16); | 5170 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16); |
| 5170 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); | 5171 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 5192 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5193 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5193 } else { | 5194 } else { |
| 5194 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5195 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5195 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5196 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5196 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5197 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5197 } | 5198 } |
| 5198 } while (++flags != 0); | 5199 } while (++flags != 0); |
| 5199 } | 5200 } |
| 5200 | 5201 |
| 5201 TEST_P(SpdyFramerTest, GoawayFrameFlags) { | 5202 TEST_P(SpdyFramerTest, GoawayFrameFlags) { |
| 5202 uint8 flags = 0; | 5203 uint8_t flags = 0; |
| 5203 do { | 5204 do { |
| 5204 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5205 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5205 | 5206 |
| 5206 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5207 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5207 SpdyFramer framer(spdy_version_); | 5208 SpdyFramer framer(spdy_version_); |
| 5208 framer.set_visitor(&visitor); | 5209 framer.set_visitor(&visitor); |
| 5209 | 5210 |
| 5210 SpdyGoAwayIR goaway_ir(97, GOAWAY_OK, "test"); | 5211 SpdyGoAwayIR goaway_ir(97, GOAWAY_OK, "test"); |
| 5211 scoped_ptr<SpdyFrame> frame(framer.SerializeGoAway(goaway_ir)); | 5212 scoped_ptr<SpdyFrame> frame(framer.SerializeGoAway(goaway_ir)); |
| 5212 SetFrameFlags(frame.get(), flags, spdy_version_); | 5213 SetFrameFlags(frame.get(), flags, spdy_version_); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5225 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5226 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5226 } else { | 5227 } else { |
| 5227 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5228 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5228 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5229 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5229 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5230 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5230 } | 5231 } |
| 5231 } while (++flags != 0); | 5232 } while (++flags != 0); |
| 5232 } | 5233 } |
| 5233 | 5234 |
| 5234 TEST_P(SpdyFramerTest, HeadersFrameFlags) { | 5235 TEST_P(SpdyFramerTest, HeadersFrameFlags) { |
| 5235 uint8 flags = 0; | 5236 uint8_t flags = 0; |
| 5236 do { | 5237 do { |
| 5237 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5238 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5238 | 5239 |
| 5239 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5240 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5240 SpdyFramer framer(spdy_version_); | 5241 SpdyFramer framer(spdy_version_); |
| 5241 framer.set_visitor(&visitor); | 5242 framer.set_visitor(&visitor); |
| 5242 | 5243 |
| 5243 SpdyHeadersIR headers_ir(57); | 5244 SpdyHeadersIR headers_ir(57); |
| 5244 if (IsHttp2() && (flags & HEADERS_FLAG_PRIORITY)) { | 5245 if (IsHttp2() && (flags & HEADERS_FLAG_PRIORITY)) { |
| 5245 headers_ir.set_priority(3); | 5246 headers_ir.set_priority(3); |
| 5246 headers_ir.set_has_priority(true); | 5247 headers_ir.set_has_priority(true); |
| 5247 headers_ir.set_parent_stream_id(5); | 5248 headers_ir.set_parent_stream_id(5); |
| 5248 headers_ir.set_exclusive(true); | 5249 headers_ir.set_exclusive(true); |
| 5249 } | 5250 } |
| 5250 headers_ir.SetHeader("foo", "bar"); | 5251 headers_ir.SetHeader("foo", "bar"); |
| 5251 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir)); | 5252 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir)); |
| 5252 uint8 set_flags = flags; | 5253 uint8_t set_flags = flags; |
| 5253 if (IsHttp2()) { | 5254 if (IsHttp2()) { |
| 5254 // TODO(jgraettinger): Add padding to SpdyHeadersIR, | 5255 // TODO(jgraettinger): Add padding to SpdyHeadersIR, |
| 5255 // and implement framing. | 5256 // and implement framing. |
| 5256 set_flags &= ~HEADERS_FLAG_PADDED; | 5257 set_flags &= ~HEADERS_FLAG_PADDED; |
| 5257 } | 5258 } |
| 5258 SetFrameFlags(frame.get(), set_flags, spdy_version_); | 5259 SetFrameFlags(frame.get(), set_flags, spdy_version_); |
| 5259 | 5260 |
| 5260 if (!IsHttp2() && flags & ~CONTROL_FLAG_FIN) { | 5261 if (!IsHttp2() && flags & ~CONTROL_FLAG_FIN) { |
| 5261 EXPECT_CALL(visitor, OnError(_)); | 5262 EXPECT_CALL(visitor, OnError(_)); |
| 5262 } else if (IsHttp2() && flags & ~(CONTROL_FLAG_FIN | | 5263 } else if (IsHttp2() && flags & ~(CONTROL_FLAG_FIN | |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5314 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5315 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5315 } else { | 5316 } else { |
| 5316 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5317 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5317 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5318 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5318 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5319 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5319 } | 5320 } |
| 5320 } while (++flags != 0); | 5321 } while (++flags != 0); |
| 5321 } | 5322 } |
| 5322 | 5323 |
| 5323 TEST_P(SpdyFramerTest, PingFrameFlags) { | 5324 TEST_P(SpdyFramerTest, PingFrameFlags) { |
| 5324 uint8 flags = 0; | 5325 uint8_t flags = 0; |
| 5325 do { | 5326 do { |
| 5326 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5327 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5327 | 5328 |
| 5328 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5329 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5329 SpdyFramer framer(spdy_version_); | 5330 SpdyFramer framer(spdy_version_); |
| 5330 framer.set_visitor(&visitor); | 5331 framer.set_visitor(&visitor); |
| 5331 | 5332 |
| 5332 scoped_ptr<SpdyFrame> frame(framer.SerializePing(SpdyPingIR(42))); | 5333 scoped_ptr<SpdyFrame> frame(framer.SerializePing(SpdyPingIR(42))); |
| 5333 SetFrameFlags(frame.get(), flags, spdy_version_); | 5334 SetFrameFlags(frame.get(), flags, spdy_version_); |
| 5334 | 5335 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 5350 } else { | 5351 } else { |
| 5351 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); | 5352 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 5352 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, | 5353 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 5353 framer.error_code()) | 5354 framer.error_code()) |
| 5354 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5355 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5355 } | 5356 } |
| 5356 } while (++flags != 0); | 5357 } while (++flags != 0); |
| 5357 } | 5358 } |
| 5358 | 5359 |
| 5359 TEST_P(SpdyFramerTest, WindowUpdateFrameFlags) { | 5360 TEST_P(SpdyFramerTest, WindowUpdateFrameFlags) { |
| 5360 uint8 flags = 0; | 5361 uint8_t flags = 0; |
| 5361 do { | 5362 do { |
| 5362 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5363 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5363 | 5364 |
| 5364 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5365 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5365 SpdyFramer framer(spdy_version_); | 5366 SpdyFramer framer(spdy_version_); |
| 5366 framer.set_visitor(&visitor); | 5367 framer.set_visitor(&visitor); |
| 5367 | 5368 |
| 5368 scoped_ptr<SpdyFrame> frame(framer.SerializeWindowUpdate( | 5369 scoped_ptr<SpdyFrame> frame(framer.SerializeWindowUpdate( |
| 5369 SpdyWindowUpdateIR(4, 1024))); | 5370 SpdyWindowUpdateIR(4, 1024))); |
| 5370 SetFrameFlags(frame.get(), flags, spdy_version_); | 5371 SetFrameFlags(frame.get(), flags, spdy_version_); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 5387 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5388 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5388 } | 5389 } |
| 5389 } while (++flags != 0); | 5390 } while (++flags != 0); |
| 5390 } | 5391 } |
| 5391 | 5392 |
| 5392 TEST_P(SpdyFramerTest, PushPromiseFrameFlags) { | 5393 TEST_P(SpdyFramerTest, PushPromiseFrameFlags) { |
| 5393 if (spdy_version_ <= SPDY3) { | 5394 if (spdy_version_ <= SPDY3) { |
| 5394 return; | 5395 return; |
| 5395 } | 5396 } |
| 5396 | 5397 |
| 5397 uint8 flags = 0; | 5398 uint8_t flags = 0; |
| 5398 do { | 5399 do { |
| 5399 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5400 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5400 | 5401 |
| 5401 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5402 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5402 testing::StrictMock<test::MockDebugVisitor> debug_visitor; | 5403 testing::StrictMock<test::MockDebugVisitor> debug_visitor; |
| 5403 SpdyFramer framer(spdy_version_); | 5404 SpdyFramer framer(spdy_version_); |
| 5404 framer.set_visitor(&visitor); | 5405 framer.set_visitor(&visitor); |
| 5405 framer.set_debug_visitor(&debug_visitor); | 5406 framer.set_debug_visitor(&debug_visitor); |
| 5406 | 5407 |
| 5407 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, PUSH_PROMISE, _, _)); | 5408 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, PUSH_PROMISE, _, _)); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 5436 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5437 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5437 } | 5438 } |
| 5438 } while (++flags != 0); | 5439 } while (++flags != 0); |
| 5439 } | 5440 } |
| 5440 | 5441 |
| 5441 TEST_P(SpdyFramerTest, ContinuationFrameFlags) { | 5442 TEST_P(SpdyFramerTest, ContinuationFrameFlags) { |
| 5442 if (spdy_version_ <= SPDY3) { | 5443 if (spdy_version_ <= SPDY3) { |
| 5443 return; | 5444 return; |
| 5444 } | 5445 } |
| 5445 | 5446 |
| 5446 uint8 flags = 0; | 5447 uint8_t flags = 0; |
| 5447 do { | 5448 do { |
| 5448 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5449 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5449 | 5450 |
| 5450 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5451 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5451 testing::StrictMock<test::MockDebugVisitor> debug_visitor; | 5452 testing::StrictMock<test::MockDebugVisitor> debug_visitor; |
| 5452 SpdyFramer framer(spdy_version_); | 5453 SpdyFramer framer(spdy_version_); |
| 5453 framer.set_visitor(&visitor); | 5454 framer.set_visitor(&visitor); |
| 5454 framer.set_debug_visitor(&debug_visitor); | 5455 framer.set_debug_visitor(&debug_visitor); |
| 5455 | 5456 |
| 5456 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _)); | 5457 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _)); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5525 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, false, false)); | 5526 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, false, false)); |
| 5526 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); | 5527 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); |
| 5527 | 5528 |
| 5528 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize()); | 5529 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize()); |
| 5529 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 5530 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 5530 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 5531 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 5531 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 5532 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 5532 } | 5533 } |
| 5533 | 5534 |
| 5534 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { | 5535 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { |
| 5535 const uint32 kId = 0x020304; | 5536 const uint32_t kId = 0x020304; |
| 5536 const uint32 kFlags = 0x01; | 5537 const uint32_t kFlags = 0x01; |
| 5537 const uint32 kWireFormat = | 5538 const uint32_t kWireFormat = |
| 5538 base::HostToNet32(IsSpdy2() ? 0x04030201 : 0x01020304); | 5539 base::HostToNet32(IsSpdy2() ? 0x04030201 : 0x01020304); |
| 5539 | 5540 |
| 5540 SettingsFlagsAndId id_and_flags = | 5541 SettingsFlagsAndId id_and_flags = |
| 5541 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); | 5542 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); |
| 5542 EXPECT_EQ(kId, id_and_flags.id()); | 5543 EXPECT_EQ(kId, id_and_flags.id()); |
| 5543 EXPECT_EQ(kFlags, id_and_flags.flags()); | 5544 EXPECT_EQ(kFlags, id_and_flags.flags()); |
| 5544 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); | 5545 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); |
| 5545 } | 5546 } |
| 5546 | 5547 |
| 5547 // Test handling of a RST_STREAM with out-of-bounds status codes. | 5548 // Test handling of a RST_STREAM with out-of-bounds status codes. |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6067 | 6068 |
| 6068 EXPECT_EQ(1, visitor->data_frame_count_); | 6069 EXPECT_EQ(1, visitor->data_frame_count_); |
| 6069 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); | 6070 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); |
| 6070 EXPECT_EQ(0, visitor->headers_frame_count_); | 6071 EXPECT_EQ(0, visitor->headers_frame_count_); |
| 6071 } | 6072 } |
| 6072 } | 6073 } |
| 6073 | 6074 |
| 6074 } // namespace test | 6075 } // namespace test |
| 6075 | 6076 |
| 6076 } // namespace net | 6077 } // namespace net |
| OLD | NEW |