Chromium Code Reviews| 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.DeprecatedLower(), "k"); | |
|
yhirano
2017/05/23 07:28:27
LowerUnicode
e_hakkinen
2017/05/23 20:07:02
Done.
| |
| 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 |