| 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 |