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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "platform/network/HTTPParsers.h" 5 #include "platform/network/HTTPParsers.h"
6 6
7 #include "platform/heap/Handle.h" 7 #include "platform/heap/Handle.h"
8 #include "platform/weborigin/Suborigin.h" 8 #include "platform/weborigin/Suborigin.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "wtf/MathExtras.h" 10 #include "wtf/MathExtras.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("\0", 1))); 132 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("\0", 1)));
133 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("test \0, 6"))); 133 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("test \0, 6")));
134 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("test "))); 134 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String("test ")));
135 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230("test\r\n data")); 135 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230("test\r\n data"));
136 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String(hiraganaA))); 136 EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String(hiraganaA)));
137 } 137 }
138 138
139 TEST(HTTPParsersTest, ExtractMIMETypeFromMediaType) 139 TEST(HTTPParsersTest, ExtractMIMETypeFromMediaType)
140 { 140 {
141 const AtomicString textHtml("text/html"); 141 const AtomicString textHtml("text/html");
142
143 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html"))) ;
142 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; ch arset=iso-8859-1"))); 144 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; ch arset=iso-8859-1")));
145
146 // Quoted charset parameter
147 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; ch arset=\"quoted\"")));
148
149 // Multiple parameters
150 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; ch arset=x; foo=bar")));
151
152 // OWSes are trimmed.
153 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString(" text/html ")));
154 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\ttext/html \ t")));
143 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html ; c harset=iso-8859-1"))); 155 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html ; c harset=iso-8859-1")));
156
157 // Non-standard multiple type/subtype listing using a comma as a separator
158 // is accepted.
144 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,tex t/plain"))); 159 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,tex t/plain")));
145 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html , t ext/plain"))); 160 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html , t ext/plain")));
146 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html\t,\ ttext/plain"))); 161 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html\t,\ ttext/plain")));
147 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString(" text/html ")));
148 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\ttext/html \ t")));
149 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\r\ntext/html \r\n")));
150 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,tex t/plain;charset=iso-8859-1"))); 162 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,tex t/plain;charset=iso-8859-1")));
151 EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString(", text/h tml")));
152 EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString("; text/h tml")));
153 163
154 // Preserves case. 164 // Preserves case.
155 EXPECT_EQ("tExt/hTMl", extractMIMETypeFromMediaType(AtomicString("tExt/hTMl" ))); 165 EXPECT_EQ("tExt/hTMl", extractMIMETypeFromMediaType(AtomicString("tExt/hTMl" )));
156 166
167 EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString(", text/h tml")));
168 EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString("; text/h tml")));
169
157 // If no normalization is required, the same AtomicString should be returned . 170 // If no normalization is required, the same AtomicString should be returned .
158 const AtomicString& passthrough = extractMIMETypeFromMediaType(textHtml); 171 const AtomicString& passthrough = extractMIMETypeFromMediaType(textHtml);
159 EXPECT_EQ(textHtml.impl(), passthrough.impl()); 172 EXPECT_EQ(textHtml.impl(), passthrough.impl());
173 }
160 174
161 // These tests cover current behavior, but are not necessarily 175 TEST(HTTPParsersTest, ExtractMIMETypeFromMediaTypeInvalidInput)
162 // expected/wanted behavior. (See FIXME in implementation.) 176 {
163 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text / html") )); 177 // extractMIMETypeFromMediaType() returns the string before the first
164 // U+2003, EM SPACE (UTF-8: E2 80 83) 178 // semicolon after trimming OWSes at the head and the tail even if the
165 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString::fromUTF8("tex t\xE2\x80\x83/ html"))); 179 // string doesn't conform to the media-type ABNF defined in the RFC 7231.
166 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\r\n/\nht ml"))); 180
167 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\n/\nhtml "))); 181 // These behaviors could be fixed later when ready.
168 EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("t e x t / h t m l"))); 182
183 // Non-OWS characters meaning space are not trimmed.
184 EXPECT_EQ(AtomicString("\r\ntext/html\r\n"), extractMIMETypeFromMediaType(At omicString("\r\ntext/html\r\n")));
185 // U+2003, EM SPACE (UTF-8: E2 80 83).
186 EXPECT_EQ(AtomicString::fromUTF8("\xE2\x80\x83text/html"), extractMIMETypeFr omMediaType(AtomicString::fromUTF8("\xE2\x80\x83text/html")));
187
188 // Invalid type/subtype.
189 EXPECT_EQ(AtomicString("a"), extractMIMETypeFromMediaType(AtomicString("a")) );
190
191 // Invalid parameters.
192 EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicStri ng("text/html;wow")));
193 EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicStri ng("text/html;;;;;;")));
194 EXPECT_EQ(AtomicString("text/html"), extractMIMETypeFromMediaType(AtomicStri ng("text/html; = = = ")));
195
196 // Only OWSes at either the beginning or the end of the type/subtype
197 // portion.
198 EXPECT_EQ(AtomicString("text / html"), extractMIMETypeFromMediaType(AtomicSt ring("text / html")));
199 EXPECT_EQ(AtomicString("t e x t / h t m l"), extractMIMETypeFromMediaType(At omicString("t e x t / h t m l")));
200
201 EXPECT_EQ(AtomicString("text\r\n/\nhtml"), extractMIMETypeFromMediaType(Atom icString("text\r\n/\nhtml")));
202 EXPECT_EQ(AtomicString("text\n/\nhtml"), extractMIMETypeFromMediaType(Atomic String("text\n/\nhtml")));
203 EXPECT_EQ(AtomicString::fromUTF8("text\xE2\x80\x83/html"), extractMIMETypeFr omMediaType(AtomicString::fromUTF8("text\xE2\x80\x83/html")));
169 } 204 }
170 205
171 void expectParseNamePass(const char* message, String header, String expectedName ) 206 void expectParseNamePass(const char* message, String header, String expectedName )
172 { 207 {
173 SCOPED_TRACE(message); 208 SCOPED_TRACE(message);
174 209
175 Vector<String> messages; 210 Vector<String> messages;
176 Suborigin suborigin; 211 Suborigin suborigin;
177 EXPECT_TRUE(parseSuboriginHeader(header, &suborigin, messages)); 212 EXPECT_TRUE(parseSuboriginHeader(header, &suborigin, messages));
178 EXPECT_EQ(expectedName, suborigin.name()); 213 EXPECT_EQ(expectedName, suborigin.name());
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 EXPECT_TRUE(parseHTTPRefresh("1 url=dest", nullptr, delay, url)); 342 EXPECT_TRUE(parseHTTPRefresh("1 url=dest", nullptr, delay, url));
308 EXPECT_EQ(1.0, delay); 343 EXPECT_EQ(1.0, delay);
309 EXPECT_EQ("dest", url); 344 EXPECT_EQ("dest", url);
310 345
311 EXPECT_TRUE(parseHTTPRefresh("10\nurl=dest", isASCIISpace<UChar>, delay, url )); 346 EXPECT_TRUE(parseHTTPRefresh("10\nurl=dest", isASCIISpace<UChar>, delay, url ));
312 EXPECT_EQ(10, delay); 347 EXPECT_EQ(10, delay);
313 EXPECT_EQ("dest", url); 348 EXPECT_EQ("dest", url);
314 } 349 }
315 350
316 } // namespace blink 351 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698