| 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/sys_string_conversions.h" |
| 8 #include "base/time.h" | 9 #include "base/time.h" |
| 9 #include "googleurl/src/gurl.h" | 10 #include "googleurl/src/gurl.h" |
| 10 #include "net/base/escape.h" | 11 #include "net/base/escape.h" |
| 11 #include "net/base/net_util.h" | 12 #include "net/base/net_util.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 14 |
| 14 #if defined(OS_WIN) | 15 #if defined(OS_WIN) |
| 15 #include <ws2tcpip.h> | 16 #include <ws2tcpip.h> |
| 16 #else | 17 #else |
| 17 #include <netdb.h> | 18 #include <netdb.h> |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 | 347 |
| 347 struct CompliantHostCase { | 348 struct CompliantHostCase { |
| 348 const char* host; | 349 const char* host; |
| 349 bool expected_output; | 350 bool expected_output; |
| 350 }; | 351 }; |
| 351 | 352 |
| 352 struct SuggestedFilenameCase { | 353 struct SuggestedFilenameCase { |
| 353 const char* url; | 354 const char* url; |
| 354 const char* content_disp_header; | 355 const char* content_disp_header; |
| 355 const char* referrer_charset; | 356 const char* referrer_charset; |
| 356 const char* default_filename; | 357 const wchar_t* default_filename; |
| 357 const wchar_t* expected_filename; | 358 const wchar_t* expected_filename; |
| 358 }; | 359 }; |
| 359 | 360 |
| 360 struct UrlTestData { | 361 struct UrlTestData { |
| 361 const char* description; | 362 const char* description; |
| 362 const char* input; | 363 const char* input; |
| 363 const std::wstring languages; | 364 const std::wstring languages; |
| 364 bool omit; | 365 bool omit; |
| 365 UnescapeRule::Type escape_rules; | 366 UnescapeRule::Type escape_rules; |
| 366 const std::wstring output; | 367 const std::wstring output; |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 849 EXPECT_EQ(L"", net::StripWWW(L"www.")); | 850 EXPECT_EQ(L"", net::StripWWW(L"www.")); |
| 850 EXPECT_EQ(L"blah", net::StripWWW(L"www.blah")); | 851 EXPECT_EQ(L"blah", net::StripWWW(L"www.blah")); |
| 851 EXPECT_EQ(L"blah", net::StripWWW(L"blah")); | 852 EXPECT_EQ(L"blah", net::StripWWW(L"blah")); |
| 852 } | 853 } |
| 853 | 854 |
| 854 TEST(NetUtilTest, GetSuggestedFilename) { | 855 TEST(NetUtilTest, GetSuggestedFilename) { |
| 855 const SuggestedFilenameCase test_cases[] = { | 856 const SuggestedFilenameCase test_cases[] = { |
| 856 {"http://www.google.com/", | 857 {"http://www.google.com/", |
| 857 "Content-disposition: attachment; filename=test.html", | 858 "Content-disposition: attachment; filename=test.html", |
| 858 "", | 859 "", |
| 859 "", | 860 L"", |
| 860 L"test.html"}, | 861 L"test.html"}, |
| 861 {"http://www.google.com/", | 862 {"http://www.google.com/", |
| 862 "Content-disposition: attachment; filename=\"test.html\"", | 863 "Content-disposition: attachment; filename=\"test.html\"", |
| 863 "", | 864 "", |
| 864 "", | 865 L"", |
| 865 L"test.html"}, | 866 L"test.html"}, |
| 866 {"http://www.google.com/path/test.html", | 867 {"http://www.google.com/path/test.html", |
| 867 "Content-disposition: attachment", | 868 "Content-disposition: attachment", |
| 868 "", | 869 "", |
| 869 "", | 870 L"", |
| 870 L"test.html"}, | 871 L"test.html"}, |
| 871 {"http://www.google.com/path/test.html", | 872 {"http://www.google.com/path/test.html", |
| 872 "Content-disposition: attachment;", | 873 "Content-disposition: attachment;", |
| 873 "", | 874 "", |
| 874 "", | 875 L"", |
| 875 L"test.html"}, | 876 L"test.html"}, |
| 876 {"http://www.google.com/", | 877 {"http://www.google.com/", |
| 877 "", | 878 "", |
| 878 "", | 879 "", |
| 879 "", | 880 L"", |
| 880 L"www.google.com"}, | 881 L"www.google.com"}, |
| 881 {"http://www.google.com/test.html", | 882 {"http://www.google.com/test.html", |
| 882 "", | 883 "", |
| 883 "", | 884 "", |
| 884 "", | 885 L"", |
| 885 L"test.html"}, | 886 L"test.html"}, |
| 886 // Now that we use googleurl's ExtractFileName, this case falls back | 887 // Now that we use googleurl's ExtractFileName, this case falls back |
| 887 // to the hostname. If this behavior is not desirable, we'd better | 888 // to the hostname. If this behavior is not desirable, we'd better |
| 888 // change ExtractFileName (in url_parse). | 889 // change ExtractFileName (in url_parse). |
| 889 {"http://www.google.com/path/", | 890 {"http://www.google.com/path/", |
| 890 "", | 891 "", |
| 891 "", | 892 "", |
| 892 "", | 893 L"", |
| 893 L"www.google.com"}, | 894 L"www.google.com"}, |
| 894 {"http://www.google.com/path", | 895 {"http://www.google.com/path", |
| 895 "", | 896 "", |
| 896 "", | 897 "", |
| 897 "", | 898 L"", |
| 898 L"path"}, | 899 L"path"}, |
| 899 {"file:///", | 900 {"file:///", |
| 900 "", | 901 "", |
| 901 "", | 902 "", |
| 902 "", | 903 L"", |
| 903 L"download"}, | 904 L"download"}, |
| 904 {"non-standard-scheme:", | 905 {"non-standard-scheme:", |
| 905 "", | 906 "", |
| 906 "", | 907 "", |
| 907 "", | 908 L"", |
| 908 L"download"}, | 909 L"download"}, |
| 909 {"http://www.google.com/", | 910 {"http://www.google.com/", |
| 910 "Content-disposition: attachment; filename =\"test.html\"", | 911 "Content-disposition: attachment; filename =\"test.html\"", |
| 911 "", | 912 "", |
| 912 "download", | 913 L"download", |
| 913 L"test.html"}, | 914 L"test.html"}, |
| 914 {"http://www.google.com/", | 915 {"http://www.google.com/", |
| 915 "", | 916 "", |
| 916 "", | 917 "", |
| 917 "download", | 918 L"download", |
| 918 L"download"}, | 919 L"download"}, |
| 919 {"http://www.google.com/", | 920 {"http://www.google.com/", |
| 920 "Content-disposition: attachment; filename=\"../test.html\"", | 921 "Content-disposition: attachment; filename=\"../test.html\"", |
| 921 "", | 922 "", |
| 922 "", | 923 L"", |
| 923 L"test.html"}, | 924 L"test.html"}, |
| 924 {"http://www.google.com/", | 925 {"http://www.google.com/", |
| 925 "Content-disposition: attachment; filename=\"..\"", | 926 "Content-disposition: attachment; filename=\"..\"", |
| 926 "", | 927 "", |
| 927 "download", | 928 L"download", |
| 928 L"download"}, | 929 L"download"}, |
| 929 {"http://www.google.com/test.html", | 930 {"http://www.google.com/test.html", |
| 930 "Content-disposition: attachment; filename=\"..\"", | 931 "Content-disposition: attachment; filename=\"..\"", |
| 931 "", | 932 "", |
| 932 "download", | 933 L"download", |
| 933 L"test.html"}, | 934 L"test.html"}, |
| 934 // Below is a small subset of cases taken from GetFileNameFromCD test above. | 935 // Below is a small subset of cases taken from GetFileNameFromCD test above. |
| 935 {"http://www.google.com/", | 936 {"http://www.google.com/", |
| 936 "Content-Disposition: attachment; filename=\"%EC%98%88%EC%88%A0%20" | 937 "Content-Disposition: attachment; filename=\"%EC%98%88%EC%88%A0%20" |
| 937 "%EC%98%88%EC%88%A0.jpg\"", | 938 "%EC%98%88%EC%88%A0.jpg\"", |
| 938 "", | 939 "", |
| 939 "", | 940 L"", |
| 940 L"\uc608\uc220 \uc608\uc220.jpg"}, | 941 L"\uc608\uc220 \uc608\uc220.jpg"}, |
| 941 {"http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", | 942 {"http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", |
| 942 "", | 943 "", |
| 943 "", | 944 "", |
| 944 "download", | 945 L"download", |
| 945 L"\uc608\uc220 \uc608\uc220.jpg"}, | 946 L"\uc608\uc220 \uc608\uc220.jpg"}, |
| 946 {"http://www.google.com/", | 947 {"http://www.google.com/", |
| 947 "Content-disposition: attachment;", | 948 "Content-disposition: attachment;", |
| 948 "", | 949 "", |
| 949 "\xEB\x8B\xA4\xEC\x9A\xB4\xEB\xA1\x9C\xEB\x93\x9C", | 950 L"\uB2E4\uC6B4\uB85C\uB4DC", |
| 950 L"\uB2E4\uC6B4\uB85C\uB4DC"}, | 951 L"\uB2E4\uC6B4\uB85C\uB4DC"}, |
| 951 {"http://www.google.com/", | 952 {"http://www.google.com/", |
| 952 "Content-Disposition: attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" | 953 "Content-Disposition: attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" |
| 953 "D13=2Epng?=\"", | 954 "D13=2Epng?=\"", |
| 954 "", | 955 "", |
| 955 "download", | 956 L"download", |
| 956 L"\u82b8\u88533.png"}, | 957 L"\u82b8\u88533.png"}, |
| 957 {"http://www.example.com/images?id=3", | 958 {"http://www.example.com/images?id=3", |
| 958 "Content-Disposition: attachment; filename=caf\xc3\xa9.png", | 959 "Content-Disposition: attachment; filename=caf\xc3\xa9.png", |
| 959 "iso-8859-1", | 960 "iso-8859-1", |
| 960 "", | 961 L"", |
| 961 L"caf\u00e9.png"}, | 962 L"caf\u00e9.png"}, |
| 962 {"http://www.example.com/images?id=3", | 963 {"http://www.example.com/images?id=3", |
| 963 "Content-Disposition: attachment; filename=caf\xe5.png", | 964 "Content-Disposition: attachment; filename=caf\xe5.png", |
| 964 "windows-1253", | 965 "windows-1253", |
| 965 "", | 966 L"", |
| 966 L"caf\u03b5.png"}, | 967 L"caf\u03b5.png"}, |
| 967 {"http://www.example.com/file?id=3", | 968 {"http://www.example.com/file?id=3", |
| 968 "Content-Disposition: attachment; name=\xcf\xc2\xd4\xd8.zip", | 969 "Content-Disposition: attachment; name=\xcf\xc2\xd4\xd8.zip", |
| 969 "GBK", | 970 "GBK", |
| 970 "", | 971 L"", |
| 971 L"\u4e0b\u8f7d.zip"}, | 972 L"\u4e0b\u8f7d.zip"}, |
| 972 // Invalid C-D header. Extracts filename from url. | 973 // Invalid C-D header. Extracts filename from url. |
| 973 {"http://www.google.com/test.html", | 974 {"http://www.google.com/test.html", |
| 974 "Content-Disposition: attachment; filename==?iiso88591?Q?caf=EG?=", | 975 "Content-Disposition: attachment; filename==?iiso88591?Q?caf=EG?=", |
| 975 "", | 976 "", |
| 976 "", | 977 L"", |
| 977 L"test.html"}, | 978 L"test.html"}, |
| 978 // about: and data: URLs | 979 // about: and data: URLs |
| 979 {"about:chrome", | 980 {"about:chrome", |
| 980 "", | 981 "", |
| 981 "", | 982 "", |
| 982 "", | 983 L"", |
| 983 L"download"}, | 984 L"download"}, |
| 984 {"data:,looks/like/a.path", | 985 {"data:,looks/like/a.path", |
| 985 "", | 986 "", |
| 986 "", | 987 "", |
| 987 "", | 988 L"", |
| 988 L"download"}, | 989 L"download"}, |
| 989 {"data:text/plain;base64,VG8gYmUgb3Igbm90IHRvIGJlLg=", | 990 {"data:text/plain;base64,VG8gYmUgb3Igbm90IHRvIGJlLg=", |
| 990 "", | 991 "", |
| 991 "", | 992 "", |
| 993 L"", |
| 994 L"download"}, |
| 995 {"data:,looks/like/a.path", |
| 992 "", | 996 "", |
| 993 L"download"}, | 997 "", |
| 998 L"default_filename_is_given", |
| 999 L"default_filename_is_given"}, |
| 1000 {"data:,looks/like/a.path", |
| 1001 "", |
| 1002 "", |
| 1003 L"\u65e5\u672c\u8a9e", // Japanese Kanji. |
| 1004 L"\u65e5\u672c\u8a9e"}, |
| 994 }; | 1005 }; |
| 995 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 1006 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
| 1007 #if defined(OS_WIN) |
| 1008 FilePath default_name(test_cases[i].default_filename); |
| 1009 #else |
| 1010 FilePath default_name( |
| 1011 base::SysWideToNativeMB(test_cases[i].default_filename)); |
| 1012 #endif |
| 996 FilePath filename = net::GetSuggestedFilename( | 1013 FilePath filename = net::GetSuggestedFilename( |
| 997 GURL(test_cases[i].url), test_cases[i].content_disp_header, | 1014 GURL(test_cases[i].url), test_cases[i].content_disp_header, |
| 998 test_cases[i].referrer_charset, test_cases[i].default_filename); | 1015 test_cases[i].referrer_charset, default_name); |
| 999 #if defined(OS_WIN) | 1016 #if defined(OS_WIN) |
| 1000 EXPECT_EQ(std::wstring(test_cases[i].expected_filename), filename.value()) | 1017 EXPECT_EQ(std::wstring(test_cases[i].expected_filename), filename.value()) |
| 1001 #else | 1018 #else |
| 1002 EXPECT_EQ(WideToUTF8(test_cases[i].expected_filename), filename.value()) | 1019 EXPECT_EQ(base::SysWideToNativeMB(test_cases[i].expected_filename), |
| 1020 filename.value()) |
| 1003 #endif | 1021 #endif |
| 1004 << "Iteration " << i << ": " << test_cases[i].url; | 1022 << "Iteration " << i << ": " << test_cases[i].url; |
| 1005 } | 1023 } |
| 1006 } | 1024 } |
| 1007 | 1025 |
| 1008 // This is currently a windows specific function. | 1026 // This is currently a windows specific function. |
| 1009 #if defined(OS_WIN) | 1027 #if defined(OS_WIN) |
| 1010 namespace { | 1028 namespace { |
| 1011 | 1029 |
| 1012 struct GetDirectoryListingEntryCase { | 1030 struct GetDirectoryListingEntryCase { |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 net::SetExplicitlyAllowedPorts(invalid[i]); | 1460 net::SetExplicitlyAllowedPorts(invalid[i]); |
| 1443 EXPECT_EQ(0, static_cast<int>(net::explicitly_allowed_ports.size())); | 1461 EXPECT_EQ(0, static_cast<int>(net::explicitly_allowed_ports.size())); |
| 1444 } | 1462 } |
| 1445 | 1463 |
| 1446 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(valid); ++i) { | 1464 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(valid); ++i) { |
| 1447 net::SetExplicitlyAllowedPorts(valid[i]); | 1465 net::SetExplicitlyAllowedPorts(valid[i]); |
| 1448 EXPECT_EQ(i, net::explicitly_allowed_ports.size()); | 1466 EXPECT_EQ(i, net::explicitly_allowed_ports.size()); |
| 1449 } | 1467 } |
| 1450 } | 1468 } |
| 1451 | 1469 |
| OLD | NEW |