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

Side by Side Diff: net/base/net_util_unittest.cc

Issue 271056: Do some cleanup of file path name handling. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/net_util.cc ('k') | printing/printed_document.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/base/net_util.cc ('k') | printing/printed_document.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698