1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/filename_util.h" 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/files/file_path.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/strings/string_util.h" 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/strings/utf_string_conversions.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/test/test_file_util.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "url/gurl.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace net { 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace { 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstruct FileCase { 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const wchar_t* file; 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* url; 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstruct GenerateFilenameCase { 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int lineno; 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* url; 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* content_disp_header; 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* referrer_charset; 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* suggested_filename; 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* mime_type; 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const wchar_t* default_filename; 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const wchar_t* expected_filename; 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// The expected filenames are coded as wchar_t for convenience. 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)std::wstring FilePathAsWString(const base::FilePath& path) { 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_WIN) 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return path.value(); 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return base::UTF8ToWide(path.value()); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)base::FilePath WStringAsFilePath(const std::wstring& str) { 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_WIN) 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return base::FilePath(str); 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return base::FilePath(base::WideToUTF8(str)); 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid RunGenerateFileNameTestCase(const GenerateFilenameCase* test_case) { 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string default_filename(base::WideToUTF8(test_case->default_filename)); 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath file_path = GenerateFileName( 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GURL(test_case->url), test_case->content_disp_header, 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch test_case->referrer_charset, test_case->suggested_filename, 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch test_case->mime_type, default_filename); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(test_case->expected_filename, FilePathAsWString(file_path)) 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "test case at line number: " << test_case->lineno; 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstatic const base::FilePath::CharType* kSafePortableBasenames[] = { 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a"), 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a.txt"), 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a b.txt"), 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a-b.txt"), 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("My Computer"), 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL(" Computer"), 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstatic const base::FilePath::CharType* kUnsafePortableBasenames[] = { 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL(""), 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("."), 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL(".."), 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("..."), 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("con"), 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("con.zip"), 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("NUL"), 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("NUL.zip"), 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL(".a"), 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a."), 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a\"a"), 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a<a"), 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a>a"), 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a?a"), 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a/"), 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a\\"), 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a "), 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a . ."), 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("My Computer.{a}"), 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}"), 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if !defined(OS_WIN) 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a\\a"), 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstatic const base::FilePath::CharType* kSafePortableRelativePaths[] = { 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a/a"), 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("a\\a"), 102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(FilenameUtilTest, IsSafePortablePathComponent) { 106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kSafePortableBasenames); ++i) { 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(IsSafePortablePathComponent(base::FilePath( 108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableBasenames[i]))) << kSafePortableBasenames[i]; 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kUnsafePortableBasenames); ++i) { 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(IsSafePortablePathComponent(base::FilePath( 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kUnsafePortableBasenames[i]))) << kUnsafePortableBasenames[i]; 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kSafePortableRelativePaths); ++i) { 115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(IsSafePortablePathComponent(base::FilePath( 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableRelativePaths[i]))) << kSafePortableRelativePaths[i]; 117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(FilenameUtilTest, IsSafePortableRelativePath) { 121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath safe_dirname(FILE_PATH_LITERAL("a")); 122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kSafePortableBasenames); ++i) { 123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(IsSafePortableRelativePath(base::FilePath( 124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableBasenames[i]))) << kSafePortableBasenames[i]; 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(IsSafePortableRelativePath(safe_dirname.Append(base::FilePath( 126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableBasenames[i])))) << kSafePortableBasenames[i]; 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kSafePortableRelativePaths); ++i) { 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(IsSafePortableRelativePath(base::FilePath( 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableRelativePaths[i]))) << kSafePortableRelativePaths[i]; 131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(IsSafePortableRelativePath(safe_dirname.Append(base::FilePath( 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kSafePortableRelativePaths[i])))) << kSafePortableRelativePaths[i]; 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0 ; i < arraysize(kUnsafePortableBasenames); ++i) { 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(IsSafePortableRelativePath(base::FilePath( 136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kUnsafePortableBasenames[i]))) << kUnsafePortableBasenames[i]; 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!base::FilePath::StringType(kUnsafePortableBasenames[i]).empty()) { 138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(IsSafePortableRelativePath(safe_dirname.Append( 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath(kUnsafePortableBasenames[i])))) 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << kUnsafePortableBasenames[i]; 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(FilenameUtilTest, FileURLConversion) { 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // a list of test file names and the corresponding URLs 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const FileCase round_trip_cases[] = { 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"C:\\foo\\bar.txt", "file:///C:/foo/bar.txt"}, 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"\\\\some computer\\foo\\bar.txt", 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file://some%20computer/foo/bar.txt"}, // UNC 152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\Name;with%some symbols*#", 153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/Name%3Bwith%25some%20symbols*%23"}, 154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // issue 14153: To be tested with the OS default codepage other than 1252. 155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\latin1\\caf\x00E9\x00DD.txt", 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/latin1/caf%C3%A9%C3%9D.txt"}, 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\otherlatin\\caf\x0119.txt", 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/otherlatin/caf%C4%99.txt"}, 159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\greek\\\x03B1\x03B2\x03B3.txt", 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/greek/%CE%B1%CE%B2%CE%B3.txt"}, 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\Chinese\\\x6240\x6709\x4e2d\x6587\x7f51\x9875.doc", 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/Chinese/%E6%89%80%E6%9C%89%E4%B8%AD%E6%96%87%E7%BD%91" 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "%E9%A1%B5.doc"}, 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"D:\\plane1\\\xD835\xDC00\xD835\xDC01.txt", // Math alphabet "AB" 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///D:/plane1/%F0%9D%90%80%F0%9D%90%81.txt"}, 166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#elif defined(OS_POSIX) 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:///foo/bar.txt"}, 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/BAR.txt", "file:///foo/BAR.txt"}, 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/C:/foo/bar.txt", "file:///C:/foo/bar.txt"}, 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar?.txt", "file:///foo/bar%3F.txt"}, 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/some computer/foo/bar.txt", "file:///some%20computer/foo/bar.txt"}, 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/Name;with%some symbols*#", "file:///Name%3Bwith%25some%20symbols*%23"}, 173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/latin1/caf\x00E9\x00DD.txt", "file:///latin1/caf%C3%A9%C3%9D.txt"}, 174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/otherlatin/caf\x0119.txt", "file:///otherlatin/caf%C4%99.txt"}, 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/greek/\x03B1\x03B2\x03B3.txt", "file:///greek/%CE%B1%CE%B2%CE%B3.txt"}, 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/Chinese/\x6240\x6709\x4e2d\x6587\x7f51\x9875.doc", 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///Chinese/%E6%89%80%E6%9C%89%E4%B8%AD%E6%96%87%E7%BD" 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "%91%E9%A1%B5.doc"}, 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/plane1/\x1D400\x1D401.txt", // Math alphabet "AB" 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///plane1/%F0%9D%90%80%F0%9D%90%81.txt"}, 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // First, we'll test that we can round-trip all of the above cases of URLs 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath output; 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(round_trip_cases); i++) { 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // convert to the file URL 188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GURL file_url(FilePathToFileURL( 1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WStringAsFilePath(round_trip_cases[i].file))); 190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(round_trip_cases[i].url, file_url.spec()); 191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Back to the filename. 193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(FileURLToFilePath(file_url, &output)); 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(round_trip_cases[i].file, FilePathAsWString(output)); 195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Test that various file: URLs get decoded into the correct file type 198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FileCase url_cases[] = { 199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"C:\\foo\\bar.txt", "file:c|/foo\\bar.txt"}, 201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"C:\\foo\\bar.txt", "file:/c:/foo/bar.txt"}, 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"\\\\foo\\bar.txt", "file://foo\\bar.txt"}, 203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"C:\\foo\\bar.txt", "file:///c:/foo/bar.txt"}, 204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"\\\\foo\\bar.txt", "file:////foo\\bar.txt"}, 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"\\\\foo\\bar.txt", "file:/foo/bar.txt"}, 206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"\\\\foo\\bar.txt", "file://foo\\bar.txt"}, 207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"C:\\foo\\bar.txt", "file:\\\\\\c:/foo/bar.txt"}, 208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#elif defined(OS_POSIX) 209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/c:/foo/bar.txt", "file:/c:/foo/bar.txt"}, 210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/c:/foo/bar.txt", "file:///c:/foo/bar.txt"}, 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:/foo/bar.txt"}, 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/c:/foo/bar.txt", "file:\\\\\\c:/foo/bar.txt"}, 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:foo/bar.txt"}, 214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/bar.txt", "file://foo/bar.txt"}, 215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:///foo/bar.txt"}, 216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:////foo/bar.txt"}, 217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:////foo//bar.txt"}, 218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:////foo///bar.txt"}, 219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/foo/bar.txt", "file:////foo////bar.txt"}, 220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/c:/foo/bar.txt", "file:\\\\\\c:/foo/bar.txt"}, 221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {L"/c:/foo/bar.txt", "file:c:/foo/bar.txt"}, 222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // We get these wrong because GURL turns back slashes into forward 223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // slashes. 224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch //{L"/foo%5Cbar.txt", "file://foo\\bar.txt"}, 225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch //{L"/c|/foo%5Cbar.txt", "file:c|/foo\\bar.txt"}, 226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch //{L"/foo%5Cbar.txt", "file://foo\\bar.txt"}, 227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch //{L"/foo%5Cbar.txt", "file:////foo\\bar.txt"}, 228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch //{L"/foo%5Cbar.txt", "file://foo\\bar.txt"}, 229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 231c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(url_cases); i++) { 232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FileURLToFilePath(GURL(url_cases[i].url), &output); 2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(url_cases[i].file, FilePathAsWString(output)); 234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 235c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 236c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Unfortunately, UTF8ToWide discards invalid UTF8 input. 237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifdef BUG_878908_IS_FIXED 238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Test that no conversion happens if the UTF-8 input is invalid, and that 239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the input is preserved in UTF-8 240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char invalid_utf8[] = "file:///d:/Blah/\xff.doc"; 241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const wchar_t invalid_wide[] = L"D:\\Blah\\\xff.doc"; 242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(FileURLToFilePath( 243c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GURL(std::string(invalid_utf8)), &output)); 244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(std::wstring(invalid_wide), output); 245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 246c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 247c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Test that if a file URL is malformed, we get a failure 248c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(FileURLToFilePath(GURL("filefoobar"), &output)); 249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 251c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 252c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define JPEG_EXT L".jpg" 253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define HTML_EXT L".htm" 254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#elif defined(OS_MACOSX) 255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define JPEG_EXT L".jpeg" 256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define HTML_EXT L".html" 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define JPEG_EXT L".jpg" 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define HTML_EXT L".html" 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define TXT_EXT L".txt" 262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define TAR_EXT L".tar" 263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(FilenameUtilTest, GenerateSafeFileName) { 265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const struct { 266c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* mime_type; 267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::FilePath::CharType* filename; 268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::FilePath::CharType* expected_filename; 269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } safe_tests[] = { 270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.htm"), 274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.htm") 275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.html"), 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.html") 280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar"), 284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.htm") 285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 287c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 288c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\bar.html"), 289c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\bar.html") 290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 291c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 292c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 293c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\bar"), 294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\bar.png") 295c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 297c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.exe"), 299c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.exe") 300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 301c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/gif", 303c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.exe"), 304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.exe") 305c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 306c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 307c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 308c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\google.com"), 309c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\google.com") 310c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 311c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 313c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\con.htm"), 314c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\_con.htm") 315c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 316c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 317c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\con"), 319c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\_con.htm") 320c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 321c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 322c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.{not-really-this-may-be-a-guid}"), 324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.download") 325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 328c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.local"), 329c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.download") 330c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.lnk"), 334c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.download") 335c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 337c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 338c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.{mismatched-"), 339c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\harmless.{mismatched-") 340c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 341c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Allow extension synonyms. 342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 343c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 344c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.jpg"), 345c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.jpg") 346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.jpeg"), 350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("C:\\foo\\bar.jpeg") 351c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else // !defined(OS_WIN) 353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.htm"), 356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.htm") 357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.html"), 361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.html") 362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar"), 366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.html") 367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.html"), 371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.html") 372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 373c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 374c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 375c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar"), 376c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.png") 377c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 378c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 379c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/gif", 380c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.exe"), 381c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/bar.exe") 382c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 383c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 384c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 385c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/google.com"), 386c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/google.com") 387c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 388c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 389c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 390c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/con.htm"), 391c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/con.htm") 392c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 393c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 394c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 395c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/con"), 396c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/foo/con.html") 397c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 398c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Allow extension synonyms. 399c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 400c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 401c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.jpg"), 402c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.jpg") 403c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 404c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 405c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 406c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.jpeg"), 407c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FILE_PATH_LITERAL("/bar.jpeg") 408c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 409c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // !defined(OS_WIN) 410c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 411c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 412c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(safe_tests); ++i) { 413c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath file_path(safe_tests[i].filename); 414c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GenerateSafeFileName(safe_tests[i].mime_type, false, &file_path); 415c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(safe_tests[i].expected_filename, file_path.value()) 416c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "Iteration " << i; 417c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 418c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 419c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 420c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(FilenameUtilTest, GenerateFileName) { 421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 422c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // This test doesn't run when the locale is not UTF-8 because some of the 423c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // string conversions fail. This is OK (we have the default value) but they 424c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // don't match our expectations. 425c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string locale = setlocale(LC_CTYPE, NULL); 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::StringToLowerASCII(&locale); 427c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(locale.find("utf-8") != std::string::npos || 428c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch locale.find("utf8") != std::string::npos) 429c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "Your locale (" << locale << ") must be set to UTF-8 " 430c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "for this test to pass!"; 431c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 432c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 433c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Tests whether the correct filename is selected from the the given 434c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // parameters and that Content-Disposition headers are properly 435c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // handled including failovers when the header is malformed. 436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const GenerateFilenameCase selection_tests[] = { 437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 438c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 439c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 440c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=test.html", 441c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 442c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 443c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 444c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 445c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 446c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 447c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 448c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 449c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 450c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"test.html\"", 451c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 452c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 453c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 454c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 455c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 456c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 457c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 458c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 459c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 460c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename= \"test.html\"", 461c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 462c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 463c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 464c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 465c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 466c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 467c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 468c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 469c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 470c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename = \"test.html\"", 471c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 472c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 473c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 474c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 475c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 476c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 477c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // filename is whitespace. Should failover to URL host 478c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 479c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 480c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename= ", 481c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 482c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 483c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 484c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 485c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"www.google.com" 486c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 487c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // No filename. 488c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 489c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/path/test.html", 490c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment", 491c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 492c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 493c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 494c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 495c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 496c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 497c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Ditto 498c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 499c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/path/test.html", 500c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment;", 501c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 502c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 503c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 504c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 505c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 506c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 507c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // No C-D 508c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 509c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 510c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 511c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 512c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 513c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 514c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 515c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"www.google.com" 516c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 517c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 518c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 519c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/test.html", 520c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 521c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 522c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 523c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 524c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 525c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 526c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 527c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Now that we use src/url's ExtractFileName, this case falls back to 528c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the hostname. If this behavior is not desirable, we'd better change 529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // ExtractFileName (in url_parse.cc). 530c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 531c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/path/", 532c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 533c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 534c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 535c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 536c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 537c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"www.google.com" 538c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 539c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 540c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 541c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/path", 542c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 543c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 544c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 545c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"path" 548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 550c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 551c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///", 552c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 553c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 554c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 555c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 556c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 557c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 558c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 559c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 560c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 561c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "file:///path/testfile", 562c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 563c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 564c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 565c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 566c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 567c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"testfile" 568c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 569c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 570c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 571c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "non-standard-scheme:", 572c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 573c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 574c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 575c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 576c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 577c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 578c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 579c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // C-D should override default 580c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 581c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 582c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename =\"test.html\"", 583c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 584c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 585c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 586c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 587c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 588c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 589c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // But the URL shouldn't 590c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 591c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 592c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 593c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 594c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 595c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 596c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 597c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 600c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 601c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 602c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"../test.html\"", 603c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 604c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 605c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 606c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 607c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-test.html" 608c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 609c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 610c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 611c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 612c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"..\\test.html\"", 613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 622c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"..\\\\test.html\"", 623c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 624c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 625c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 626c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 627c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-test.html" 628c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 629c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Filename disappears after leading and trailing periods are removed. 630c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 631c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"..\"", 633c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 634c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 635c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default", 637c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default" 638c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // C-D specified filename disappears. Failover to final filename. 640c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 641c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/test.html", 642c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"..\"", 643c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 644c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 645c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 646c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default", 647c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default" 648c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 649c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Below is a small subset of cases taken from HttpContentDisposition tests. 650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 651c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 652c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 653c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"%EC%98%88%EC%88%A0%20" 654c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "%EC%98%88%EC%88%A0.jpg\"", 655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 656c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 658c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 659c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uc608\uc220 \uc608\uc220.jpg" 660c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 661c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 662c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 663c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", 664c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 665c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 666c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 667c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 668c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 669c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uc608\uc220 \uc608\uc220.jpg" 670c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 671c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 672c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 673c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 674c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment;", 675c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 677c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 678c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uB2E4\uC6B4\uB85C\uB4DC", 679c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uB2E4\uC6B4\uB85C\uB4DC" 680c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 681c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 682c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 683c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/", 684c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"=?EUC-JP?Q?=B7=DD=BD=" 685c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "D13=2Epng?=\"", 686c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 687c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 688c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 689c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 690c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\u82b8\u88533.png" 691c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 692c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 693c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 694c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/images?id=3", 695c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=caf\xc3\xa9.png", 696c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "iso-8859-1", 697c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 698c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 699c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 700c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"caf\u00e9.png" 701c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 702c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 703c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 704c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/images?id=3", 705c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=caf\xe5.png", 706c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "windows-1253", 707c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 708c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 709c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 710c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"caf\u03b5.png" 711c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 712c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 713c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 714c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/file?id=3", 715c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; name=\xcf\xc2\xd4\xd8.zip", 716c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "GBK", 717c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 718c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 719c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 720c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\u4e0b\u8f7d.zip" 721c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 722c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Invalid C-D header. Extracts filename from url. 723c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 724c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/test.html", 725c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename==?iiso88591?Q?caf=EG?=", 726c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 727c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 728c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 729c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 730c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 731c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 732c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // about: and data: URLs 733c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 734c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 735c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "about:chrome", 736c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 737c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 738c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 739c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 740c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 741c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 742c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 743c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 744c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 745c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "data:,looks/like/a.path", 746c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 747c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 748c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 749c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 750c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 751c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 752c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 753c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 754c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 755c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "data:text/plain;base64,VG8gYmUgb3Igbm90IHRvIGJlLg=", 756c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 757c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 758c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 760c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 761c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 762c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 763c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 764c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 765c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "data:,looks/like/a.path", 766c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 767c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 768c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 769c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 770c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default_filename_is_given", 771c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default_filename_is_given" 772c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 773c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 774c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 775c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "data:,looks/like/a.path", 776c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 777c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 778c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 779c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 780c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\u65e5\u672c\u8a9e", // Japanese Kanji. 781c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\u65e5\u672c\u8a9e" 782c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 783c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // The filename encoding is specified by the referrer charset. 784c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 785c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://example.com/V%FDvojov%E1%20psychologie.doc", 786c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 787c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "iso-8859-1", 788c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 789c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 791c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"V\u00fdvojov\u00e1 psychologie.doc" 792c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 793c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Suggested filename takes precedence over URL 794c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 795c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/test", 796c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 797c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 798c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "suggested", 799c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 800c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 801c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"suggested" 802c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 803c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // The content-disposition has higher precedence over the suggested name. 804c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 805c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/test", 806c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=test.html", 807c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 808c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "suggested", 809c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 810c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 811c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 812c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 813c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if 0 814c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // The filename encoding doesn't match the referrer charset, the system 815c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // charset, or UTF-8. 816c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // TODO(jshin): we need to handle this case. 817c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 818c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://example.com/V%FDvojov%E1%20psychologie.doc", 819c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 820c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "utf-8", 821c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 822c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 823c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 824c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"V\u00fdvojov\u00e1 psychologie.doc", 825c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 826c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 827c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Raw 8bit characters in C-D 828c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 829c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 830c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/images?id=3", 831c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=caf\xc3\xa9.png", 832c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "iso-8859-1", 833c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 834c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 835c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 836c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"caf\u00e9.png" 837c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 838c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 839c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 840c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/images?id=3", 841c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=caf\xe5.png", 842c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "windows-1253", 843c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 844c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 845c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 846c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"caf\u03b5.png" 847c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 848c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // No 'filename' keyword in the disposition, use the URL 849c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 850c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/my_download.txt", 851c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "a_file_name.txt", 852c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 853c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 854c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 855c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 856c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my_download.txt" 857c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 858c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Spaces in the disposition file name 859c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 860c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.frontpagehacker.com/a_download.exe", 861c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=My Downloaded File.exe", 862c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 863c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 864c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/octet-stream", 865c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 866c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"My Downloaded File.exe" 867c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 868c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // % encoded 869c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 870c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.examples.com/", 871c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; " 872c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=\"%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg\"", 873c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 874c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 875c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 876c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 877c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uc608\uc220 \uc608\uc220.jpg" 878c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 879c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // name= parameter 880c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 881c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.examples.com/q.cgi?id=abc", 882c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; name=abc de.pdf", 883c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 884c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 885c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/octet-stream", 886c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 887c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"abc de.pdf" 888c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 889c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 890c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 891c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/path", 892c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=\"=?EUC-JP?Q?=B7=DD=BD=D13=2Epng?=\"", 893c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 894c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 895c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/png", 896c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 897c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\x82b8\x8853" L"3.png" 898c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 899c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // The following two have invalid CD headers and filenames come from the 900c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // URL. 901c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 902c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/test%20123", 903c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename==?iiso88591?Q?caf=EG?=", 904c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 905c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 906c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 907c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 908c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test 123" JPEG_EXT 909c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 910c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 911c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 912c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/%EC%98%88%EC%88%A0%20%EC%98%88%EC%88%A0.jpg", 913c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "malformed_disposition", 914c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 915c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 916c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 917c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 918c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"\uc608\uc220 \uc608\uc220.jpg" 919c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 920c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Invalid C-D. No filename from URL. Falls back to 'download'. 921c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 922c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/path1/path2/", 923c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename==?iso88591?Q?caf=E3?", 924c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 925c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 926c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 927c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 928c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" JPEG_EXT 929c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 930c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 931c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 932c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Tests filename generation. Once the correct filename is 933c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // selected, they should be passed through the validation steps and 934c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // a correct extension should be added if necessary. 935c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const GenerateFilenameCase generation_tests[] = { 936c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Dotfiles. Ensures preceeding period(s) stripped. 937c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 938c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 939c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/.test.html", 940c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 941c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 942c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 943c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 944c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 945c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test.html" 946c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 947c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 948c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 949c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/.test", 950c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 951c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 952c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 953c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 954c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 955c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test" 956c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 957c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 958c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 959c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.google.com/..test", 960c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 961c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 962c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 963c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 964c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 965c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"test" 966c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 967c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Disposition has relative paths, remove directory separators 968c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 969c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/my_download.txt", 970c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=../../../../././../a_file_name.txt", 971c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 972c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 973c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 974c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 975c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-..-..-..-.-.-..-a_file_name.txt" 976c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 977c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Disposition has parent directories, remove directory separators 978c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 979c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/my_download.txt", 980c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=dir1/dir2/a_file_name.txt", 981c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 982c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 983c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 984c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 985c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"dir1-dir2-a_file_name.txt" 986c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 987c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Disposition has relative paths, remove directory separators 988c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 989c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/my_download.txt", 990c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=..\\..\\..\\..\\.\\.\\..\\a_file_name.txt", 991c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 992c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 993c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 994c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 995c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-..-..-..-.-.-..-a_file_name.txt" 996c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 997c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Disposition has parent directories, remove directory separators 998c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 999c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/my_download.txt", 1000c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=dir1\\dir2\\a_file_name.txt", 1001c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1002c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1003c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1004c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1005c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"dir1-dir2-a_file_name.txt" 1006c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1007c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // No useful information in disposition or URL, use default 1008c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1009c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.truncated.com/path/", 1010c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1011c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1012c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1013c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1014c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1015c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" TXT_EXT 1016c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1017c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Filename looks like HTML? 1018c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1019c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/get/malware/here", 1020c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=\"<blink>Hello kitty</blink>\"", 1021c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1022c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1023c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1024c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"default", 1025c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-blink-Hello kitty--blink-" TXT_EXT 1026c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1027c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // A normal avi should get .avi and not .avi.avi 1028c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1029c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "https://blah.google.com/misc/2.avi", 1030c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1031c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1032c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1033c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "video/x-msvideo", 1034c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1035c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"2.avi" 1036c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1037c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Extension generation 1038c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1039c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/my-cat", 1040c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=my-cat", 1041c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1042c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1043c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1044c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1045c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my-cat" JPEG_EXT 1046c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1047c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1048c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1049c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/my-cat", 1050c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=my-cat", 1051c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1052c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1053c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1054c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1055c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my-cat.txt" 1056c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1057c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1058c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1059c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/my-cat", 1060c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=my-cat", 1061c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1062c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1063c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/html", 1064c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1065c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my-cat" HTML_EXT 1066c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1067c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Unknown MIME type 1068c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1069c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/my-cat", 1070c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=my-cat", 1071c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1072c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1073c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1074c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1075c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my-cat" 1076c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1077c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1078c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1079c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/my-cat.jpg", 1080c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=my-cat.jpg", 1081c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1082c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1083c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1084c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1085c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"my-cat.jpg" 1086c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1087c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Windows specific tests 1088c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1089c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1090c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1091c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.exe", 1092c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.exe", 1093c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1094c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1095c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1096c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1097c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil.exe" 1098c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1099c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/ok.exe", 1102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=ok.exe", 1103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"ok.exe" 1108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.dll", 1112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.dll", 1113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil.dll" 1118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.exe", 1122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil", 1123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/rss+xml", 1126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil" 1128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Test truncation of trailing dots and spaces 1130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.exe ", 1133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.exe ", 1134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil.exe" 1139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.exe.", 1143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.exe.", 1144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil.exe-" 1149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.exe. . .", 1153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.exe. . .", 1154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil.exe-------" 1159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/evil.", 1163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=evil.", 1164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"evil-" 1169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/. . . . .", 1173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=. . . . .", 1174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 1179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/attachment?name=meh.exe%C2%A0", 1183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "attachment; filename=\"meh.exe\xC2\xA0\"", 1184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "binary/octet-stream", 1187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"", 1188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"meh.exe-" 1189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // OS_WIN 1191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/utils.js", 1194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=utils.js", 1195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-javascript", 1198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"utils.js" 1200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/contacts.js", 1204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=contacts.js", 1205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/json", 1208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"contacts.js" 1210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/utils.js", 1214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=utils.js", 1215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/javascript", 1218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"utils.js" 1220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/utils.js", 1224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=utils.js", 1225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/javascript;version=2", 1228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"utils.js" 1230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1231c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/utils.js", 1234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=utils.js", 1235c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1236c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/ecmascript", 1238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"utils.js" 1240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1243c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/utils.js", 1244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=utils.js", 1245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1246c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1247c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/ecmascript;version=4", 1248c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"utils.js" 1250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1251c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1252c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/program.exe", 1254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=program.exe", 1255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"program.exe" 1260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/../foo.txt", 1264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=../foo.txt", 1265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1266c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-foo.txt" 1270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/..\\foo.txt", 1274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=..\\foo.txt", 1275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-foo.txt" 1280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/.hidden", 1284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=.hidden", 1285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1287c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1288c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1289c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"hidden" TXT_EXT 1290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1291c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1292c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1293c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/trailing.", 1294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=trailing.", 1295c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1297c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1299c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"trailing-" 1301c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"trailing" 1303c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1305c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1306c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1307c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/trailing.", 1308c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=trailing.", 1309c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1310c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1311c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1313c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1314c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"trailing-" TXT_EXT 1315c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1316c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"trailing" TXT_EXT 1317c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1319c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1320c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1321c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/.", 1322c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=.", 1323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 1328c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1329c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1330c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/..", 1332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=..", 1333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1334c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1335c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1337c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 1338c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1339c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1340c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1341c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/...", 1342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=...", 1343c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1344c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1345c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "dance/party", 1346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" 1348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Note that this one doesn't have "filename=" on it. 1350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1351c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/", 1352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "a_file_name.txt", 1353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" JPEG_EXT 1358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.evil.com/", 1362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=", 1363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download" JPEG_EXT 1368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/simple", 1372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=simple", 1373c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1374c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1375c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/octet-stream", 1376c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1377c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"simple" 1378c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1379c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Reserved words on Windows 1380c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1381c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1382c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/COM1", 1383c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=COM1", 1384c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1385c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1386c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1387c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1388c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1389c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_COM1" 1390c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1391c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"COM1" 1392c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1393c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1394c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1395c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1396c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/COM4.txt", 1397c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=COM4.txt", 1398c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1399c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1400c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1401c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1402c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1403c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_COM4.txt" 1404c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1405c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"COM4.txt" 1406c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1407c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1408c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1409c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1410c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/lpt1.TXT", 1411c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=lpt1.TXT", 1412c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1413c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1414c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1415c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1416c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1417c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_lpt1.TXT" 1418c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1419c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"lpt1.TXT" 1420c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1422c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1423c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1424c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/clock$.txt", 1425c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=clock$.txt", 1426c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1427c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1428c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1429c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1430c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1431c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_clock$.txt" 1432c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1433c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"clock$.txt" 1434c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1435c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Validation should also apply to sugested name 1437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1438c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/blah$.txt", 1439c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=clock$.txt", 1440c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1441c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "clock$.txt", 1442c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1443c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1444c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1445c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_clock$.txt" 1446c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1447c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"clock$.txt" 1448c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1449c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1450c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1451c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1452c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.goodguy.com/mycom1.foo", 1453c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=mycom1.foo", 1454c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1455c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1456c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1457c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1458c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"mycom1.foo" 1459c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1460c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1461c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1462c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/Setup.exe.local", 1463c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=Setup.exe.local", 1464c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1465c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1466c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1467c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1468c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1469c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.download" 1470c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1471c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.local" 1472c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1473c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1474c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1475c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1476c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/Setup.exe.local", 1477c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=Setup.exe.local.local", 1478c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1479c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1480c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1481c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1482c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1483c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.local.download" 1484c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1485c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.local.local" 1486c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1487c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1488c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1489c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1490c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/Setup.exe.lnk", 1491c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=Setup.exe.lnk", 1492c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1493c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1494c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1495c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1496c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1497c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.download" 1498c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1499c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Setup.exe.lnk" 1500c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1501c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1502c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1503c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1504c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/Desktop.ini", 1505c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=Desktop.ini", 1506c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1507c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1508c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1509c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1510c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1511c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_Desktop.ini" 1512c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1513c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Desktop.ini" 1514c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1515c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1516c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1517c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1518c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.badguy.com/Thumbs.db", 1519c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=Thumbs.db", 1520c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1521c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1522c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/foo-bar", 1523c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1524c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1525c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"_Thumbs.db" 1526c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 1527c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"Thumbs.db" 1528c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1529c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1530c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1531c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1532c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.hotmail.com", 1533c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=source.jpg", 1534c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1535c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1536c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-javascript", 1537c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1538c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"source.jpg" 1539c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1540c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/5772. 1541c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1542c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/foo.tar.gz", 1543c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1544c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1545c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-tar", 1547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"foo.tar.gz" 1549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1550c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/52250. 1551c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1552c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/foo.tgz", 1553c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1554c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1555c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1556c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-tar", 1557c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1558c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"foo.tgz" 1559c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1560c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/7337. 1561c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1562c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://maged.lordaeron.org/blank.reg", 1563c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1564c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1565c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1566c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/x-registry", 1567c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1568c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"blank.reg" 1569c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1570c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1571c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1572c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/bar.tar", 1573c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1574c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1575c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1576c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-tar", 1577c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1578c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"bar.tar" 1579c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1580c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 1581c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1582c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/bar.bogus", 1583c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1584c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1585c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1586c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-tar", 1587c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1588c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"bar.bogus" 1589c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1590c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/20337 1591c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1592c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/.download.txt", 1593c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=.download.txt", 1594c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1595c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1596c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1597c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"-download", 1598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download.txt" 1599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1600c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/56855. 1601c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1602c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/bar.sh", 1603c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1604c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1605c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1606c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "application/x-sh", 1607c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1608c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"bar.sh" 1609c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1610c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/61571 1611c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1612c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/npdf.php?fn=foobar.pdf", 1613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"npdf" TXT_EXT 1619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // Shouldn't overwrite C-D specified extension. 1621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1622c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/npdf.php?fn=foobar.pdf", 1623c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "filename=foobar.jpg", 1624c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1625c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1626c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "text/plain", 1627c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1628c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"foobar.jpg" 1629c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1630c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crbug.com/87719 1631c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/image.aspx?id=blargh", 1633c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1634c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1635c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1637c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"download", 1638c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"image" JPEG_EXT 1639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1640c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_CHROMEOS) 1641c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { // http://crosbug.com/26028 1642c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch __LINE__, 1643c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "http://www.example.com/fooa%cc%88.txt", 1644c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1645c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1646c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", 1647c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "image/jpeg", 1648c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"foo\xe4", 1649c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch L"foo\xe4.txt" 1650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 1651c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1652c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 1653c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1654c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(selection_tests); ++i) 1655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RunGenerateFileNameTestCase(&selection_tests[i]); 1656c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generation_tests); ++i) 1658c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RunGenerateFileNameTestCase(&generation_tests[i]); 1659c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1660c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generation_tests); ++i) { 1661c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GenerateFilenameCase test_case = generation_tests[i]; 1662c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch test_case.referrer_charset = "GBK"; 1663c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RunGenerateFileNameTestCase(&test_case); 1664c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1665c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1666c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1667c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace net 1668