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

Unified Diff: net/base/net_util_unittest.cc

Issue 4435001: Add support for the extended header parameter syntax in Content-Disposition h... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/net_util.cc ('k') | webkit/glue/weburlloader_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/net_util_unittest.cc
===================================================================
--- net/base/net_util_unittest.cc (revision 64006)
+++ net/base/net_util_unittest.cc (working copy)
@@ -711,7 +711,8 @@
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 @@
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 @@
"_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,89 @@
// 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
+ // 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;
}
}
« no previous file with comments | « net/base/net_util.cc ('k') | webkit/glue/weburlloader_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698