| 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);
|
| }
|
| }
|
|
|