| 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 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 if (spdy_version_ <= SPDY3) { | 832 if (spdy_version_ <= SPDY3) { |
| 833 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | 833 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); |
| 834 frame.WriteUInt32(3); // stream_id | 834 frame.WriteUInt32(3); // stream_id |
| 835 frame.WriteUInt32(0); // associated stream id | 835 frame.WriteUInt32(0); // associated stream id |
| 836 frame.WriteUInt16(0); // Priority. | 836 frame.WriteUInt16(0); // Priority. |
| 837 } else { | 837 } else { |
| 838 frame.BeginNewFrame(framer, | 838 frame.BeginNewFrame(framer, |
| 839 HEADERS, | 839 HEADERS, |
| 840 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, | 840 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, |
| 841 3); | 841 3); |
| 842 frame.WriteUInt32(framer.GetHighestPriority()); | 842 frame.WriteUInt32(0); // Priority exclusivity and dependent stream. |
| 843 frame.WriteUInt8(255); // Priority weight. |
| 843 } | 844 } |
| 844 | 845 |
| 845 string value("value1\0value2", 13); | 846 string value("value1\0value2", 13); |
| 846 if (IsSpdy2()) { | 847 if (IsSpdy2()) { |
| 847 frame.WriteUInt16(1); // Number of headers. | 848 frame.WriteUInt16(1); // Number of headers. |
| 848 frame.WriteString("name"); | 849 frame.WriteString("name"); |
| 849 frame.WriteString(value); | 850 frame.WriteString(value); |
| 850 } else if (spdy_version_ > SPDY3) { | 851 } else if (spdy_version_ > SPDY3) { |
| 851 // TODO(jgraettinger): If this pattern appears again, move to test class. | 852 // TODO(jgraettinger): If this pattern appears again, move to test class. |
| 852 std::map<string, string> header_set; | 853 std::map<string, string> header_set; |
| (...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1869 0x00, 0x02, 0x00, 0x00, | 1870 0x00, 0x02, 0x00, 0x00, |
| 1870 0x00, 0x03, 'b', 'a', | 1871 0x00, 0x03, 'b', 'a', |
| 1871 'r', 0x00, 0x00, 0x00, | 1872 'r', 0x00, 0x00, 0x00, |
| 1872 0x03, 'f', 'o', 'o', | 1873 0x03, 'f', 'o', 'o', |
| 1873 0x00, 0x00, 0x00, 0x03, | 1874 0x00, 0x00, 0x00, 0x03, |
| 1874 'f', 'o', 'o', 0x00, | 1875 'f', 'o', 'o', 0x00, |
| 1875 0x00, 0x00, 0x03, 'b', | 1876 0x00, 0x00, 0x03, 'b', |
| 1876 'a', 'r' | 1877 'a', 'r' |
| 1877 }; | 1878 }; |
| 1878 const unsigned char kV4FrameData[] = { | 1879 const unsigned char kV4FrameData[] = { |
| 1879 0x00, 0x16, 0x01, 0x24, // HEADERS: PRIORITY | END_HEADERS | 1880 0x00, 0x17, 0x01, 0x24, // HEADERS: PRIORITY | END_HEADERS |
| 1880 0x00, 0x00, 0x00, 0x01, // Stream 1 | 1881 0x00, 0x00, 0x00, 0x01, // Stream 1 |
| 1881 0x00, 0x00, 0x00, 0x07, // Priority 7 | 1882 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 0. |
| 1882 0x00, 0x03, 0x62, 0x61, // @.ba | 1883 0x00, 0x00, 0x03, 0x62, |
| 1883 0x72, 0x03, 0x66, 0x6f, // r.fo | 1884 0x61, 0x72, 0x03, 0x66, |
| 1884 0x6f, 0x00, 0x03, 0x66, // o@.f | 1885 0x6f, 0x6f, 0x00, 0x03, |
| 1885 0x6f, 0x6f, 0x03, 0x62, // oo.b | 1886 0x66, 0x6f, 0x6f, 0x03, |
| 1886 0x61, 0x72, // ar | 1887 0x62, 0x61, 0x72, |
| 1887 }; | 1888 }; |
| 1888 SpdySynStreamIR syn_stream(1); | 1889 SpdySynStreamIR syn_stream(1); |
| 1889 syn_stream.set_priority(framer.GetLowestPriority()); | 1890 syn_stream.set_priority(framer.GetLowestPriority()); |
| 1890 syn_stream.SetHeader("bar", "foo"); | 1891 syn_stream.SetHeader("bar", "foo"); |
| 1891 syn_stream.SetHeader("foo", "bar"); | 1892 syn_stream.SetHeader("foo", "bar"); |
| 1892 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 1893 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 1893 if (IsSpdy2()) { | 1894 if (IsSpdy2()) { |
| 1894 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 1895 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| 1895 } else if (IsSpdy3()) { | 1896 } else if (IsSpdy3()) { |
| 1896 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 1897 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1924 0x00, 0x00, 0x00, 0x00, | 1925 0x00, 0x00, 0x00, 0x00, |
| 1925 0x00, 0x02, 0x00, 0x00, | 1926 0x00, 0x02, 0x00, 0x00, |
| 1926 0x00, 0x00, 0x00, 0x00, | 1927 0x00, 0x00, 0x00, 0x00, |
| 1927 0x00, 0x03, 'f', 'o', | 1928 0x00, 0x03, 'f', 'o', |
| 1928 'o', 0x00, 0x00, 0x00, | 1929 'o', 0x00, 0x00, 0x00, |
| 1929 0x03, 'f', 'o', 'o', | 1930 0x03, 'f', 'o', 'o', |
| 1930 0x00, 0x00, 0x00, 0x03, | 1931 0x00, 0x00, 0x00, 0x03, |
| 1931 'b', 'a', 'r' | 1932 'b', 'a', 'r' |
| 1932 }; | 1933 }; |
| 1933 const unsigned char kV4FrameData[] = { | 1934 const unsigned char kV4FrameData[] = { |
| 1934 0x00, 0x13, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS | 1935 0x00, 0x14, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS |
| 1935 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff | 1936 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
| 1936 0x00, 0x00, 0x00, 0x00, // Priority 0 | 1937 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 255. |
| 1937 0x00, 0x00, 0x03, 0x66, // @..f | 1938 0xff, 0x00, 0x00, 0x03, |
| 1938 0x6f, 0x6f, 0x00, 0x03, // oo@. | 1939 0x66, 0x6f, 0x6f, 0x00, |
| 1939 0x66, 0x6f, 0x6f, 0x03, // foo. | 1940 0x03, 0x66, 0x6f, 0x6f, |
| 1940 0x62, 0x61, 0x72, // bar | 1941 0x03, 0x62, 0x61, 0x72, |
| 1941 }; | 1942 }; |
| 1942 SpdySynStreamIR syn_stream(0x7fffffff); | 1943 SpdySynStreamIR syn_stream(0x7fffffff); |
| 1943 syn_stream.set_associated_to_stream_id(0x7fffffff); | 1944 syn_stream.set_associated_to_stream_id(0x7fffffff); |
| 1944 syn_stream.set_priority(framer.GetHighestPriority()); | 1945 syn_stream.set_priority(framer.GetHighestPriority()); |
| 1945 syn_stream.set_fin(true); | 1946 syn_stream.set_fin(true); |
| 1946 syn_stream.SetHeader("", "foo"); | 1947 syn_stream.SetHeader("", "foo"); |
| 1947 syn_stream.SetHeader("foo", "bar"); | 1948 syn_stream.SetHeader("foo", "bar"); |
| 1948 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 1949 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 1949 if (IsSpdy2()) { | 1950 if (IsSpdy2()) { |
| 1950 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 1951 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1981 kPri, 0x00, 0x00, 0x00, | 1982 kPri, 0x00, 0x00, 0x00, |
| 1982 0x00, 0x02, 0x00, 0x00, | 1983 0x00, 0x02, 0x00, 0x00, |
| 1983 0x00, 0x03, 'b', 'a', | 1984 0x00, 0x03, 'b', 'a', |
| 1984 'r', 0x00, 0x00, 0x00, | 1985 'r', 0x00, 0x00, 0x00, |
| 1985 0x03, 'f', 'o', 'o', | 1986 0x03, 'f', 'o', 'o', |
| 1986 0x00, 0x00, 0x00, 0x03, | 1987 0x00, 0x00, 0x00, 0x03, |
| 1987 'f', 'o', 'o', 0x00, | 1988 'f', 'o', 'o', 0x00, |
| 1988 0x00, 0x00, 0x00 | 1989 0x00, 0x00, 0x00 |
| 1989 }; | 1990 }; |
| 1990 const unsigned char kV4FrameData[] = { | 1991 const unsigned char kV4FrameData[] = { |
| 1991 0x00, 0x13, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS | 1992 0x00, 0x14, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS |
| 1992 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff | 1993 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
| 1993 0x00, 0x00, 0x00, 0x01, // Priority 1 | 1994 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 219. |
| 1994 0x00, 0x03, 0x62, 0x61, // @.ba | 1995 0xdb, 0x00, 0x03, 0x62, |
| 1995 0x72, 0x03, 0x66, 0x6f, // r.fo | 1996 0x61, 0x72, 0x03, 0x66, |
| 1996 0x6f, 0x00, 0x03, 0x66, // o@.f | 1997 0x6f, 0x6f, 0x00, 0x03, |
| 1997 0x6f, 0x6f, 0x00, // oo. | 1998 0x66, 0x6f, 0x6f, 0x00, |
| 1998 }; | 1999 }; |
| 1999 SpdySynStreamIR syn_stream(0x7fffffff); | 2000 SpdySynStreamIR syn_stream(0x7fffffff); |
| 2000 syn_stream.set_associated_to_stream_id(0x7fffffff); | 2001 syn_stream.set_associated_to_stream_id(0x7fffffff); |
| 2001 syn_stream.set_priority(1); | 2002 syn_stream.set_priority(1); |
| 2002 syn_stream.set_fin(true); | 2003 syn_stream.set_fin(true); |
| 2003 syn_stream.SetHeader("bar", "foo"); | 2004 syn_stream.SetHeader("bar", "foo"); |
| 2004 syn_stream.SetHeader("foo", ""); | 2005 syn_stream.SetHeader("foo", ""); |
| 2005 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 2006 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 2006 if (IsSpdy2()) { | 2007 if (IsSpdy2()) { |
| 2007 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2008 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| (...skipping 3381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5389 | 5390 |
| 5390 TestSpdyVisitor visitor(spdy_version_); | 5391 TestSpdyVisitor visitor(spdy_version_); |
| 5391 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); | 5392 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); |
| 5392 | 5393 |
| 5393 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); | 5394 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); |
| 5394 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, | 5395 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, |
| 5395 visitor.framer_.error_code()) | 5396 visitor.framer_.error_code()) |
| 5396 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); | 5397 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); |
| 5397 } | 5398 } |
| 5398 | 5399 |
| 5400 TEST_P(SpdyFramerTest, PriorityWeightMapping) { |
| 5401 if (spdy_version_ <= SPDY3) { |
| 5402 return; |
| 5403 } |
| 5404 SpdyFramer framer(spdy_version_); |
| 5405 |
| 5406 EXPECT_EQ(255u, framer.MapPriorityToWeight(0)); |
| 5407 EXPECT_EQ(219u, framer.MapPriorityToWeight(1)); |
| 5408 EXPECT_EQ(182u, framer.MapPriorityToWeight(2)); |
| 5409 EXPECT_EQ(146u, framer.MapPriorityToWeight(3)); |
| 5410 EXPECT_EQ(109u, framer.MapPriorityToWeight(4)); |
| 5411 EXPECT_EQ(73u, framer.MapPriorityToWeight(5)); |
| 5412 EXPECT_EQ(36u, framer.MapPriorityToWeight(6)); |
| 5413 EXPECT_EQ(0u, framer.MapPriorityToWeight(7)); |
| 5414 |
| 5415 EXPECT_EQ(0u, framer.MapWeightToPriority(255)); |
| 5416 EXPECT_EQ(0u, framer.MapWeightToPriority(220)); |
| 5417 EXPECT_EQ(1u, framer.MapWeightToPriority(219)); |
| 5418 EXPECT_EQ(1u, framer.MapWeightToPriority(183)); |
| 5419 EXPECT_EQ(2u, framer.MapWeightToPriority(182)); |
| 5420 EXPECT_EQ(2u, framer.MapWeightToPriority(147)); |
| 5421 EXPECT_EQ(3u, framer.MapWeightToPriority(146)); |
| 5422 EXPECT_EQ(3u, framer.MapWeightToPriority(110)); |
| 5423 EXPECT_EQ(4u, framer.MapWeightToPriority(109)); |
| 5424 EXPECT_EQ(4u, framer.MapWeightToPriority(74)); |
| 5425 EXPECT_EQ(5u, framer.MapWeightToPriority(73)); |
| 5426 EXPECT_EQ(5u, framer.MapWeightToPriority(37)); |
| 5427 EXPECT_EQ(6u, framer.MapWeightToPriority(36)); |
| 5428 EXPECT_EQ(6u, framer.MapWeightToPriority(1)); |
| 5429 EXPECT_EQ(7u, framer.MapWeightToPriority(0)); |
| 5430 } |
| 5431 |
| 5399 } // namespace net | 5432 } // namespace net |
| OLD | NEW |