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/core/spdy_framer.h" | 5 #include "net/spdy/core/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> |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "base/strings/string_number_conversions.h" | 22 #include "base/strings/string_number_conversions.h" |
23 #include "net/quic/platform/api/quic_flags.h" | 23 #include "net/quic/platform/api/quic_flags.h" |
24 #include "net/spdy/chromium/spdy_flags.h" | 24 #include "net/spdy/chromium/spdy_flags.h" |
25 #include "net/spdy/core/array_output_buffer.h" | 25 #include "net/spdy/core/array_output_buffer.h" |
26 #include "net/spdy/core/hpack/hpack_constants.h" | 26 #include "net/spdy/core/hpack/hpack_constants.h" |
27 #include "net/spdy/core/mock_spdy_framer_visitor.h" | 27 #include "net/spdy/core/mock_spdy_framer_visitor.h" |
28 #include "net/spdy/core/spdy_frame_builder.h" | 28 #include "net/spdy/core/spdy_frame_builder.h" |
29 #include "net/spdy/core/spdy_frame_reader.h" | 29 #include "net/spdy/core/spdy_frame_reader.h" |
30 #include "net/spdy/core/spdy_protocol.h" | 30 #include "net/spdy/core/spdy_protocol.h" |
31 #include "net/spdy/core/spdy_test_utils.h" | 31 #include "net/spdy/core/spdy_test_utils.h" |
| 32 #include "net/spdy/platform/api/spdy_ptr_util.h" |
32 #include "testing/gmock/include/gmock/gmock.h" | 33 #include "testing/gmock/include/gmock/gmock.h" |
33 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
34 #include "testing/platform_test.h" | 35 #include "testing/platform_test.h" |
35 | 36 |
36 using testing::_; | 37 using testing::_; |
37 | 38 |
38 namespace net { | 39 namespace net { |
39 | 40 |
40 namespace test { | 41 namespace test { |
41 | 42 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 DecompressionVisitor() : finished_(false) {} | 89 DecompressionVisitor() : finished_(false) {} |
89 | 90 |
90 const SpdyFrameIR& GetFrame() const { | 91 const SpdyFrameIR& GetFrame() const { |
91 CHECK(finished_); | 92 CHECK(finished_); |
92 return *frame_; | 93 return *frame_; |
93 } | 94 } |
94 | 95 |
95 SpdyHeadersHandlerInterface* OnHeaderFrameStart( | 96 SpdyHeadersHandlerInterface* OnHeaderFrameStart( |
96 SpdyStreamId stream_id) override { | 97 SpdyStreamId stream_id) override { |
97 if (headers_handler_ == nullptr) { | 98 if (headers_handler_ == nullptr) { |
98 headers_handler_ = base::MakeUnique<TestHeadersHandler>(); | 99 headers_handler_ = SpdyMakeUnique<TestHeadersHandler>(); |
99 } | 100 } |
100 return headers_handler_.get(); | 101 return headers_handler_.get(); |
101 } | 102 } |
102 | 103 |
103 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { | 104 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { |
104 CHECK(!finished_); | 105 CHECK(!finished_); |
105 frame_->set_header_block(headers_handler_->decoded_block().Clone()); | 106 frame_->set_header_block(headers_handler_->decoded_block().Clone()); |
106 finished_ = true; | 107 finished_ = true; |
107 if (end_headers) { | 108 if (end_headers) { |
108 headers_handler_.reset(); | 109 headers_handler_.reset(); |
109 } | 110 } |
110 } | 111 } |
111 | 112 |
112 void OnHeaders(SpdyStreamId stream_id, | 113 void OnHeaders(SpdyStreamId stream_id, |
113 bool has_priority, | 114 bool has_priority, |
114 int weight, | 115 int weight, |
115 SpdyStreamId parent_stream_id, | 116 SpdyStreamId parent_stream_id, |
116 bool exclusive, | 117 bool exclusive, |
117 bool fin, | 118 bool fin, |
118 bool end) override { | 119 bool end) override { |
119 auto headers = base::MakeUnique<SpdyHeadersIR>(stream_id); | 120 auto headers = SpdyMakeUnique<SpdyHeadersIR>(stream_id); |
120 headers->set_has_priority(has_priority); | 121 headers->set_has_priority(has_priority); |
121 headers->set_weight(weight); | 122 headers->set_weight(weight); |
122 headers->set_parent_stream_id(parent_stream_id); | 123 headers->set_parent_stream_id(parent_stream_id); |
123 headers->set_exclusive(exclusive); | 124 headers->set_exclusive(exclusive); |
124 headers->set_fin(fin); | 125 headers->set_fin(fin); |
125 frame_ = std::move(headers); | 126 frame_ = std::move(headers); |
126 } | 127 } |
127 | 128 |
128 void OnPushPromise(SpdyStreamId stream_id, | 129 void OnPushPromise(SpdyStreamId stream_id, |
129 SpdyStreamId promised_stream_id, | 130 SpdyStreamId promised_stream_id, |
130 bool end) override { | 131 bool end) override { |
131 frame_ = | 132 frame_ = SpdyMakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id); |
132 base::MakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id); | |
133 } | 133 } |
134 | 134 |
135 // TODO(birenroy): Add support for CONTINUATION. | 135 // TODO(birenroy): Add support for CONTINUATION. |
136 void OnContinuation(SpdyStreamId stream_id, bool end) override { | 136 void OnContinuation(SpdyStreamId stream_id, bool end) override { |
137 LOG(FATAL); | 137 LOG(FATAL); |
138 } | 138 } |
139 | 139 |
140 // All other methods just LOG(FATAL). | 140 // All other methods just LOG(FATAL). |
141 void OnError(SpdyFramer* framer) override { LOG(FATAL); } | 141 void OnError(SpdyFramer* framer) override { LOG(FATAL); } |
142 void OnDataFrameHeader(SpdyStreamId stream_id, | 142 void OnDataFrameHeader(SpdyStreamId stream_id, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 return framer->GetNumberRequiredContinuationFrames(size); | 228 return framer->GetNumberRequiredContinuationFrames(size); |
229 } | 229 } |
230 static void SetError(SpdyFramer* framer, SpdyFramer::SpdyFramerError error) { | 230 static void SetError(SpdyFramer* framer, SpdyFramer::SpdyFramerError error) { |
231 framer->set_error(error); | 231 framer->set_error(error); |
232 } | 232 } |
233 | 233 |
234 // TODO(dahollings): Remove these methods when deprecating non-incremental | 234 // TODO(dahollings): Remove these methods when deprecating non-incremental |
235 // header serialization path. | 235 // header serialization path. |
236 static std::unique_ptr<SpdyHeadersIR> CloneSpdyHeadersIR( | 236 static std::unique_ptr<SpdyHeadersIR> CloneSpdyHeadersIR( |
237 const SpdyHeadersIR& headers) { | 237 const SpdyHeadersIR& headers) { |
238 auto newHeaders = base::MakeUnique<SpdyHeadersIR>( | 238 auto newHeaders = SpdyMakeUnique<SpdyHeadersIR>( |
239 headers.stream_id(), headers.header_block().Clone()); | 239 headers.stream_id(), headers.header_block().Clone()); |
240 newHeaders->set_fin(headers.fin()); | 240 newHeaders->set_fin(headers.fin()); |
241 newHeaders->set_has_priority(headers.has_priority()); | 241 newHeaders->set_has_priority(headers.has_priority()); |
242 newHeaders->set_weight(headers.weight()); | 242 newHeaders->set_weight(headers.weight()); |
243 newHeaders->set_parent_stream_id(headers.parent_stream_id()); | 243 newHeaders->set_parent_stream_id(headers.parent_stream_id()); |
244 newHeaders->set_exclusive(headers.exclusive()); | 244 newHeaders->set_exclusive(headers.exclusive()); |
245 if (headers.padded()) { | 245 if (headers.padded()) { |
246 newHeaders->set_padding_len(headers.padding_payload_len() + 1); | 246 newHeaders->set_padding_len(headers.padding_payload_len() + 1); |
247 } | 247 } |
248 newHeaders->set_end_headers(headers.end_headers()); | 248 newHeaders->set_end_headers(headers.end_headers()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 frame_list_buffer.Size() - size_before, false)); | 298 frame_list_buffer.Size() - size_before, false)); |
299 } | 299 } |
300 framer->debug_visitor_ = saved_debug_visitor; | 300 framer->debug_visitor_ = saved_debug_visitor; |
301 | 301 |
302 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); | 302 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); |
303 return serialized_headers_old_version; | 303 return serialized_headers_old_version; |
304 } | 304 } |
305 | 305 |
306 static std::unique_ptr<SpdyPushPromiseIR> CloneSpdyPushPromiseIR( | 306 static std::unique_ptr<SpdyPushPromiseIR> CloneSpdyPushPromiseIR( |
307 const SpdyPushPromiseIR& push_promise) { | 307 const SpdyPushPromiseIR& push_promise) { |
308 auto new_push_promise = base::MakeUnique<SpdyPushPromiseIR>( | 308 auto new_push_promise = SpdyMakeUnique<SpdyPushPromiseIR>( |
309 push_promise.stream_id(), push_promise.promised_stream_id(), | 309 push_promise.stream_id(), push_promise.promised_stream_id(), |
310 push_promise.header_block().Clone()); | 310 push_promise.header_block().Clone()); |
311 new_push_promise->set_fin(push_promise.fin()); | 311 new_push_promise->set_fin(push_promise.fin()); |
312 if (push_promise.padded()) { | 312 if (push_promise.padded()) { |
313 new_push_promise->set_padding_len(push_promise.padding_payload_len() + 1); | 313 new_push_promise->set_padding_len(push_promise.padding_payload_len() + 1); |
314 } | 314 } |
315 new_push_promise->set_end_headers(push_promise.end_headers()); | 315 new_push_promise->set_end_headers(push_promise.end_headers()); |
316 return new_push_promise; | 316 return new_push_promise; |
317 } | 317 } |
318 | 318 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 | 450 |
451 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override { | 451 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override { |
452 VLOG(1) << "OnStreamPadding(" << stream_id << ", " << len << ")\n"; | 452 VLOG(1) << "OnStreamPadding(" << stream_id << ", " << len << ")\n"; |
453 EXPECT_EQ(header_stream_id_, stream_id); | 453 EXPECT_EQ(header_stream_id_, stream_id); |
454 data_bytes_ += len; | 454 data_bytes_ += len; |
455 } | 455 } |
456 | 456 |
457 SpdyHeadersHandlerInterface* OnHeaderFrameStart( | 457 SpdyHeadersHandlerInterface* OnHeaderFrameStart( |
458 SpdyStreamId stream_id) override { | 458 SpdyStreamId stream_id) override { |
459 if (headers_handler_ == nullptr) { | 459 if (headers_handler_ == nullptr) { |
460 headers_handler_ = base::MakeUnique<TestHeadersHandler>(); | 460 headers_handler_ = SpdyMakeUnique<TestHeadersHandler>(); |
461 } | 461 } |
462 return headers_handler_.get(); | 462 return headers_handler_.get(); |
463 } | 463 } |
464 | 464 |
465 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { | 465 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { |
466 CHECK(headers_handler_ != nullptr); | 466 CHECK(headers_handler_ != nullptr); |
467 headers_ = headers_handler_->decoded_block().Clone(); | 467 headers_ = headers_handler_->decoded_block().Clone(); |
468 header_bytes_received_ = headers_handler_->header_bytes_parsed(); | 468 header_bytes_received_ = headers_handler_->header_bytes_parsed(); |
469 if (end_headers) { | 469 if (end_headers) { |
470 headers_handler_.reset(); | 470 headers_handler_.reset(); |
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 | 1246 |
1247 // Test that if we receive a CONTINUATION with stream ID zero, we signal an | 1247 // Test that if we receive a CONTINUATION with stream ID zero, we signal an |
1248 // SPDY_INVALID_STREAM_ID. | 1248 // SPDY_INVALID_STREAM_ID. |
1249 TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) { | 1249 TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) { |
1250 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 1250 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
1251 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 1251 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
1252 framer.set_visitor(&visitor); | 1252 framer.set_visitor(&visitor); |
1253 | 1253 |
1254 SpdyContinuationIR continuation(0); | 1254 SpdyContinuationIR continuation(0); |
1255 auto some_nonsense_encoding = | 1255 auto some_nonsense_encoding = |
1256 base::MakeUnique<SpdyString>("some nonsense encoding"); | 1256 SpdyMakeUnique<SpdyString>("some nonsense encoding"); |
1257 continuation.take_encoding(std::move(some_nonsense_encoding)); | 1257 continuation.take_encoding(std::move(some_nonsense_encoding)); |
1258 continuation.set_end_headers(true); | 1258 continuation.set_end_headers(true); |
1259 SpdySerializedFrame frame(framer.SerializeContinuation(continuation)); | 1259 SpdySerializedFrame frame(framer.SerializeContinuation(continuation)); |
1260 if (use_output_) { | 1260 if (use_output_) { |
1261 ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_)); | 1261 ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_)); |
1262 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 1262 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
1263 } | 1263 } |
1264 | 1264 |
1265 // We shouldn't have to read the whole frame before we signal an error. | 1265 // We shouldn't have to read the whole frame before we signal an error. |
1266 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); | 1266 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); |
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2519 0x03, // Name Len: 3 | 2519 0x03, // Name Len: 3 |
2520 0x66, 0x6f, 0x6f, // foo | 2520 0x66, 0x6f, 0x6f, // foo |
2521 0x03, // Value Len: 3 | 2521 0x03, // Value Len: 3 |
2522 0x62, 0x61, 0x72, // bar | 2522 0x62, 0x61, 0x72, // bar |
2523 }; | 2523 }; |
2524 // frame-format on | 2524 // frame-format on |
2525 | 2525 |
2526 SpdyHeaderBlock header_block; | 2526 SpdyHeaderBlock header_block; |
2527 header_block["bar"] = "foo"; | 2527 header_block["bar"] = "foo"; |
2528 header_block["foo"] = "bar"; | 2528 header_block["foo"] = "bar"; |
2529 auto buffer = base::MakeUnique<SpdyString>(); | 2529 auto buffer = SpdyMakeUnique<SpdyString>(); |
2530 HpackEncoder encoder(ObtainHpackHuffmanTable()); | 2530 HpackEncoder encoder(ObtainHpackHuffmanTable()); |
2531 encoder.DisableCompression(); | 2531 encoder.DisableCompression(); |
2532 encoder.EncodeHeaderSet(header_block, buffer.get()); | 2532 encoder.EncodeHeaderSet(header_block, buffer.get()); |
2533 | 2533 |
2534 SpdyContinuationIR continuation(42); | 2534 SpdyContinuationIR continuation(42); |
2535 continuation.take_encoding(std::move(buffer)); | 2535 continuation.take_encoding(std::move(buffer)); |
2536 continuation.set_end_headers(true); | 2536 continuation.set_end_headers(true); |
2537 | 2537 |
2538 SpdySerializedFrame frame(framer.SerializeContinuation(continuation)); | 2538 SpdySerializedFrame frame(framer.SerializeContinuation(continuation)); |
2539 if (use_output_) { | 2539 if (use_output_) { |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2801 control_frame.size()); | 2801 control_frame.size()); |
2802 EXPECT_TRUE(visitor.header_buffer_valid_); | 2802 EXPECT_TRUE(visitor.header_buffer_valid_); |
2803 EXPECT_EQ(0, visitor.error_count_); | 2803 EXPECT_EQ(0, visitor.error_count_); |
2804 EXPECT_EQ(1, visitor.headers_frame_count_); | 2804 EXPECT_EQ(1, visitor.headers_frame_count_); |
2805 EXPECT_EQ(1, visitor.continuation_count_); | 2805 EXPECT_EQ(1, visitor.continuation_count_); |
2806 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2806 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2807 } | 2807 } |
2808 | 2808 |
2809 TEST_P(SpdyFramerTest, MultipleContinuationFramesWithIterator) { | 2809 TEST_P(SpdyFramerTest, MultipleContinuationFramesWithIterator) { |
2810 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 2810 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
2811 auto headers = base::MakeUnique<SpdyHeadersIR>(1); | 2811 auto headers = SpdyMakeUnique<SpdyHeadersIR>(/* stream_id = */ 1); |
2812 headers->set_padding_len(256); | 2812 headers->set_padding_len(256); |
2813 | 2813 |
2814 // Exact payload length will change with HPACK, but this should be long | 2814 // Exact payload length will change with HPACK, but this should be long |
2815 // enough to cause an overflow. | 2815 // enough to cause an overflow. |
2816 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); | 2816 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); |
2817 SpdyString big_valuex(kBigValueSize, 'x'); | 2817 SpdyString big_valuex(kBigValueSize, 'x'); |
2818 headers->SetHeader("aa", big_valuex); | 2818 headers->SetHeader("aa", big_valuex); |
2819 SpdyString big_valuez(kBigValueSize, 'z'); | 2819 SpdyString big_valuez(kBigValueSize, 'z'); |
2820 headers->SetHeader("bb", big_valuez); | 2820 headers->SetHeader("bb", big_valuez); |
2821 | 2821 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2867 EXPECT_EQ(0, visitor.error_count_); | 2867 EXPECT_EQ(0, visitor.error_count_); |
2868 EXPECT_EQ(1, visitor.headers_frame_count_); | 2868 EXPECT_EQ(1, visitor.headers_frame_count_); |
2869 EXPECT_EQ(2, visitor.continuation_count_); | 2869 EXPECT_EQ(2, visitor.continuation_count_); |
2870 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2870 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2871 | 2871 |
2872 EXPECT_FALSE(frame_it.HasNextFrame()); | 2872 EXPECT_FALSE(frame_it.HasNextFrame()); |
2873 } | 2873 } |
2874 | 2874 |
2875 TEST_P(SpdyFramerTest, PushPromiseFramesWithIterator) { | 2875 TEST_P(SpdyFramerTest, PushPromiseFramesWithIterator) { |
2876 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 2876 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
2877 auto push_promise = base::MakeUnique<SpdyPushPromiseIR>(1, 2); | 2877 auto push_promise = |
| 2878 SpdyMakeUnique<SpdyPushPromiseIR>(/* stream_id = */ 1, |
| 2879 /* promised_stream_id = */ 2); |
2878 push_promise->set_padding_len(256); | 2880 push_promise->set_padding_len(256); |
2879 | 2881 |
2880 // Exact payload length will change with HPACK, but this should be long | 2882 // Exact payload length will change with HPACK, but this should be long |
2881 // enough to cause an overflow. | 2883 // enough to cause an overflow. |
2882 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); | 2884 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); |
2883 SpdyString big_valuex(kBigValueSize, 'x'); | 2885 SpdyString big_valuex(kBigValueSize, 'x'); |
2884 push_promise->SetHeader("aa", big_valuex); | 2886 push_promise->SetHeader("aa", big_valuex); |
2885 SpdyString big_valuez(kBigValueSize, 'z'); | 2887 SpdyString big_valuez(kBigValueSize, 'z'); |
2886 push_promise->SetHeader("bb", big_valuez); | 2888 push_promise->SetHeader("bb", big_valuez); |
2887 | 2889 |
(...skipping 1805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4693 visitor.framer_.spdy_framer_error()) | 4695 visitor.framer_.spdy_framer_error()) |
4694 << SpdyFramer::SpdyFramerErrorToString( | 4696 << SpdyFramer::SpdyFramerErrorToString( |
4695 visitor.framer_.spdy_framer_error()); | 4697 visitor.framer_.spdy_framer_error()); |
4696 } | 4698 } |
4697 | 4699 |
4698 // Test that SpdyFramer processes, by default, all passed input in one call | 4700 // Test that SpdyFramer processes, by default, all passed input in one call |
4699 // to ProcessInput (i.e. will not be calling set_process_single_input_frame()). | 4701 // to ProcessInput (i.e. will not be calling set_process_single_input_frame()). |
4700 TEST_P(SpdyFramerTest, ProcessAllInput) { | 4702 TEST_P(SpdyFramerTest, ProcessAllInput) { |
4701 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 4703 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
4702 auto visitor = | 4704 auto visitor = |
4703 base::MakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION); | 4705 SpdyMakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION); |
4704 framer.set_visitor(visitor.get()); | 4706 framer.set_visitor(visitor.get()); |
4705 | 4707 |
4706 // Create two input frames. | 4708 // Create two input frames. |
4707 SpdyHeadersIR headers(1); | 4709 SpdyHeadersIR headers(1); |
4708 headers.SetHeader("alpha", "beta"); | 4710 headers.SetHeader("alpha", "beta"); |
4709 headers.SetHeader("gamma", "charlie"); | 4711 headers.SetHeader("gamma", "charlie"); |
4710 headers.SetHeader("cookie", "key1=value1; key2=value2"); | 4712 headers.SetHeader("cookie", "key1=value1; key2=value2"); |
4711 SpdySerializedFrame headers_frame(SpdyFramerPeer::SerializeHeaders( | 4713 SpdySerializedFrame headers_frame(SpdyFramerPeer::SerializeHeaders( |
4712 &framer, headers, use_output_ ? &output_ : nullptr)); | 4714 &framer, headers, use_output_ ? &output_ : nullptr)); |
4713 | 4715 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4779 input_buffer.append(frame2.data(), frame2_size); | 4781 input_buffer.append(frame2.data(), frame2_size); |
4780 | 4782 |
4781 const char* buf = input_buffer.data(); | 4783 const char* buf = input_buffer.data(); |
4782 const size_t buf_size = input_buffer.size(); | 4784 const size_t buf_size = input_buffer.size(); |
4783 | 4785 |
4784 VLOG(1) << "buf_size = " << buf_size; | 4786 VLOG(1) << "buf_size = " << buf_size; |
4785 | 4787 |
4786 for (size_t first_size = 0; first_size <= buf_size; ++first_size) { | 4788 for (size_t first_size = 0; first_size <= buf_size; ++first_size) { |
4787 VLOG(1) << "first_size = " << first_size; | 4789 VLOG(1) << "first_size = " << first_size; |
4788 auto visitor = | 4790 auto visitor = |
4789 base::MakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION); | 4791 SpdyMakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION); |
4790 framer.set_visitor(visitor.get()); | 4792 framer.set_visitor(visitor.get()); |
4791 | 4793 |
4792 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 4794 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
4793 | 4795 |
4794 size_t processed_first = framer.ProcessInput(buf, first_size); | 4796 size_t processed_first = framer.ProcessInput(buf, first_size); |
4795 if (first_size < frame1_size) { | 4797 if (first_size < frame1_size) { |
4796 EXPECT_EQ(first_size, processed_first); | 4798 EXPECT_EQ(first_size, processed_first); |
4797 | 4799 |
4798 if (first_size == 0) { | 4800 if (first_size == 0) { |
4799 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 4801 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
(...skipping 22 matching lines...) Expand all Loading... |
4822 | 4824 |
4823 EXPECT_EQ(1, visitor->data_frame_count_); | 4825 EXPECT_EQ(1, visitor->data_frame_count_); |
4824 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); | 4826 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); |
4825 EXPECT_EQ(0, visitor->headers_frame_count_); | 4827 EXPECT_EQ(0, visitor->headers_frame_count_); |
4826 } | 4828 } |
4827 } | 4829 } |
4828 | 4830 |
4829 } // namespace test | 4831 } // namespace test |
4830 | 4832 |
4831 } // namespace net | 4833 } // namespace net |
OLD | NEW |