| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "platform/network/ParsedContentDisposition.h" |
| 6 #include "platform/network/ParsedContentHeaderFieldParameters.h" |
| 7 #include "platform/network/ParsedContentType.h" |
| 8 |
| 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 |
| 11 namespace blink { |
| 12 |
| 13 namespace { |
| 14 |
| 15 using Mode = ParsedContentHeaderFieldParameters::Mode; |
| 16 |
| 17 void CheckValidity(bool expected, |
| 18 const String& input, |
| 19 Mode mode = Mode::kNormal) { |
| 20 EXPECT_EQ(expected, |
| 21 ParsedContentHeaderFieldParameters::CreateForTesting(input, mode) |
| 22 .IsValid()) |
| 23 << input; |
| 24 |
| 25 const String disposition_input = "attachment" + input; |
| 26 EXPECT_EQ(expected, |
| 27 ParsedContentDisposition(disposition_input, mode).IsValid()) |
| 28 << disposition_input; |
| 29 |
| 30 const String type_input = "text/plain" + input; |
| 31 EXPECT_EQ(expected, ParsedContentType(type_input, mode).IsValid()) |
| 32 << type_input; |
| 33 } |
| 34 |
| 35 TEST(ParsedContentHeaderFieldParametersTest, Validity) { |
| 36 CheckValidity(true, ""); |
| 37 CheckValidity(true, " "); |
| 38 CheckValidity(true, " ;p1=v1"); |
| 39 CheckValidity(true, "; p1=v1"); |
| 40 CheckValidity(true, ";p1=v1 "); |
| 41 CheckValidity(true, ";p1 = v1"); |
| 42 CheckValidity(true, ";z=\"ttx&r=z;;\\u\\\"kd==\""); |
| 43 CheckValidity(true, "; z=\"\xff\""); |
| 44 |
| 45 CheckValidity(false, "\r"); |
| 46 CheckValidity(false, "\n"); |
| 47 CheckValidity(false, " p1=v1"); |
| 48 CheckValidity(false, ";p1=v1;"); |
| 49 CheckValidity(false, ";"); |
| 50 CheckValidity(false, "; "); |
| 51 CheckValidity(false, "; p1"); |
| 52 CheckValidity(false, "; p1;"); |
| 53 CheckValidity(false, ";\"xx"); |
| 54 CheckValidity(false, ";\"xx=y"); |
| 55 CheckValidity(false, "; \"z\"=u"); |
| 56 CheckValidity(false, "; z=\xff"); |
| 57 |
| 58 CheckValidity(false, ";z=q/t:()<>@,:\\/[]?"); |
| 59 CheckValidity(true, ";z=q/t:()<>@,:\\/[]?=", Mode::kRelaxed); |
| 60 CheckValidity(false, ";z=q r", Mode::kRelaxed); |
| 61 CheckValidity(false, ";z=q;r", Mode::kRelaxed); |
| 62 CheckValidity(false, ";z=q\"r", Mode::kRelaxed); |
| 63 CheckValidity(false, "; z=\xff", Mode::kRelaxed); |
| 64 } |
| 65 |
| 66 TEST(ParsedContentHeaderFieldParametersTest, ParameterName) { |
| 67 String input = "; y=z ; y= u ; t=r;k= \"t \\u\\\"x\" ;Q=U;T=S"; |
| 68 |
| 69 CheckValidity(true, input); |
| 70 |
| 71 ParsedContentHeaderFieldParameters t = |
| 72 ParsedContentHeaderFieldParameters::CreateForTesting(input, |
| 73 Mode::kNormal); |
| 74 EXPECT_TRUE(t.IsValid()); |
| 75 EXPECT_EQ(4u, t.ParameterCount()); |
| 76 EXPECT_EQ(String(), t.ParameterValueForName("a")); |
| 77 EXPECT_EQ(String(), t.ParameterValueForName("x")); |
| 78 EXPECT_EQ("u", t.ParameterValueForName("y")); |
| 79 EXPECT_EQ("S", t.ParameterValueForName("t")); |
| 80 EXPECT_EQ("t u\"x", t.ParameterValueForName("k")); |
| 81 EXPECT_EQ("U", t.ParameterValueForName("Q")); |
| 82 EXPECT_EQ("S", t.ParameterValueForName("T")); |
| 83 |
| 84 String kelvin = String::FromUTF8("\xe2\x84\xaa"); |
| 85 DCHECK_EQ(kelvin.LowerUnicode(AtomicString()), "k"); |
| 86 EXPECT_EQ(String(), t.ParameterValueForName(kelvin)); |
| 87 } |
| 88 |
| 89 TEST(ParsedContentHeaderFieldParametersTest, RelaxedParameterName) { |
| 90 String input = "; z=q/t:()<>@,:\\/[]?=;y=u"; |
| 91 |
| 92 CheckValidity(true, input, Mode::kRelaxed); |
| 93 |
| 94 ParsedContentHeaderFieldParameters t = |
| 95 ParsedContentHeaderFieldParameters::CreateForTesting(input, |
| 96 Mode::kRelaxed); |
| 97 EXPECT_TRUE(t.IsValid()); |
| 98 EXPECT_EQ(2u, t.ParameterCount()); |
| 99 EXPECT_EQ("q/t:()<>@,:\\/[]?=", t.ParameterValueForName("z")); |
| 100 EXPECT_EQ("u", t.ParameterValueForName("y")); |
| 101 } |
| 102 |
| 103 TEST(ParsedContentHeaderFieldParametersTest, StrictParameterName) { |
| 104 CheckValidity(true, "", Mode::kStrict); |
| 105 CheckValidity(true, "; p1=a", Mode::kStrict); |
| 106 CheckValidity(false, "; p1=a; p1=b", Mode::kStrict); |
| 107 CheckValidity(true, "; p1=a; p2=b", Mode::kStrict); |
| 108 } |
| 109 |
| 110 } // namespace |
| 111 |
| 112 } // namespace blink |
| OLD | NEW |