| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/hpack/hpack_decoder.h" | 5 #include "net/spdy/core/hpack/hpack_decoder.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "net/spdy/chromium/spdy_flags.h" | 10 #include "net/spdy/chromium/spdy_flags.h" |
| 11 #include "net/spdy/core/hpack/hpack_encoder.h" | 11 #include "net/spdy/core/hpack/hpack_encoder.h" |
| 12 #include "net/spdy/core/hpack/hpack_input_stream.h" | 12 #include "net/spdy/core/hpack/hpack_input_stream.h" |
| 13 #include "net/spdy/core/hpack/hpack_output_stream.h" | 13 #include "net/spdy/core/hpack/hpack_output_stream.h" |
| 14 #include "net/spdy/core/spdy_protocol.h" | 14 #include "net/spdy/core/spdy_protocol.h" |
| 15 #include "net/spdy/core/spdy_test_utils.h" | 15 #include "net/spdy/core/spdy_test_utils.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 18 |
| 19 namespace net { | 19 namespace net { |
| 20 namespace test { | 20 namespace test { |
| 21 | 21 |
| 22 class HpackDecoderPeer { | 22 class HpackDecoderPeer { |
| 23 public: | 23 public: |
| 24 explicit HpackDecoderPeer(HpackDecoder* decoder) : decoder_(decoder) {} | 24 explicit HpackDecoderPeer(HpackDecoder* decoder) : decoder_(decoder) {} |
| 25 | 25 |
| 26 void HandleHeaderRepresentation(SpdyStringPiece name, SpdyStringPiece value) { | 26 void HandleHeaderRepresentation(SpdyStringPiece name, SpdyStringPiece value) { |
| 27 decoder_->HandleHeaderRepresentation(name, value); | 27 decoder_->HandleHeaderRepresentation(name, value); |
| 28 } | 28 } |
| 29 |
| 29 bool DecodeNextName(HpackInputStream* in, SpdyStringPiece* out) { | 30 bool DecodeNextName(HpackInputStream* in, SpdyStringPiece* out) { |
| 30 return decoder_->DecodeNextName(in, out); | 31 return decoder_->DecodeNextName(in, out); |
| 31 } | 32 } |
| 33 |
| 32 HpackHeaderTable* header_table() { return &decoder_->header_table_; } | 34 HpackHeaderTable* header_table() { return &decoder_->header_table_; } |
| 33 | 35 |
| 34 bool DecodeNextStringLiteral(HpackInputStream* in, | 36 bool DecodeNextStringLiteral(HpackInputStream* in, |
| 35 bool is_header_key, | 37 bool is_header_key, |
| 36 SpdyStringPiece* str) { | 38 SpdyStringPiece* str) { |
| 37 return decoder_->DecodeNextStringLiteral(in, is_header_key, str); | 39 return decoder_->DecodeNextStringLiteral(in, is_header_key, str); |
| 38 } | 40 } |
| 39 | 41 |
| 40 const SpdyString& headers_block_buffer() const { | 42 const SpdyString& headers_block_buffer() const { |
| 41 return decoder_->headers_block_buffer_; | 43 return decoder_->headers_block_buffer_; |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 // | Huffman encoded: | 643 // | Huffman encoded: |
| 642 // 25a8 49e9 5ba9 7d7f | %.I.[.}. | 644 // 25a8 49e9 5ba9 7d7f | %.I.[.}. |
| 643 // | Decoded: | 645 // | Decoded: |
| 644 // | custom-key | 646 // | custom-key |
| 645 // 89 | Literal value (len = 12) | 647 // 89 | Literal value (len = 12) |
| 646 // | Huffman encoded: | 648 // | Huffman encoded: |
| 647 // 25a8 49e9 5bb8 e8b4 bf | %.I.[.... | 649 // 25a8 49e9 5bb8 e8b4 bf | %.I.[.... |
| 648 // | Decoded: | 650 // | Decoded: |
| 649 // | custom-value | 651 // | custom-value |
| 650 // | -> custom-key: custom-value | 652 // | -> custom-key: custom-value |
| 651 SpdyString third = a2b_hex( | 653 SpdyString third = |
| 652 "828785bf408825a849e95ba97d7f89" | 654 a2b_hex("828785bf408825a849e95ba97d7f8925a849e95bb8e8b4bf"); |
| 653 "25a849e95bb8e8b4bf"); | |
| 654 const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third); | 655 const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third); |
| 655 | 656 |
| 656 EXPECT_THAT(third_header_set, | 657 EXPECT_THAT(third_header_set, |
| 657 ElementsAre(Pair(":method", "GET"), Pair(":scheme", "https"), | 658 ElementsAre(Pair(":method", "GET"), Pair(":scheme", "https"), |
| 658 Pair(":path", "/index.html"), | 659 Pair(":path", "/index.html"), |
| 659 Pair(":authority", "www.example.com"), | 660 Pair(":authority", "www.example.com"), |
| 660 Pair("custom-key", "custom-value"))); | 661 Pair("custom-key", "custom-value"))); |
| 661 | 662 |
| 662 expectEntry(62, 54, "custom-key", "custom-value"); | 663 expectEntry(62, 54, "custom-key", "custom-value"); |
| 663 expectEntry(63, 53, "cache-control", "no-cache"); | 664 expectEntry(63, 53, "cache-control", "no-cache"); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU;" | 844 "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU;" |
| 844 " max-age=3600; version=1"); | 845 " max-age=3600; version=1"); |
| 845 expectEntry(63, 52, "content-encoding", "gzip"); | 846 expectEntry(63, 52, "content-encoding", "gzip"); |
| 846 expectEntry(64, 65, "date", "Mon, 21 Oct 2013 20:13:22 GMT"); | 847 expectEntry(64, 65, "date", "Mon, 21 Oct 2013 20:13:22 GMT"); |
| 847 EXPECT_EQ(215u, decoder_peer_.header_table()->size()); | 848 EXPECT_EQ(215u, decoder_peer_.header_table()->size()); |
| 848 } | 849 } |
| 849 | 850 |
| 850 } // namespace | 851 } // namespace |
| 851 } // namespace test | 852 } // namespace test |
| 852 } // namespace net | 853 } // namespace net |
| OLD | NEW |