| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |