| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
| 8 #include "base/time.h" | 8 #include "base/time.h" |
| 9 #include "googleurl/src/gurl.h" | 9 #include "googleurl/src/gurl.h" |
| 10 #include "net/base/escape.h" | 10 #include "net/base/escape.h" |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 | 346 |
| 347 struct RFC1738Case { | 347 struct RFC1738Case { |
| 348 const char* host; | 348 const char* host; |
| 349 bool expected_output; | 349 bool expected_output; |
| 350 }; | 350 }; |
| 351 | 351 |
| 352 struct SuggestedFilenameCase { | 352 struct SuggestedFilenameCase { |
| 353 const char* url; | 353 const char* url; |
| 354 const char* content_disp_header; | 354 const char* content_disp_header; |
| 355 const char* referrer_charset; | 355 const char* referrer_charset; |
| 356 const wchar_t* default_filename; | 356 const char* default_filename; |
| 357 const wchar_t* expected_filename; | 357 const wchar_t* expected_filename; |
| 358 }; | 358 }; |
| 359 | 359 |
| 360 struct UrlTestData { | 360 struct UrlTestData { |
| 361 const char* description; | 361 const char* description; |
| 362 const char* input; | 362 const char* input; |
| 363 const std::wstring languages; | 363 const std::wstring languages; |
| 364 bool omit; | 364 bool omit; |
| 365 UnescapeRule::Type escape_rules; | 365 UnescapeRule::Type escape_rules; |
| 366 const std::wstring output; | 366 const std::wstring output; |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 "", L""}, | 763 "", L""}, |
| 764 {"Content-Disposition: attachment; filename=%EC%98%88%EC%88%A", "", L""}, | 764 {"Content-Disposition: attachment; filename=%EC%98%88%EC%88%A", "", L""}, |
| 765 // %-escaped non-UTF-8 encoding is an "error" | 765 // %-escaped non-UTF-8 encoding is an "error" |
| 766 {"Content-Disposition: attachment; filename=%B7%DD%BD%D1.png", "", L""}, | 766 {"Content-Disposition: attachment; filename=%B7%DD%BD%D1.png", "", L""}, |
| 767 // Two RFC 2047 encoded words in a row without a space is an error. | 767 // Two RFC 2047 encoded words in a row without a space is an error. |
| 768 {"Content-Disposition: attachment; filename==?windows-1252?Q?caf=E3?=" | 768 {"Content-Disposition: attachment; filename==?windows-1252?Q?caf=E3?=" |
| 769 "=?iso-8859-7?b?4eIucG5nCg==?=", "", L""}, | 769 "=?iso-8859-7?b?4eIucG5nCg==?=", "", L""}, |
| 770 }; | 770 }; |
| 771 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 771 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 772 EXPECT_EQ(tests[i].expected, | 772 EXPECT_EQ(tests[i].expected, |
| 773 net::GetFileNameFromCD(tests[i].header_field, | 773 UTF8ToWide(net::GetFileNameFromCD(tests[i].header_field, |
| 774 tests[i].referrer_charset)); | 774 tests[i].referrer_charset))); |
| 775 } | 775 } |
| 776 } | 776 } |
| 777 | 777 |
| 778 TEST(NetUtilTest, IDNToUnicodeFast) { | 778 TEST(NetUtilTest, IDNToUnicodeFast) { |
| 779 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(idn_cases); i++) { | 779 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(idn_cases); i++) { |
| 780 for (size_t j = 0; j < arraysize(kLanguages); j++) { | 780 for (size_t j = 0; j < arraysize(kLanguages); j++) { |
| 781 // ja || zh-TW,en || ko,ja -> IDNToUnicodeSlow | 781 // ja || zh-TW,en || ko,ja -> IDNToUnicodeSlow |
| 782 if (j == 3 || j == 17 || j == 18) | 782 if (j == 3 || j == 17 || j == 18) |
| 783 continue; | 783 continue; |
| 784 std::wstring output; | 784 std::wstring output; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 EXPECT_EQ(L"", net::StripWWW(L"www.")); | 846 EXPECT_EQ(L"", net::StripWWW(L"www.")); |
| 847 EXPECT_EQ(L"blah", net::StripWWW(L"www.blah")); | 847 EXPECT_EQ(L"blah", net::StripWWW(L"www.blah")); |
| 848 EXPECT_EQ(L"blah", net::StripWWW(L"blah")); | 848 EXPECT_EQ(L"blah", net::StripWWW(L"blah")); |
| 849 } | 849 } |
| 850 | 850 |
| 851 TEST(NetUtilTest, GetSuggestedFilename) { | 851 TEST(NetUtilTest, GetSuggestedFilename) { |
| 852 const SuggestedFilenameCase test_cases[] = { | 852 const SuggestedFilenameCase test_cases[] = { |
| 853 {"http://www.google.com/", | 853 {"http://www.google.com/", |
| 854 "Content-disposition: attachment; filename=test.html", | 854 "Content-disposition: attachment; filename=test.html", |
| 855 "", | 855 "", |
| 856 L"", | 856 "", |
| 857 L"test.html"}, | 857 L"test.html"}, |
| 858 {"http://www.google.com/", | 858 {"http://www.google.com/", |
| 859 "Content-disposition: attachment; filename=\"test.html\"", | 859 "Content-disposition: attachment; filename=\"test.html\"", |
| 860 "", | 860 "", |
| 861 L"", | 861 "", |
| 862 L"test.html"}, | 862 L"test.html"}, |
| 863 {"http://www.google.com/path/test.html", | 863 {"http://www.google.com/path/test.html", |
| 864 "Content-disposition: attachment", | 864 "Content-disposition: attachment", |
| 865 "", | 865 "", |
| 866 L"", | 866 "", |
| 867 L"test.html"}, | 867 L"test.html"}, |
| 868 {"http://www.google.com/path/test.html", | 868 {"http://www.google.com/path/test.html", |
| 869 "Content-disposition: attachment;", | 869 "Content-disposition: attachment;", |
| 870 "", | 870 "", |
| 871 L"", | 871 "", |
| 872 L"test.html"}, | 872 L"test.html"}, |
| 873 {"http://www.google.com/", | 873 {"http://www.google.com/", |
| 874 "", | 874 "", |
| 875 "", | 875 "", |
| 876 L"", | 876 "", |
| 877 L"www.google.com"}, | 877 L"www.google.com"}, |
| 878 {"http://www.google.com/test.html", | 878 {"http://www.google.com/test.html", |
| 879 "", | 879 "", |
| 880 "", | 880 "", |
| 881 L"", | 881 "", |
| 882 L"test.html"}, | 882 L"test.html"}, |
| 883 // Now that we use googleurl's ExtractFileName, this case falls back | 883 // Now that we use googleurl's ExtractFileName, this case falls back |
| 884 // to the hostname. If this behavior is not desirable, we'd better | 884 // to the hostname. If this behavior is not desirable, we'd better |
| 885 // change ExtractFileName (in url_parse). | 885 // change ExtractFileName (in url_parse). |
| 886 {"http://www.google.com/path/", | 886 {"http://www.google.com/path/", |
| 887 "", | 887 "", |
| 888 "", | 888 "", |
| 889 L"", | 889 "", |
| 890 L"www.google.com"}, | 890 L"www.google.com"}, |
| 891 {"http://www.google.com/path", | 891 {"http://www.google.com/path", |
| 892 "", | 892 "", |
| 893 "", | 893 "", |
| 894 L"", | 894 "", |
| 895 L"path"}, | 895 L"path"}, |
| 896 {"file:///", | 896 {"file:///", |
| 897 "", | 897 "", |
| 898 "", | 898 "", |
| 899 L"", | 899 "", |
| 900 L"download"}, | 900 L"download"}, |
| 901 {"non-standard-scheme:", | 901 {"non-standard-scheme:", |
| 902 "", | 902 "", |
| 903 "", | 903 "", |
| 904 L"", | 904 "", |
| 905 L"download"}, | 905 L"download"}, |
| 906 {"http://www.google.com/", | 906 {"http://www.google.com/", |
| 907 "Content-disposition: attachment; filename =\"test.html\"", | 907 "Content-disposition: attachment; filename =\"test.html\"", |
| 908 "", | 908 "", |
| 909 L"download", | 909 "download", |
| 910 L"test.html"}, | 910 L"test.html"}, |
| 911 {"http://www.google.com/", | 911 {"http://www.google.com/", |
| 912 "", | 912 "", |
| 913 "", | 913 "", |
| 914 L"download", | 914 "download", |
| 915 L"download"}, | 915 L"download"}, |
| 916 {"http://www.google.com/", | 916 {"http://www.google.com/", |
| 917 "Content-disposition: attachment; filename=\"../test.html\"", | 917 "Content-disposition: attachment; filename=\"../test.html\"", |
| 918 "", | 918 "", |
| 919 L"", | 919 "", |
| 920 L"test.html"}, | 920 L"test.html"}, |
| 921 {"http://www.google.com/", | 921 {"http://www.google.com/", |
| 922 "Content-disposition: attachment; filename=\"..\"", | 922 "Content-disposition: attachment; filename=\"..\"", |
| 923 "", | 923 "", |
| 924 L"download", | 924 "download", |
| 925 L"download"}, | 925 L"download"}, |
| 926 {"http://www.google.com/test.html", | 926 {"http://www.google.com/test.html", |
| 927 "Content-disposition: attachment; filename=\"..\"", | 927 "Content-disposition: attachment; filename=\"..\"", |
| 928 "", | 928 "", |
| 929 L"download", | 929 "download", |
| 930 L"test.html"}, | 930 L"test.html"}, |
| 931 // Below is a small subset of cases taken from GetFileNameFromCD test above. | 931 // Below is a small subset of cases taken from GetFileNameFromCD test above. |
| 932 {"http://www.google.com/", | 932 {"http://www.google.com/", |
| 933 "Content-Disposition: attachment; filename=\"%EC%98%88%EC%88%A0%20" | 933 "Content-Disposition: attachment; filename=\"%EC%98%88%EC%88%A0%20" |
| 934 "%EC%98%88%EC%88%A0.jpg\"", | 934 "%EC%98%88%EC%88%A0.jpg\"", |
| 935 "", | 935 "", |
| 936 L"", | 936 "", |
| 937 L"\uc608\uc220 \uc608\uc220.jpg"}, | 937 L"\uc608\uc220 \uc608\uc220.jpg"}, |
| 938 {"http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", | 938 {"http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", |
| 939 "", | 939 "", |
| 940 "", | 940 "", |
| 941 L"download", | 941 "download", |
| 942 L"\uc608\uc220 \uc608\uc220.jpg"}, | 942 L"\uc608\uc220 \uc608\uc220.jpg"}, |
| 943 {"http://www.google.com/", | 943 {"http://www.google.com/", |
| 944 "Content-disposition: attachment;", | 944 "Content-disposition: attachment;", |
| 945 "", | 945 "", |
| 946 L"\uB2E4\uC6B4\uB85C\uB4DC", | 946 "\xEB\x8B\xA4\xEC\x9A\xB4\xEB\xA1\x9C\xEB\x93\x9C", |
| 947 L"\uB2E4\uC6B4\uB85C\uB4DC"}, | 947 L"\uB2E4\uC6B4\uB85C\uB4DC"}, |
| 948 {"http://www.google.com/", | 948 {"http://www.google.com/", |
| 949 "Content-Disposition: attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" | 949 "Content-Disposition: attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" |
| 950 "D13=2Epng?=\"", | 950 "D13=2Epng?=\"", |
| 951 "", | 951 "", |
| 952 L"download", | 952 "download", |
| 953 L"\u82b8\u88533.png"}, | 953 L"\u82b8\u88533.png"}, |
| 954 {"http://www.example.com/images?id=3", | 954 {"http://www.example.com/images?id=3", |
| 955 "Content-Disposition: attachment; filename=caf\xc3\xa9.png", | 955 "Content-Disposition: attachment; filename=caf\xc3\xa9.png", |
| 956 "iso-8859-1", | 956 "iso-8859-1", |
| 957 L"", | 957 "", |
| 958 L"caf\u00e9.png"}, | 958 L"caf\u00e9.png"}, |
| 959 {"http://www.example.com/images?id=3", | 959 {"http://www.example.com/images?id=3", |
| 960 "Content-Disposition: attachment; filename=caf\xe5.png", | 960 "Content-Disposition: attachment; filename=caf\xe5.png", |
| 961 "windows-1253", | 961 "windows-1253", |
| 962 L"", | 962 "", |
| 963 L"caf\u03b5.png"}, | 963 L"caf\u03b5.png"}, |
| 964 {"http://www.example.com/file?id=3", | 964 {"http://www.example.com/file?id=3", |
| 965 "Content-Disposition: attachment; name=\xcf\xc2\xd4\xd8.zip", | 965 "Content-Disposition: attachment; name=\xcf\xc2\xd4\xd8.zip", |
| 966 "GBK", | 966 "GBK", |
| 967 L"", | 967 "", |
| 968 L"\u4e0b\u8f7d.zip"}, | 968 L"\u4e0b\u8f7d.zip"}, |
| 969 // Invalid C-D header. Extracts filename from url. | 969 // Invalid C-D header. Extracts filename from url. |
| 970 {"http://www.google.com/test.html", | 970 {"http://www.google.com/test.html", |
| 971 "Content-Disposition: attachment; filename==?iiso88591?Q?caf=EG?=", | 971 "Content-Disposition: attachment; filename==?iiso88591?Q?caf=EG?=", |
| 972 "", | 972 "", |
| 973 L"", | 973 "", |
| 974 L"test.html"}, | 974 L"test.html"}, |
| 975 // about: and data: URLs | 975 // about: and data: URLs |
| 976 {"about:chrome", | 976 {"about:chrome", |
| 977 "", | 977 "", |
| 978 "", | 978 "", |
| 979 L"", | 979 "", |
| 980 L"download"}, | 980 L"download"}, |
| 981 {"data:,looks/like/a.path", | 981 {"data:,looks/like/a.path", |
| 982 "", | 982 "", |
| 983 "", | 983 "", |
| 984 L"", | 984 "", |
| 985 L"download"}, | 985 L"download"}, |
| 986 {"data:text/plain;base64,VG8gYmUgb3Igbm90IHRvIGJlLg=", | 986 {"data:text/plain;base64,VG8gYmUgb3Igbm90IHRvIGJlLg=", |
| 987 "", | 987 "", |
| 988 "", | 988 "", |
| 989 L"", | 989 "", |
| 990 L"download"}, | 990 L"download"}, |
| 991 }; | 991 }; |
| 992 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 992 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
| 993 std::wstring filename = net::GetSuggestedFilename( | 993 FilePath filename = net::GetSuggestedFilename( |
| 994 GURL(test_cases[i].url), test_cases[i].content_disp_header, | 994 GURL(test_cases[i].url), test_cases[i].content_disp_header, |
| 995 test_cases[i].referrer_charset, test_cases[i].default_filename); | 995 test_cases[i].referrer_charset, test_cases[i].default_filename); |
| 996 EXPECT_EQ(std::wstring(test_cases[i].expected_filename), filename); | 996 #if defined(OS_WIN) |
| 997 EXPECT_EQ(std::wstring(test_cases[i].expected_filename), filename.value()) |
| 998 #else |
| 999 EXPECT_EQ(WideToUTF8(test_cases[i].expected_filename), filename.value()) |
| 1000 #endif |
| 1001 << "Iteration " << i << ": " << test_cases[i].url; |
| 997 } | 1002 } |
| 998 } | 1003 } |
| 999 | 1004 |
| 1000 // This is currently a windows specific function. | 1005 // This is currently a windows specific function. |
| 1001 #if defined(OS_WIN) | 1006 #if defined(OS_WIN) |
| 1002 namespace { | 1007 namespace { |
| 1003 | 1008 |
| 1004 struct GetDirectoryListingEntryCase { | 1009 struct GetDirectoryListingEntryCase { |
| 1005 const wchar_t* name; | 1010 const wchar_t* name; |
| 1006 const char* raw_bytes; | 1011 const char* raw_bytes; |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1434 net::SetExplicitlyAllowedPorts(invalid[i]); | 1439 net::SetExplicitlyAllowedPorts(invalid[i]); |
| 1435 EXPECT_EQ(0, static_cast<int>(net::explicitly_allowed_ports.size())); | 1440 EXPECT_EQ(0, static_cast<int>(net::explicitly_allowed_ports.size())); |
| 1436 } | 1441 } |
| 1437 | 1442 |
| 1438 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(valid); ++i) { | 1443 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(valid); ++i) { |
| 1439 net::SetExplicitlyAllowedPorts(valid[i]); | 1444 net::SetExplicitlyAllowedPorts(valid[i]); |
| 1440 EXPECT_EQ(i, net::explicitly_allowed_ports.size()); | 1445 EXPECT_EQ(i, net::explicitly_allowed_ports.size()); |
| 1441 } | 1446 } |
| 1442 } | 1447 } |
| 1443 | 1448 |
| OLD | NEW |