Index: net/http/http_content_disposition_unittest.cc |
diff --git a/net/http/http_content_disposition_unittest.cc b/net/http/http_content_disposition_unittest.cc |
index 43fef9dd0eab1d0ca4f64713d9e8848380dbd3e6..5b35be22a9436608eb10b5125b825ec5021815ca 100644 |
--- a/net/http/http_content_disposition_unittest.cc |
+++ b/net/http/http_content_disposition_unittest.cc |
@@ -34,50 +34,53 @@ TEST(HttpContentDispositionTest, Filename) { |
{"filename\t=abcde.pdf", "", L"abcde.pdf"}, |
{"filename \t\t =abcde.pdf", "", L"abcde.pdf"}, |
{"name=abcde.pdf", "", L"abcde.pdf"}, |
- {"inline; filename=\"abc%20de.pdf\"", "", |
- L"abc de.pdf"}, |
+ {"inline; filename=\"abc%20de.pdf\"", "", L"abc de.pdf"}, |
// Unbalanced quotation mark |
{"filename=\"abcdef.pdf", "", L"abcdef.pdf"}, |
// Whitespaces are converted to a space. |
- {"inline; filename=\"abc \t\nde.pdf\"", "", |
- L"abc de.pdf"}, |
+ {"inline; filename=\"abc \t\nde.pdf\"", "", L"abc de.pdf"}, |
// %-escaped UTF-8 |
{"attachment; filename=\"%EC%98%88%EC%88%A0%20" |
- "%EC%98%88%EC%88%A0.jpg\"", "", L"\xc608\xc220 \xc608\xc220.jpg"}, |
+ "%EC%98%88%EC%88%A0.jpg\"", |
+ "", L"\xc608\xc220 \xc608\xc220.jpg"}, |
{"attachment; filename=\"%F0%90%8C%B0%F0%90%8C%B1" |
- "abc.jpg\"", "", L"\U00010330\U00010331abc.jpg"}, |
+ "abc.jpg\"", |
+ "", L"\U00010330\U00010331abc.jpg"}, |
{"attachment; filename=\"%EC%98%88%EC%88%A0 \n" |
- "%EC%98%88%EC%88%A0.jpg\"", "", L"\xc608\xc220 \xc608\xc220.jpg"}, |
+ "%EC%98%88%EC%88%A0.jpg\"", |
+ "", L"\xc608\xc220 \xc608\xc220.jpg"}, |
// RFC 2047 with various charsets and Q/B encodings |
{"attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" |
- "D13=2Epng?=\"", "", L"\x82b8\x8853" L"3.png"}, |
- {"attachment; filename==?eUc-Kr?b?v7m8+iAzLnBuZw==?=", |
- "", L"\xc608\xc220 3.png"}, |
+ "D13=2Epng?=\"", |
+ "", |
+ L"\x82b8\x8853" |
+ L"3.png"}, |
+ {"attachment; filename==?eUc-Kr?b?v7m8+iAzLnBuZw==?=", "", |
+ L"\xc608\xc220 3.png"}, |
{"attachment; filename==?utf-8?Q?=E8=8A=B8=E8" |
- "=A1=93_3=2Epng?=", "", L"\x82b8\x8853 3.png"}, |
+ "=A1=93_3=2Epng?=", |
+ "", L"\x82b8\x8853 3.png"}, |
{"attachment; filename==?utf-8?Q?=F0=90=8C=B0" |
- "_3=2Epng?=", "", L"\U00010330 3.png"}, |
- {"inline; filename=\"=?iso88591?Q?caf=e9_=2epng?=\"", |
- "", L"caf\x00e9 .png"}, |
+ "_3=2Epng?=", |
+ "", L"\U00010330 3.png"}, |
+ {"inline; filename=\"=?iso88591?Q?caf=e9_=2epng?=\"", "", |
+ L"caf\x00e9 .png"}, |
// Space after an encoded word should be removed. |
- {"inline; filename=\"=?iso88591?Q?caf=E9_?= .png\"", |
- "", L"caf\x00e9 .png"}, |
+ {"inline; filename=\"=?iso88591?Q?caf=E9_?= .png\"", "", L"caf\x00e9 .png"}, |
// Two encoded words with different charsets (not very likely to be emitted |
// by web servers in the wild). Spaces between them are removed. |
{"inline; filename=\"=?euc-kr?b?v7m8+iAz?=" |
- " =?ksc5601?q?=BF=B9=BC=FA=2Epng?=\"", "", |
- L"\xc608\xc220 3\xc608\xc220.png"}, |
+ " =?ksc5601?q?=BF=B9=BC=FA=2Epng?=\"", |
+ "", L"\xc608\xc220 3\xc608\xc220.png"}, |
{"attachment; filename=\"=?windows-1252?Q?caf=E9?=" |
- " =?iso-8859-7?b?4eI=?= .png\"", "", L"caf\x00e9\x03b1\x03b2.png"}, |
+ " =?iso-8859-7?b?4eI=?= .png\"", |
+ "", L"caf\x00e9\x03b1\x03b2.png"}, |
// Non-ASCII string is passed through and treated as UTF-8 as long as |
// it's valid as UTF-8 and regardless of |referrer_charset|. |
- {"attachment; filename=caf\xc3\xa9.png", |
- "iso-8859-1", L"caf\x00e9.png"}, |
- {"attachment; filename=caf\xc3\xa9.png", |
- "", L"caf\x00e9.png"}, |
+ {"attachment; filename=caf\xc3\xa9.png", "iso-8859-1", L"caf\x00e9.png"}, |
+ {"attachment; filename=caf\xc3\xa9.png", "", L"caf\x00e9.png"}, |
// Non-ASCII/Non-UTF-8 string. Fall back to the referrer charset. |
- {"attachment; filename=caf\xe5.png", |
- "windows-1253", L"caf\x03b5.png"}, |
+ {"attachment; filename=caf\xe5.png", "windows-1253", L"caf\x03b5.png"}, |
#if 0 |
// Non-ASCII/Non-UTF-8 string. Fall back to the native codepage. |
// TODO(jungshik): We need to set the OS default codepage |
@@ -88,27 +91,23 @@ TEST(HttpContentDispositionTest, Filename) { |
#endif |
// Failure cases |
// Invalid hex-digit "G" |
- {"attachment; filename==?iiso88591?Q?caf=EG?=", "", |
- L""}, |
+ {"attachment; filename==?iiso88591?Q?caf=EG?=", "", L""}, |
// Incomplete RFC 2047 encoded-word (missing '='' at the end) |
{"attachment; filename==?iso88591?Q?caf=E3?", "", L""}, |
// Extra character at the end of an encoded word |
- {"attachment; filename==?iso88591?Q?caf=E3?==", |
- "", L""}, |
+ {"attachment; filename==?iso88591?Q?caf=E3?==", "", L""}, |
// Extra token at the end of an encoded word |
- {"attachment; filename==?iso88591?Q?caf=E3?=?", |
- "", L""}, |
- {"attachment; filename==?iso88591?Q?caf=E3?=?=", |
- "", L""}, |
+ {"attachment; filename==?iso88591?Q?caf=E3?=?", "", L""}, |
+ {"attachment; filename==?iso88591?Q?caf=E3?=?=", "", L""}, |
// Incomplete hex-escaped chars |
- {"attachment; filename==?windows-1252?Q?=63=61=E?=", |
- "", L""}, |
+ {"attachment; filename==?windows-1252?Q?=63=61=E?=", "", L""}, |
{"attachment; filename=%EC%98%88%EC%88%A", "", L""}, |
// %-escaped non-UTF-8 encoding is an "error" |
{"attachment; filename=%B7%DD%BD%D1.png", "", L""}, |
// Two RFC 2047 encoded words in a row without a space is an error. |
{"attachment; filename==?windows-1252?Q?caf=E3?=" |
- "=?iso-8859-7?b?4eIucG5nCg==?=", "", L""}, |
+ "=?iso-8859-7?b?4eIucG5nCg==?=", |
+ "", L""}, |
// RFC 5987 tests with Filename* : see http://tools.ietf.org/html/rfc5987 |
{"attachment; filename*=foo.html", "", L""}, |
@@ -116,36 +115,30 @@ TEST(HttpContentDispositionTest, Filename) { |
{"attachment; filename*=''foo'.html", "", L""}, |
{"attachment; filename*=''foo.html'", "", L""}, |
{"attachment; filename*=''f\"oo\".html'", "", L""}, |
- {"attachment; filename*=bogus_charset''foo.html'", |
- "", L""}, |
+ {"attachment; filename*=bogus_charset''foo.html'", "", L""}, |
{"attachment; filename*='en'foo.html'", "", L""}, |
- {"attachment; filename*=iso-8859-1'en'foo.html", "", |
- L"foo.html"}, |
- {"attachment; filename*=utf-8'en'foo.html", "", |
- L"foo.html"}, |
+ {"attachment; filename*=iso-8859-1'en'foo.html", "", L"foo.html"}, |
+ {"attachment; filename*=utf-8'en'foo.html", "", L"foo.html"}, |
// charset cannot be omitted. |
{"attachment; filename*='es'f\xfa.html'", "", L""}, |
// Non-ASCII bytes are not allowed. |
- {"attachment; filename*=iso-8859-1'es'f\xfa.html", "", |
- L""}, |
- {"attachment; filename*=utf-8'es'f\xce\xba.html", "", |
- L""}, |
+ {"attachment; filename*=iso-8859-1'es'f\xfa.html", "", L""}, |
+ {"attachment; filename*=utf-8'es'f\xce\xba.html", "", L""}, |
// TODO(jshin): Space should be %-encoded, but currently, we allow |
// spaces. |
- {"inline; filename*=iso88591''cafe foo.png", "", |
- L"cafe foo.png"}, |
+ {"inline; filename*=iso88591''cafe foo.png", "", L"cafe foo.png"}, |
// Filename* tests converted from Q-encoded tests above. |
- {"attachment; filename*=EUC-JP''%B7%DD%BD%D13%2Epng", |
- "", L"\x82b8\x8853" L"3.png"}, |
+ {"attachment; filename*=EUC-JP''%B7%DD%BD%D13%2Epng", "", |
+ L"\x82b8\x8853" |
+ L"3.png"}, |
{"attachment; filename*=utf-8''" |
- "%E8%8A%B8%E8%A1%93%203%2Epng", "", L"\x82b8\x8853 3.png"}, |
+ "%E8%8A%B8%E8%A1%93%203%2Epng", |
+ "", L"\x82b8\x8853 3.png"}, |
{"attachment; filename*=utf-8''%F0%90%8C%B0 3.png", "", |
- L"\U00010330 3.png"}, |
- {"inline; filename*=Euc-Kr'ko'%BF%B9%BC%FA%2Epng", "", |
- L"\xc608\xc220.png"}, |
- {"attachment; filename*=windows-1252''caf%E9.png", "", |
- L"caf\x00e9.png"}, |
+ L"\U00010330 3.png"}, |
+ {"inline; filename*=Euc-Kr'ko'%BF%B9%BC%FA%2Epng", "", L"\xc608\xc220.png"}, |
+ {"attachment; filename*=windows-1252''caf%E9.png", "", L"caf\x00e9.png"}, |
// Multiple filename, filename*, name parameters specified. |
{"attachment; name=\"foo\"; filename=\"bar\"", "", L"bar"}, |
@@ -154,51 +147,46 @@ TEST(HttpContentDispositionTest, Filename) { |
// http://greenbytes.de/tech/tc2231/ filename* test cases. |
// attwithisofn2231iso |
- {"attachment; filename*=iso-8859-1''foo-%E4.html", "", |
- L"foo-\xe4.html"}, |
+ {"attachment; filename*=iso-8859-1''foo-%E4.html", "", L"foo-\xe4.html"}, |
// attwithfn2231utf8 |
{"attachment; filename*=" |
- "UTF-8''foo-%c3%a4-%e2%82%ac.html", "", L"foo-\xe4-\x20ac.html"}, |
+ "UTF-8''foo-%c3%a4-%e2%82%ac.html", |
+ "", L"foo-\xe4-\x20ac.html"}, |
// attwithfn2231noc : no encoding specified but UTF-8 is used. |
- {"attachment; filename*=''foo-%c3%a4-%e2%82%ac.html", |
- "", L""}, |
+ {"attachment; filename*=''foo-%c3%a4-%e2%82%ac.html", "", L""}, |
// attwithfn2231utf8comp |
- {"attachment; filename*=UTF-8''foo-a%cc%88.html", "", |
- L"foo-\xe4.html"}, |
+ {"attachment; filename*=UTF-8''foo-a%cc%88.html", "", L"foo-\xe4.html"}, |
#ifdef ICU_SHOULD_FAIL_CONVERSION_ON_INVALID_CHARACTER |
// This does not work because we treat ISO-8859-1 synonymous with |
// Windows-1252 per HTML5. For HTTP, in theory, we're not |
// supposed to. |
// attwithfn2231utf8-bad |
{"attachment; filename*=" |
- "iso-8859-1''foo-%c3%a4-%e2%82%ac.html", "", L""}, |
+ "iso-8859-1''foo-%c3%a4-%e2%82%ac.html", |
+ "", L""}, |
#endif |
// attwithfn2231ws1 |
- {"attachment; filename *=UTF-8''foo-%c3%a4.html", "", |
- L""}, |
+ {"attachment; filename *=UTF-8''foo-%c3%a4.html", "", L""}, |
// attwithfn2231ws2 |
- {"attachment; filename*= UTF-8''foo-%c3%a4.html", "", |
- L"foo-\xe4.html"}, |
+ {"attachment; filename*= UTF-8''foo-%c3%a4.html", "", L"foo-\xe4.html"}, |
// attwithfn2231ws3 |
- {"attachment; filename* =UTF-8''foo-%c3%a4.html", "", |
- L"foo-\xe4.html"}, |
+ {"attachment; filename* =UTF-8''foo-%c3%a4.html", "", L"foo-\xe4.html"}, |
// attwithfn2231quot |
- {"attachment; filename*=\"UTF-8''foo-%c3%a4.html\"", |
- "", L""}, |
+ {"attachment; filename*=\"UTF-8''foo-%c3%a4.html\"", "", L""}, |
// attfnboth |
{"attachment; filename=\"foo-ae.html\"; " |
- "filename*=UTF-8''foo-%c3%a4.html", "", L"foo-\xe4.html"}, |
+ "filename*=UTF-8''foo-%c3%a4.html", |
+ "", L"foo-\xe4.html"}, |
// attfnboth2 |
{"attachment; filename*=UTF-8''foo-%c3%a4.html; " |
- "filename=\"foo-ae.html\"", "", L"foo-\xe4.html"}, |
+ "filename=\"foo-ae.html\"", |
+ "", L"foo-\xe4.html"}, |
// attnewandfn |
- {"attachment; foobar=x; filename=\"foo.html\"", "", |
- L"foo.html"}, |
+ {"attachment; foobar=x; filename=\"foo.html\"", "", L"foo.html"}, |
}; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
HttpContentDisposition header(tests[i].header, tests[i].referrer_charset); |
- EXPECT_EQ(tests[i].expected, |
- base::UTF8ToWide(header.filename())) |
+ EXPECT_EQ(tests[i].expected, base::UTF8ToWide(header.filename())) |
<< "Failed on input: " << tests[i].header; |
} |
} |
@@ -210,299 +198,213 @@ TEST(HttpContentDispositionTest, tc2231) { |
net::HttpContentDisposition::Type expected_type; |
const wchar_t* expected_filename; |
} tests[] = { |
- // http://greenbytes.de/tech/tc2231/#inlonly |
- { "inline", |
- net::HttpContentDisposition::INLINE, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#inlonlyquoted |
- { "\"inline\"", |
- net::HttpContentDisposition::INLINE, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#inlwithasciifilename |
- { "inline; filename=\"foo.html\"", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#inlwithfnattach |
- { "inline; filename=\"Not an attachment!\"", |
- net::HttpContentDisposition::INLINE, |
- L"Not an attachment!" |
- }, |
- // http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf |
- { "inline; filename=\"foo.pdf\"", |
- net::HttpContentDisposition::INLINE, |
- L"foo.pdf" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attonly |
- { "attachment", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attonlyquoted |
- { "\"attachment\"", |
- net::HttpContentDisposition::INLINE, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attonly403 |
- // TODO(abarth): This isn't testable in this unit test. |
- // http://greenbytes.de/tech/tc2231/#attonlyucase |
- { "ATTACHMENT", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilename |
- { "attachment; filename=\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifnescapedchar |
- { "attachment; filename=\"f\\oo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifnescapedquote |
- { "attachment; filename=\"\\\"quoting\\\" tested.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"\"quoting\" tested.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithquotedsemicolon |
- { "attachment; filename=\"Here's a semicolon;.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"Here's a semicolon;.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfilenameandextparam |
- { "attachment; foo=\"bar\"; filename=\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfilenameandextparamescaped |
- { "attachment; foo=\"\\\"\\\\\";filename=\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilenameucase |
- { "attachment; FILENAME=\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenq |
- { "attachment; filename=foo.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenqs |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo.html ;", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attemptyparam |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; ;filename=foo", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenqws |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo bar.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo bar.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfntokensq |
- { "attachment; filename='foo.bar'", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.bar" // Should be L"'foo.bar'" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#inlonly |
+ {"inline", net::HttpContentDisposition::INLINE, L""}, |
+ // http://greenbytes.de/tech/tc2231/#inlonlyquoted |
+ {"\"inline\"", net::HttpContentDisposition::INLINE, L""}, |
+ // http://greenbytes.de/tech/tc2231/#inlwithasciifilename |
+ {"inline; filename=\"foo.html\"", net::HttpContentDisposition::INLINE, |
+ L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#inlwithfnattach |
+ {"inline; filename=\"Not an attachment!\"", |
+ net::HttpContentDisposition::INLINE, L"Not an attachment!"}, |
+ // http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf |
+ {"inline; filename=\"foo.pdf\"", net::HttpContentDisposition::INLINE, |
+ L"foo.pdf"}, |
+ // http://greenbytes.de/tech/tc2231/#attonly |
+ {"attachment", net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attonlyquoted |
+ {"\"attachment\"", net::HttpContentDisposition::INLINE, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attonly403 |
+ // TODO(abarth): This isn't testable in this unit test. |
+ // http://greenbytes.de/tech/tc2231/#attonlyucase |
+ {"ATTACHMENT", net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilename |
+ {"attachment; filename=\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifnescapedchar |
+ {"attachment; filename=\"f\\oo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifnescapedquote |
+ {"attachment; filename=\"\\\"quoting\\\" tested.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"\"quoting\" tested.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithquotedsemicolon |
+ {"attachment; filename=\"Here's a semicolon;.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"Here's a semicolon;.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithfilenameandextparam |
+ {"attachment; foo=\"bar\"; filename=\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithfilenameandextparamescaped |
+ {"attachment; foo=\"\\\"\\\\\";filename=\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilenameucase |
+ {"attachment; FILENAME=\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenq |
+ {"attachment; filename=foo.html", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenqs |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo.html ;", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attemptyparam |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; ;filename=foo", net::HttpContentDisposition::ATTACHMENT, |
+ L"foo"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilenamenqws |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo bar.html", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo bar.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithfntokensq |
+ { |
+ "attachment; filename='foo.bar'", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"foo.bar" // Should be L"'foo.bar'" |
+ }, |
#ifdef ICU_SHOULD_FAIL_CONVERSION_ON_INVALID_CHARACTER |
- // http://greenbytes.de/tech/tc2231/#attwithisofnplain |
- { "attachment; filename=\"foo-\xE4html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" // Should be L"foo-\xE4.html" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#attwithisofnplain |
+ { |
+ "attachment; filename=\"foo-\xE4html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"" // Should be L"foo-\xE4.html" |
+ }, |
#endif |
- // http://greenbytes.de/tech/tc2231/#attwithutf8fnplain |
- // Note: We'll UTF-8 decode the file name, even though tc2231 says not to. |
- { "attachment; filename=\"foo-\xC3\xA4.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-\xE4.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfnrawpctenca |
- { "attachment; filename=\"foo-%41.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-A.html" // Should be L"foo-%41.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfnusingpct |
- { "attachment; filename=\"50%.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"50%.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithfnrawpctencaq |
- { "attachment; filename=\"foo-%\\41.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-A.html" // Should be L"foo-%41.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithnamepct |
- { "attachment; name=\"foo-%41.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-A.html" // Should be L"foo-%41.html" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#attwithutf8fnplain |
+ // Note: We'll UTF-8 decode the file name, even though tc2231 says not |
+ // to. |
+ {"attachment; filename=\"foo-\xC3\xA4.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo-\xE4.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithfnrawpctenca |
+ { |
+ "attachment; filename=\"foo-%41.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"foo-A.html" // Should be L"foo-%41.html" |
+ }, |
+ // http://greenbytes.de/tech/tc2231/#attwithfnusingpct |
+ {"attachment; filename=\"50%.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"50%.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwithfnrawpctencaq |
+ { |
+ "attachment; filename=\"foo-%\\41.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"foo-A.html" // Should be L"foo-%41.html" |
+ }, |
+ // http://greenbytes.de/tech/tc2231/#attwithnamepct |
+ { |
+ "attachment; name=\"foo-%41.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"foo-A.html" // Should be L"foo-%41.html" |
+ }, |
#ifdef ICU_SHOULD_FAIL_CONVERSION_ON_INVALID_CHARACTER |
- // http://greenbytes.de/tech/tc2231/#attwithfilenamepctandiso |
- { "attachment; filename=\"\xE4-%41.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" // Should be L"\xE4-%41.htm" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#attwithfilenamepctandiso |
+ { |
+ "attachment; filename=\"\xE4-%41.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"" // Should be L"\xE4-%41.htm" |
+ }, |
#endif |
- // http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong |
- { "attachment; filename=\"foo-%c3%a4-%e2%82%ac.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-\xE4-\u20AC.html" // Should be L"foo-%c3%a4-%e2%82%ac.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwithasciifilenamews1 |
- { "attachment; filename =\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attwith2filenames |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=\"foo.html\"; filename=\"bar.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attfnbrokentoken |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo[1](2).html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo[1](2).html" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong |
+ { |
+ "attachment; filename=\"foo-%c3%a4-%e2%82%ac.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, |
+ L"foo-\xE4-\u20AC.html" // Should be L"foo-%c3%a4-%e2%82%ac.html" |
+ }, |
+ // http://greenbytes.de/tech/tc2231/#attwithasciifilenamews1 |
+ {"attachment; filename =\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attwith2filenames |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=\"foo.html\"; filename=\"bar.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attfnbrokentoken |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo[1](2).html", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo[1](2).html"}, |
#ifdef ICU_SHOULD_FAIL_CONVERSION_ON_INVALID_CHARACTER |
- // http://greenbytes.de/tech/tc2231/#attfnbrokentokeniso |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo-\xE4.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
+ // http://greenbytes.de/tech/tc2231/#attfnbrokentokeniso |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo-\xE4.html", |
+ net::HttpContentDisposition::ATTACHMENT, L""}, |
#endif |
- // http://greenbytes.de/tech/tc2231/#attfnbrokentokenutf |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo-\xC3\xA4.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo-\xE4.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmissingdisposition |
- // Note: tc2231 says we should fail to parse this header. |
- { "filename=foo.html", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmissingdisposition2 |
- // Note: tc2231 says we should fail to parse this header. |
- { "x=y; filename=foo.html", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmissingdisposition3 |
- // Note: tc2231 says we should fail to parse this header. |
- { "\"foo; filename=bar;baz\"; filename=qux", |
- net::HttpContentDisposition::INLINE, |
- L"" // Firefox gets qux |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmissingdisposition4 |
- // Note: tc2231 says we should fail to parse this header. |
- { "filename=foo.html, filename=bar.html", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html, filename=bar.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#emptydisposition |
- // Note: tc2231 says we should fail to parse this header. |
- { "; filename=foo.html", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attandinline |
- // Note: tc2231 says we should fail to parse this header. |
- { "inline; attachment; filename=foo.html", |
- net::HttpContentDisposition::INLINE, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attandinline2 |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; inline; filename=foo.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=\"foo.html\".txt", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html\".txt" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn2 |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=\"bar", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"bar" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn3 |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo\"bar;baz\"qux", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo\"bar;baz\"qux" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmultinstances |
- // Note: tc2231 says we should fail to parse this header. |
- { "attachment; filename=foo.html, attachment; filename=bar.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html, attachment" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attmissingdelim |
- { "attachment; foo=foo filename=bar", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attreversed |
- // Note: tc2231 says we should fail to parse this header. |
- { "filename=foo.html; attachment", |
- net::HttpContentDisposition::INLINE, |
- L"foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attconfusedparam |
- { "attachment; xfilename=foo.html", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attabspath |
- { "attachment; filename=\"/foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"/foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attabspathwin |
- { "attachment; filename=\"\\\\foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"\\foo.html" |
- }, |
- // http://greenbytes.de/tech/tc2231/#dispext |
- { "foobar", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#dispextbadfn |
- { "attachment; example=\"filename=example.txt\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"" |
- }, |
- // http://greenbytes.de/tech/tc2231/#attnewandfn |
- { "attachment; foobar=x; filename=\"foo.html\"", |
- net::HttpContentDisposition::ATTACHMENT, |
- L"foo.html" |
- }, |
- // TODO(abarth): Add the filename* tests, but check |
- // HttpContentDispositionTest.Filename for overlap. |
- // TODO(abarth): http://greenbytes.de/tech/tc2231/#attrfc2047token |
- // TODO(abarth): http://greenbytes.de/tech/tc2231/#attrfc2047quoted |
- }; |
+ // http://greenbytes.de/tech/tc2231/#attfnbrokentokenutf |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo-\xC3\xA4.html", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo-\xE4.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attmissingdisposition |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"filename=foo.html", net::HttpContentDisposition::INLINE, L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attmissingdisposition2 |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"x=y; filename=foo.html", net::HttpContentDisposition::INLINE, |
+ L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attmissingdisposition3 |
+ // Note: tc2231 says we should fail to parse this header. |
+ { |
+ "\"foo; filename=bar;baz\"; filename=qux", |
+ net::HttpContentDisposition::INLINE, |
+ L"" // Firefox gets qux |
+ }, |
+ // http://greenbytes.de/tech/tc2231/#attmissingdisposition4 |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"filename=foo.html, filename=bar.html", |
+ net::HttpContentDisposition::INLINE, L"foo.html, filename=bar.html"}, |
+ // http://greenbytes.de/tech/tc2231/#emptydisposition |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"; filename=foo.html", net::HttpContentDisposition::INLINE, |
+ L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attandinline |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"inline; attachment; filename=foo.html", |
+ net::HttpContentDisposition::INLINE, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attandinline2 |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; inline; filename=foo.html", |
+ net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=\"foo.html\".txt", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html\".txt"}, |
+ // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn2 |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=\"bar", net::HttpContentDisposition::ATTACHMENT, |
+ L"bar"}, |
+ // http://greenbytes.de/tech/tc2231/#attbrokenquotedfn3 |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo\"bar;baz\"qux", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo\"bar;baz\"qux"}, |
+ // http://greenbytes.de/tech/tc2231/#attmultinstances |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"attachment; filename=foo.html, attachment; filename=bar.html", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html, attachment"}, |
+ // http://greenbytes.de/tech/tc2231/#attmissingdelim |
+ {"attachment; foo=foo filename=bar", |
+ net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attreversed |
+ // Note: tc2231 says we should fail to parse this header. |
+ {"filename=foo.html; attachment", net::HttpContentDisposition::INLINE, |
+ L"foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attconfusedparam |
+ {"attachment; xfilename=foo.html", |
+ net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attabspath |
+ {"attachment; filename=\"/foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"/foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#attabspathwin |
+ {"attachment; filename=\"\\\\foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"\\foo.html"}, |
+ // http://greenbytes.de/tech/tc2231/#dispext |
+ {"foobar", net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#dispextbadfn |
+ {"attachment; example=\"filename=example.txt\"", |
+ net::HttpContentDisposition::ATTACHMENT, L""}, |
+ // http://greenbytes.de/tech/tc2231/#attnewandfn |
+ {"attachment; foobar=x; filename=\"foo.html\"", |
+ net::HttpContentDisposition::ATTACHMENT, L"foo.html"}, |
+ // TODO(abarth): Add the filename* tests, but check |
+ // HttpContentDispositionTest.Filename for overlap. |
+ // TODO(abarth): http://greenbytes.de/tech/tc2231/#attrfc2047token |
+ // TODO(abarth): http://greenbytes.de/tech/tc2231/#attrfc2047quoted |
+ }; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
HttpContentDisposition header(tests[i].header, std::string()); |
EXPECT_EQ(tests[i].expected_type, header.type()) |
@@ -517,72 +419,71 @@ TEST(HttpContentDispositionTest, ParseResult) { |
const char* header; |
int expected_flags; |
} kTestCases[] = { |
- // Basic feature tests |
- { "", HttpContentDisposition::INVALID }, |
- { "example=x", HttpContentDisposition::INVALID }, |
- { "attachment; filename=", HttpContentDisposition::HAS_DISPOSITION_TYPE }, |
- { "attachment; name=", HttpContentDisposition::HAS_DISPOSITION_TYPE }, |
- { "attachment; filename*=", HttpContentDisposition::HAS_DISPOSITION_TYPE }, |
- { "attachment; filename==?utf-8?Q?\?=", |
- HttpContentDisposition::HAS_DISPOSITION_TYPE }, |
- { "filename=x", HttpContentDisposition::HAS_FILENAME }, |
- { "example; filename=x", |
- HttpContentDisposition::HAS_DISPOSITION_TYPE | |
- HttpContentDisposition::HAS_UNKNOWN_DISPOSITION_TYPE | |
- HttpContentDisposition::HAS_FILENAME}, |
- { "attachment; filename=x", |
- HttpContentDisposition::HAS_DISPOSITION_TYPE | |
- HttpContentDisposition::HAS_FILENAME }, |
- { "attachment; filename=x; name=y", |
- HttpContentDisposition::HAS_DISPOSITION_TYPE | |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_NAME }, |
- { "attachment; name=y; filename*=utf-8''foo; name=x", |
- HttpContentDisposition::HAS_DISPOSITION_TYPE | |
- HttpContentDisposition::HAS_EXT_FILENAME | |
- HttpContentDisposition::HAS_NAME }, |
+ // Basic feature tests |
+ {"", HttpContentDisposition::INVALID}, |
+ {"example=x", HttpContentDisposition::INVALID}, |
+ {"attachment; filename=", HttpContentDisposition::HAS_DISPOSITION_TYPE}, |
+ {"attachment; name=", HttpContentDisposition::HAS_DISPOSITION_TYPE}, |
+ {"attachment; filename*=", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE}, |
+ {"attachment; filename==?utf-8?Q?\?=", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE}, |
+ {"filename=x", HttpContentDisposition::HAS_FILENAME}, |
+ {"example; filename=x", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE | |
+ HttpContentDisposition::HAS_UNKNOWN_DISPOSITION_TYPE | |
+ HttpContentDisposition::HAS_FILENAME}, |
+ {"attachment; filename=x", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE | |
+ HttpContentDisposition::HAS_FILENAME}, |
+ {"attachment; filename=x; name=y", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE | |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_NAME}, |
+ {"attachment; name=y; filename*=utf-8''foo; name=x", |
+ HttpContentDisposition::HAS_DISPOSITION_TYPE | |
+ HttpContentDisposition::HAS_EXT_FILENAME | |
+ HttpContentDisposition::HAS_NAME}, |
- // Feature tests for 'filename' attribute. |
- { "filename=foo\xcc\x88", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_NON_ASCII_STRINGS }, |
- { "filename=foo%cc%88", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_PERCENT_ENCODED_STRINGS }, |
- { "filename==?utf-8?Q?foo?=", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS }, |
- { "filename=\"=?utf-8?Q?foo?=\"", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS }, |
- { "filename==?utf-8?Q?foo?", HttpContentDisposition::INVALID }, |
- { "name=foo\xcc\x88", |
- HttpContentDisposition::HAS_NAME }, |
+ // Feature tests for 'filename' attribute. |
+ {"filename=foo\xcc\x88", |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_NON_ASCII_STRINGS}, |
+ {"filename=foo%cc%88", |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_PERCENT_ENCODED_STRINGS}, |
+ {"filename==?utf-8?Q?foo?=", |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS}, |
+ {"filename=\"=?utf-8?Q?foo?=\"", |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS}, |
+ {"filename==?utf-8?Q?foo?", HttpContentDisposition::INVALID}, |
+ {"name=foo\xcc\x88", HttpContentDisposition::HAS_NAME}, |
- // Shouldn't set |has_non_ascii_strings| based on 'name' attribute. |
- { "filename=x; name=foo\xcc\x88", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_NAME }, |
- { "filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?=", |
- HttpContentDisposition::HAS_FILENAME | |
- HttpContentDisposition::HAS_NON_ASCII_STRINGS | |
- HttpContentDisposition::HAS_PERCENT_ENCODED_STRINGS | |
- HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS }, |
+ // Shouldn't set |has_non_ascii_strings| based on 'name' attribute. |
+ {"filename=x; name=foo\xcc\x88", HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_NAME}, |
+ {"filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?=", |
+ HttpContentDisposition::HAS_FILENAME | |
+ HttpContentDisposition::HAS_NON_ASCII_STRINGS | |
+ HttpContentDisposition::HAS_PERCENT_ENCODED_STRINGS | |
+ HttpContentDisposition::HAS_RFC2047_ENCODED_STRINGS}, |
- // If 'filename' attribute is invalid, should set any flags based on it. |
- { "filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?", |
- HttpContentDisposition::INVALID }, |
- { "filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?; name=x", |
- HttpContentDisposition::HAS_NAME }, |
- }; |
+ // If 'filename' attribute is invalid, should set any flags based on it. |
+ {"filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?", |
+ HttpContentDisposition::INVALID}, |
+ {"filename=foo\xcc\x88 foo%cc%88 =?utf-8?Q?foo?; name=x", |
+ HttpContentDisposition::HAS_NAME}, |
+ }; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
const ParseResultTestCase& test_case = kTestCases[i]; |
HttpContentDisposition content_disposition(test_case.header, "utf-8"); |
int result = content_disposition.parse_result_flags(); |
- SCOPED_TRACE(testing::Message() << "Test case " << i |
- << " with header " << test_case.header); |
+ SCOPED_TRACE(testing::Message() << "Test case " << i << " with header " |
+ << test_case.header); |
EXPECT_EQ(test_case.expected_flags, result); |
} |
} |