diff options
| author | Ben Murdoch <benm@google.com> | 2010-11-18 18:32:45 +0000 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2010-11-18 18:38:07 +0000 |
| commit | 513209b27ff55e2841eac0e4120199c23acce758 (patch) | |
| tree | aeba30bb08c5f47c57003544e378a377c297eee6 /net/base/net_util_unittest.cc | |
| parent | 164f7496de0fbee436b385a79ead9e3cb81a50c1 (diff) | |
| download | external_chromium-513209b27ff55e2841eac0e4120199c23acce758.zip external_chromium-513209b27ff55e2841eac0e4120199c23acce758.tar.gz external_chromium-513209b27ff55e2841eac0e4120199c23acce758.tar.bz2 | |
Merge Chromium at r65505: Initial merge by git.
Change-Id: I31d8f1d8cd33caaf7f47ffa7350aef42d5fbdb45
Diffstat (limited to 'net/base/net_util_unittest.cc')
| -rw-r--r-- | net/base/net_util_unittest.cc | 117 |
1 files changed, 113 insertions, 4 deletions
diff --git a/net/base/net_util_unittest.cc b/net/base/net_util_unittest.cc index ad7ccad..77d3a00 100644 --- a/net/base/net_util_unittest.cc +++ b/net/base/net_util_unittest.cc @@ -711,7 +711,8 @@ TEST(NetUtilTest, GetHeaderParamValue) { std::wstring header_value = net::GetSpecificHeader(google_headers, tests[i].header_name); std::wstring result = - net::GetHeaderParamValue(header_value, tests[i].param_name); + net::GetHeaderParamValue(header_value, tests[i].param_name, + net::QuoteRule::REMOVE_OUTER_QUOTES); EXPECT_EQ(result, tests[i].expected); } @@ -719,11 +720,38 @@ TEST(NetUtilTest, GetHeaderParamValue) { std::wstring header_value = net::GetSpecificHeader(L"", tests[i].header_name); std::wstring result = - net::GetHeaderParamValue(header_value, tests[i].param_name); + net::GetHeaderParamValue(header_value, tests[i].param_name, + net::QuoteRule::REMOVE_OUTER_QUOTES); EXPECT_EQ(result, std::wstring()); } } +TEST(NetUtilTest, GetHeaderParamValueQuotes) { + struct { + const char* header; + const char* expected_with_quotes; + const char* expected_without_quotes; + } tests[] = { + {"filename=foo", "foo", "foo"}, + {"filename=\"foo\"", "\"foo\"", "foo"}, + {"filename=foo\"", "foo\"", "foo\""}, + {"filename=fo\"o", "fo\"o", "fo\"o"}, + }; + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { + std::string actual_with_quotes = + net::GetHeaderParamValue(tests[i].header, "filename", + net::QuoteRule::KEEP_OUTER_QUOTES); + std::string actual_without_quotes = + net::GetHeaderParamValue(tests[i].header, "filename", + net::QuoteRule::REMOVE_OUTER_QUOTES); + EXPECT_EQ(tests[i].expected_with_quotes, actual_with_quotes) + << "Failed while processing: " << tests[i].header; + EXPECT_EQ(tests[i].expected_without_quotes, actual_without_quotes) + << "Failed while processing: " << tests[i].header; + } +} + TEST(NetUtilTest, GetFileNameFromCD) { const FileNameCDCase tests[] = { // Test various forms of C-D header fields emitted by web servers. @@ -762,7 +790,7 @@ TEST(NetUtilTest, GetFileNameFromCD) { "_3=2Epng?=", "", L"\U00010330 3.png"}, {"Content-Disposition: inline; filename=\"=?iso88591?Q?caf=e9_=2epng?=\"", "", L"caf\x00e9 .png"}, - // Space after an encode word should be removed. + // Space after an encoded word should be removed. {"Content-Disposition: inline; filename=\"=?iso88591?Q?caf=E9_?= .png\"", "", L"caf\x00e9 .png"}, // Two encoded words with different charsets (not very likely to be emitted @@ -812,11 +840,92 @@ TEST(NetUtilTest, GetFileNameFromCD) { // Two RFC 2047 encoded words in a row without a space is an error. {"Content-Disposition: attachment; filename==?windows-1252?Q?caf=E3?=" "=?iso-8859-7?b?4eIucG5nCg==?=", "", L""}, + + // RFC 5987 tests with Filename* : see http://tools.ietf.org/html/rfc5987 + {"Content-Disposition: attachment; filename*=foo.html", "", L""}, + {"Content-Disposition: attachment; filename*=foo'.html", "", L""}, + {"Content-Disposition: attachment; filename*=''foo'.html", "", L""}, + {"Content-Disposition: attachment; filename*=''foo.html'", "", L""}, + {"Content-Disposition: attachment; filename*=''f\"oo\".html'", "", L""}, + {"Content-Disposition: attachment; filename*=bogus_charset''foo.html'", + "", L""}, + {"Content-Disposition: attachment; filename*='en'foo.html'", "", L""}, + {"Content-Disposition: attachment; filename*=iso-8859-1'en'foo.html", "", + L"foo.html"}, + {"Content-Disposition: attachment; filename*=utf-8'en'foo.html", "", + L"foo.html"}, + // charset cannot be omitted. + {"Content-Disposition: attachment; filename*='es'f\xfa.html'", "", L""}, + // Non-ASCII bytes are not allowed. + {"Content-Disposition: attachment; filename*=iso-8859-1'es'f\xfa.html", "", + L""}, + {"Content-Disposition: attachment; filename*=utf-8'es'f\xce\xba.html", "", + L""}, + // TODO(jshin): Space should be %-encoded, but currently, we allow + // spaces. + {"Content-Disposition: inline; filename*=iso88591''cafe foo.png", "", + L"cafe foo.png"}, + + // Filename* tests converted from Q-encoded tests above. + {"Content-Disposition: attachment; filename*=EUC-JP''%B7%DD%BD%D13%2Epng", + "", L"\x82b8\x8853" L"3.png"}, + {"Content-Disposition: attachment; filename*=utf-8''" + "%E8%8A%B8%E8%A1%93%203%2Epng", "", L"\x82b8\x8853 3.png"}, + {"Content-Disposition: attachment; filename*=utf-8''%F0%90%8C%B0 3.png", "", + L"\U00010330 3.png"}, + {"Content-Disposition: inline; filename*=Euc-Kr'ko'%BF%B9%BC%FA%2Epng", "", + L"\xc608\xc220.png"}, + {"Content-Disposition: attachment; filename*=windows-1252''caf%E9.png", "", + L"caf\x00e9.png"}, + + // http://greenbytes.de/tech/tc2231/ filename* test cases. + // attwithisofn2231iso + {"Content-Disposition: attachment; filename*=iso-8859-1''foo-%E4.html", "", + L"foo-\xe4.html"}, + // attwithfn2231utf8 + {"Content-Disposition: attachment; filename*=" + "UTF-8''foo-%c3%a4-%e2%82%ac.html", "", L"foo-\xe4-\x20ac.html"}, + // attwithfn2231noc : no encoding specified but UTF-8 is used. + {"Content-Disposition: attachment; filename*=''foo-%c3%a4-%e2%82%ac.html", + "", L""}, + // attwithfn2231utf8comp + {"Content-Disposition: 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 + {"Content-Disposition: attachment; filename*=" + "iso-8859-1''foo-%c3%a4-%e2%82%ac.html", "", L""}, +#endif + // attwithfn2231ws1 + {"Content-Disposition: attachment; filename *=UTF-8''foo-%c3%a4.html", "", + L""}, + // attwithfn2231ws2 + {"Content-Disposition: attachment; filename*= UTF-8''foo-%c3%a4.html", "", + L"foo-\xe4.html"}, + // attwithfn2231ws3 + {"Content-Disposition: attachment; filename* =UTF-8''foo-%c3%a4.html", "", + L"foo-\xe4.html"}, + // attwithfn2231quot + {"Content-Disposition: attachment; filename*=\"UTF-8''foo-%c3%a4.html\"", + "", L""}, + // attfnboth + {"Content-Disposition: attachment; filename=\"foo-ae.html\"; " + "filename*=UTF-8''foo-%c3%a4.html", "", L"foo-\xe4.html"}, + // attfnboth2 + {"Content-Disposition: attachment; filename*=UTF-8''foo-%c3%a4.html; " + "filename=\"foo-ae.html\"", "", L"foo-\xe4.html"}, + // attnewandfn + {"Content-Disposition: attachment; foobar=x; filename=\"foo.html\"", "", + L"foo.html"}, }; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { EXPECT_EQ(tests[i].expected, UTF8ToWide(net::GetFileNameFromCD(tests[i].header_field, - tests[i].referrer_charset))); + tests[i].referrer_charset))) + << "Failed on input: " << tests[i].header_field; } } |
