Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1271)

Unified Diff: third_party/WebKit/Source/platform/network/ParsedContentHeaderFieldParametersTest.cpp

Issue 2880543003: Implement a parser for Content-Disposition header fields (Closed)
Patch Set: Rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/network/ParsedContentHeaderFieldParametersTest.cpp
diff --git a/third_party/WebKit/Source/platform/network/ParsedContentHeaderFieldParametersTest.cpp b/third_party/WebKit/Source/platform/network/ParsedContentHeaderFieldParametersTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9877c05f1e3b6e257f3b7bea5b3ad51ce481e1d3
--- /dev/null
+++ b/third_party/WebKit/Source/platform/network/ParsedContentHeaderFieldParametersTest.cpp
@@ -0,0 +1,112 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "platform/network/ParsedContentDisposition.h"
+#include "platform/network/ParsedContentHeaderFieldParameters.h"
+#include "platform/network/ParsedContentType.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+
+namespace {
+
+using Mode = ParsedContentHeaderFieldParameters::Mode;
+
+void CheckValidity(bool expected,
+ const String& input,
+ Mode mode = Mode::kNormal) {
+ EXPECT_EQ(expected,
+ ParsedContentHeaderFieldParameters::CreateForTesting(input, mode)
+ .IsValid())
+ << input;
+
+ const String disposition_input = "attachment" + input;
+ EXPECT_EQ(expected,
+ ParsedContentDisposition(disposition_input, mode).IsValid())
+ << disposition_input;
+
+ const String type_input = "text/plain" + input;
+ EXPECT_EQ(expected, ParsedContentType(type_input, mode).IsValid())
+ << type_input;
+}
+
+TEST(ParsedContentHeaderFieldParametersTest, Validity) {
+ CheckValidity(true, "");
+ CheckValidity(true, " ");
+ CheckValidity(true, " ;p1=v1");
+ CheckValidity(true, "; p1=v1");
+ CheckValidity(true, ";p1=v1 ");
+ CheckValidity(true, ";p1 = v1");
+ CheckValidity(true, ";z=\"ttx&r=z;;\\u\\\"kd==\"");
+ CheckValidity(true, "; z=\"\xff\"");
+
+ CheckValidity(false, "\r");
+ CheckValidity(false, "\n");
+ CheckValidity(false, " p1=v1");
+ CheckValidity(false, ";p1=v1;");
+ CheckValidity(false, ";");
+ CheckValidity(false, "; ");
+ CheckValidity(false, "; p1");
+ CheckValidity(false, "; p1;");
+ CheckValidity(false, ";\"xx");
+ CheckValidity(false, ";\"xx=y");
+ CheckValidity(false, "; \"z\"=u");
+ CheckValidity(false, "; z=\xff");
+
+ CheckValidity(false, ";z=q/t:()<>@,:\\/[]?");
+ CheckValidity(true, ";z=q/t:()<>@,:\\/[]?=", Mode::kRelaxed);
+ CheckValidity(false, ";z=q r", Mode::kRelaxed);
+ CheckValidity(false, ";z=q;r", Mode::kRelaxed);
+ CheckValidity(false, ";z=q\"r", Mode::kRelaxed);
+ CheckValidity(false, "; z=\xff", Mode::kRelaxed);
+}
+
+TEST(ParsedContentHeaderFieldParametersTest, ParameterName) {
+ String input = "; y=z ; y= u ; t=r;k= \"t \\u\\\"x\" ;Q=U;T=S";
+
+ CheckValidity(true, input);
+
+ ParsedContentHeaderFieldParameters t =
+ ParsedContentHeaderFieldParameters::CreateForTesting(input,
+ Mode::kNormal);
+ EXPECT_TRUE(t.IsValid());
+ EXPECT_EQ(4u, t.ParameterCount());
+ EXPECT_EQ(String(), t.ParameterValueForName("a"));
+ EXPECT_EQ(String(), t.ParameterValueForName("x"));
+ EXPECT_EQ("u", t.ParameterValueForName("y"));
+ EXPECT_EQ("S", t.ParameterValueForName("t"));
+ EXPECT_EQ("t u\"x", t.ParameterValueForName("k"));
+ EXPECT_EQ("U", t.ParameterValueForName("Q"));
+ EXPECT_EQ("S", t.ParameterValueForName("T"));
+
+ String kelvin = String::FromUTF8("\xe2\x84\xaa");
+ DCHECK_EQ(kelvin.LowerUnicode(AtomicString()), "k");
+ EXPECT_EQ(String(), t.ParameterValueForName(kelvin));
+}
+
+TEST(ParsedContentHeaderFieldParametersTest, RelaxedParameterName) {
+ String input = "; z=q/t:()<>@,:\\/[]?=;y=u";
+
+ CheckValidity(true, input, Mode::kRelaxed);
+
+ ParsedContentHeaderFieldParameters t =
+ ParsedContentHeaderFieldParameters::CreateForTesting(input,
+ Mode::kRelaxed);
+ EXPECT_TRUE(t.IsValid());
+ EXPECT_EQ(2u, t.ParameterCount());
+ EXPECT_EQ("q/t:()<>@,:\\/[]?=", t.ParameterValueForName("z"));
+ EXPECT_EQ("u", t.ParameterValueForName("y"));
+}
+
+TEST(ParsedContentHeaderFieldParametersTest, StrictParameterName) {
+ CheckValidity(true, "", Mode::kStrict);
+ CheckValidity(true, "; p1=a", Mode::kStrict);
+ CheckValidity(false, "; p1=a; p1=b", Mode::kStrict);
+ CheckValidity(true, "; p1=a; p2=b", Mode::kStrict);
+}
+
+} // namespace
+
+} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698