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

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

Issue 2310783003: Stop ignoring whitespaces in the middle of MIME type in a Content-Type header (Closed)
Patch Set: Rebase Created 4 years, 3 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/HTTPParsersTest.cpp
diff --git a/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp b/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
index 55298c803d678e32e07173d4b75aa54b1b138ab5..571ef1a0f13bdfbe1ccf8f61b05de03a3335df11 100644
--- a/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
+++ b/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
@@ -139,33 +139,68 @@ TEST(HTTPParsersTest, HTTPFieldContent)
TEST(HTTPParsersTest, ExtractMIMETypeFromMediaType)
{
const AtomicString textHtml("text/html");
+
+ EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html")));
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; charset=iso-8859-1")));
+
+ // Quoted charset parameter
+ EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; charset=\"quoted\"")));
+
+ // Multiple parameters
+ EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; charset=x; foo=bar")));
+
+ // OWSes are trimmed.
+ EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString(" text/html ")));
+ EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\ttext/html \t")));
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html ; charset=iso-8859-1")));
+
+ // Non-standard multiple type/subtype listing using a comma as a separator
+ // is accepted.
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,text/plain")));
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html , text/plain")));
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html\t,\ttext/plain")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString(" text/html ")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\ttext/html \t")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\r\ntext/html\r\n")));
EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,text/plain;charset=iso-8859-1")));
- EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString(", text/html")));
- EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString("; text/html")));
// Preserves case.
EXPECT_EQ("tExt/hTMl", extractMIMETypeFromMediaType(AtomicString("tExt/hTMl")));
+ EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString(", text/html")));
+ EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString("; text/html")));
+
// If no normalization is required, the same AtomicString should be returned.
const AtomicString& passthrough = extractMIMETypeFromMediaType(textHtml);
EXPECT_EQ(textHtml.impl(), passthrough.impl());
+}
+
+TEST(HTTPParsersTest, ExtractMIMETypeFromMediaTypeInvalidInput)
+{
+ // extractMIMETypeFromMediaType() returns the string before the first
+ // semicolon after trimming OWSes at the head and the tail even if the
+ // string doesn't conform to the media-type ABNF defined in the RFC 7231.
+
+ // These behaviors could be fixed later when ready.
+
+ // Non-OWS characters meaning space are not trimmed.
+ EXPECT_EQ(AtomicString("\r\ntext/html\r\n"), extractMIMETypeFromMediaType(AtomicString("\r\ntext/html\r\n")));
+ // U+2003, EM SPACE (UTF-8: E2 80 83).
+ EXPECT_EQ(AtomicString::fromUTF8("\xE2\x80\x83text/html"), extractMIMETypeFromMediaType(AtomicString::fromUTF8("\xE2\x80\x83text/html")));
+
+ // Invalid type/subtype.
+ EXPECT_EQ(AtomicString("a"), extractMIMETypeFromMediaType(AtomicString("a")));
+
+ // Invalid parameters.
+ EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicString("text/html;wow")));
+ EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicString("text/html;;;;;;")));
+ EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicString("text/html; = = = ")));
+
+ // Only OWSes at either the beginning or the end of the type/subtype
+ // portion.
+ EXPECT_EQ(AtomicString("text / html"), extractMIMETypeFromMediaType(AtomicString("text / html")));
+ EXPECT_EQ(AtomicString("t e x t / h t m l"), extractMIMETypeFromMediaType(AtomicString("t e x t / h t m l")));
- // These tests cover current behavior, but are not necessarily
- // expected/wanted behavior. (See FIXME in implementation.)
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text / html")));
- // U+2003, EM SPACE (UTF-8: E2 80 83)
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString::fromUTF8("text\xE2\x80\x83/ html")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\r\n/\nhtml")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\n/\nhtml")));
- EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("t e x t / h t m l")));
+ EXPECT_EQ(AtomicString("text\r\n/\nhtml"), extractMIMETypeFromMediaType(AtomicString("text\r\n/\nhtml")));
+ EXPECT_EQ(AtomicString("text\n/\nhtml"), extractMIMETypeFromMediaType(AtomicString("text\n/\nhtml")));
+ EXPECT_EQ(AtomicString::fromUTF8("text\xE2\x80\x83/html"), extractMIMETypeFromMediaType(AtomicString::fromUTF8("text\xE2\x80\x83/html")));
}
void expectParseNamePass(const char* message, String header, String expectedName)

Powered by Google App Engine
This is Rietveld 408576698