| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/drive/file_system_util.h" | 5 #include "chrome/browser/chromeos/drive/file_system_util.h" |
| 6 | 6 |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 #include "webkit/fileapi/external_mount_points.h" | 12 #include "webkit/fileapi/external_mount_points.h" |
| 13 #include "webkit/fileapi/file_system_context.h" | 13 #include "webkit/fileapi/file_system_context.h" |
| 14 #include "webkit/fileapi/file_system_mount_point_provider.h" | 14 #include "webkit/fileapi/file_system_mount_point_provider.h" |
| 15 #include "webkit/fileapi/file_system_task_runners.h" | 15 #include "webkit/fileapi/file_system_task_runners.h" |
| 16 #include "webkit/fileapi/file_system_url.h" | 16 #include "webkit/fileapi/file_system_url.h" |
| 17 #include "webkit/fileapi/isolated_context.h" | 17 #include "webkit/fileapi/isolated_context.h" |
| 18 #include "webkit/fileapi/mock_file_system_options.h" | 18 #include "webkit/fileapi/mock_file_system_options.h" |
| 19 | 19 |
| 20 namespace drive { | 20 namespace drive { |
| 21 namespace util { | 21 namespace util { |
| 22 | 22 |
| 23 TEST(DriveFileSystemUtilTest, FilePathToDriveURL) { | 23 TEST(FileSystemUtilTest, FilePathToDriveURL) { |
| 24 base::FilePath path; | 24 base::FilePath path; |
| 25 | 25 |
| 26 // Path with alphabets and numbers. | 26 // Path with alphabets and numbers. |
| 27 path = GetDriveMyDriveRootPath().AppendASCII("foo/bar012.txt"); | 27 path = GetDriveMyDriveRootPath().AppendASCII("foo/bar012.txt"); |
| 28 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); | 28 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); |
| 29 | 29 |
| 30 // Path with symbols. | 30 // Path with symbols. |
| 31 path = GetDriveMyDriveRootPath().AppendASCII( | 31 path = GetDriveMyDriveRootPath().AppendASCII( |
| 32 " !\"#$%&'()*+,-.:;<=>?@[\\]^_`{|}~"); | 32 " !\"#$%&'()*+,-.:;<=>?@[\\]^_`{|}~"); |
| 33 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); | 33 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); |
| 34 | 34 |
| 35 // Path with '%'. | 35 // Path with '%'. |
| 36 path = GetDriveMyDriveRootPath().AppendASCII("%19%20%21.txt"); | 36 path = GetDriveMyDriveRootPath().AppendASCII("%19%20%21.txt"); |
| 37 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); | 37 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); |
| 38 | 38 |
| 39 // Path with multi byte characters. | 39 // Path with multi byte characters. |
| 40 string16 utf16_string; | 40 string16 utf16_string; |
| 41 utf16_string.push_back(0x307b); // HIRAGANA_LETTER_HO | 41 utf16_string.push_back(0x307b); // HIRAGANA_LETTER_HO |
| 42 utf16_string.push_back(0x3052); // HIRAGANA_LETTER_GE | 42 utf16_string.push_back(0x3052); // HIRAGANA_LETTER_GE |
| 43 path = GetDriveMyDriveRootPath().Append( | 43 path = GetDriveMyDriveRootPath().Append( |
| 44 base::FilePath::FromUTF8Unsafe(UTF16ToUTF8(utf16_string) + ".txt")); | 44 base::FilePath::FromUTF8Unsafe(UTF16ToUTF8(utf16_string) + ".txt")); |
| 45 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); | 45 EXPECT_EQ(path, DriveURLToFilePath(FilePathToDriveURL(path))); |
| 46 } | 46 } |
| 47 | 47 |
| 48 TEST(DriveFileSystemUtilTest, IsUnderDriveMountPoint) { | 48 TEST(FileSystemUtilTest, IsUnderDriveMountPoint) { |
| 49 EXPECT_FALSE(IsUnderDriveMountPoint( | 49 EXPECT_FALSE(IsUnderDriveMountPoint( |
| 50 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); | 50 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); |
| 51 EXPECT_FALSE(IsUnderDriveMountPoint( | 51 EXPECT_FALSE(IsUnderDriveMountPoint( |
| 52 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); | 52 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); |
| 53 EXPECT_FALSE(IsUnderDriveMountPoint( | 53 EXPECT_FALSE(IsUnderDriveMountPoint( |
| 54 base::FilePath::FromUTF8Unsafe("/special/drivex/foo.txt"))); | 54 base::FilePath::FromUTF8Unsafe("/special/drivex/foo.txt"))); |
| 55 EXPECT_FALSE(IsUnderDriveMountPoint( | 55 EXPECT_FALSE(IsUnderDriveMountPoint( |
| 56 base::FilePath::FromUTF8Unsafe("special/drivex/foo.txt"))); | 56 base::FilePath::FromUTF8Unsafe("special/drivex/foo.txt"))); |
| 57 | 57 |
| 58 EXPECT_TRUE(IsUnderDriveMountPoint( | 58 EXPECT_TRUE(IsUnderDriveMountPoint( |
| 59 base::FilePath::FromUTF8Unsafe("/special/drive"))); | 59 base::FilePath::FromUTF8Unsafe("/special/drive"))); |
| 60 EXPECT_TRUE(IsUnderDriveMountPoint( | 60 EXPECT_TRUE(IsUnderDriveMountPoint( |
| 61 base::FilePath::FromUTF8Unsafe("/special/drive/foo.txt"))); | 61 base::FilePath::FromUTF8Unsafe("/special/drive/foo.txt"))); |
| 62 EXPECT_TRUE(IsUnderDriveMountPoint( | 62 EXPECT_TRUE(IsUnderDriveMountPoint( |
| 63 base::FilePath::FromUTF8Unsafe("/special/drive/subdir/foo.txt"))); | 63 base::FilePath::FromUTF8Unsafe("/special/drive/subdir/foo.txt"))); |
| 64 } | 64 } |
| 65 | 65 |
| 66 TEST(DriveFileSystemUtilTest, ExtractDrivePath) { | 66 TEST(FileSystemUtilTest, ExtractDrivePath) { |
| 67 EXPECT_EQ(base::FilePath(), | 67 EXPECT_EQ(base::FilePath(), |
| 68 ExtractDrivePath( | 68 ExtractDrivePath( |
| 69 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); | 69 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); |
| 70 EXPECT_EQ(base::FilePath(), | 70 EXPECT_EQ(base::FilePath(), |
| 71 ExtractDrivePath( | 71 ExtractDrivePath( |
| 72 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); | 72 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); |
| 73 EXPECT_EQ(base::FilePath(), | 73 EXPECT_EQ(base::FilePath(), |
| 74 ExtractDrivePath( | 74 ExtractDrivePath( |
| 75 base::FilePath::FromUTF8Unsafe("/special/drivex/foo.txt"))); | 75 base::FilePath::FromUTF8Unsafe("/special/drivex/foo.txt"))); |
| 76 | 76 |
| 77 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive"), | 77 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive"), |
| 78 ExtractDrivePath( | 78 ExtractDrivePath( |
| 79 base::FilePath::FromUTF8Unsafe("/special/drive"))); | 79 base::FilePath::FromUTF8Unsafe("/special/drive"))); |
| 80 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive/foo.txt"), | 80 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive/foo.txt"), |
| 81 ExtractDrivePath( | 81 ExtractDrivePath( |
| 82 base::FilePath::FromUTF8Unsafe("/special/drive/foo.txt"))); | 82 base::FilePath::FromUTF8Unsafe("/special/drive/foo.txt"))); |
| 83 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive/subdir/foo.txt"), | 83 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("drive/subdir/foo.txt"), |
| 84 ExtractDrivePath(base::FilePath::FromUTF8Unsafe( | 84 ExtractDrivePath(base::FilePath::FromUTF8Unsafe( |
| 85 "/special/drive/subdir/foo.txt"))); | 85 "/special/drive/subdir/foo.txt"))); |
| 86 } | 86 } |
| 87 | 87 |
| 88 TEST(DriveFileSystemUtilTest, ExtractDrivePathFromFileSystemUrl) { | 88 TEST(FileSystemUtilTest, ExtractDrivePathFromFileSystemUrl) { |
| 89 // Set up file system context for testing. | 89 // Set up file system context for testing. |
| 90 base::ScopedTempDir temp_dir_; | 90 base::ScopedTempDir temp_dir_; |
| 91 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 91 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 92 | 92 |
| 93 MessageLoop message_loop; | 93 MessageLoop message_loop; |
| 94 scoped_refptr<fileapi::ExternalMountPoints> mount_points = | 94 scoped_refptr<fileapi::ExternalMountPoints> mount_points = |
| 95 fileapi::ExternalMountPoints::CreateRefCounted(); | 95 fileapi::ExternalMountPoints::CreateRefCounted(); |
| 96 scoped_refptr<fileapi::FileSystemContext> context( | 96 scoped_refptr<fileapi::FileSystemContext> context( |
| 97 new fileapi::FileSystemContext( | 97 new fileapi::FileSystemContext( |
| 98 fileapi::FileSystemTaskRunners::CreateMockTaskRunners(), | 98 fileapi::FileSystemTaskRunners::CreateMockTaskRunners(), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 fileapi::kFileSystemTypeNativeForPlatformApp, | 146 fileapi::kFileSystemTypeNativeForPlatformApp, |
| 147 GetDriveMountPointPath().AppendASCII("bar/buz"), | 147 GetDriveMountPointPath().AppendASCII("bar/buz"), |
| 148 &isolated_name); | 148 &isolated_name); |
| 149 EXPECT_EQ( | 149 EXPECT_EQ( |
| 150 base::FilePath::FromUTF8Unsafe(drive_mount_name + "/bar/buz"), | 150 base::FilePath::FromUTF8Unsafe(drive_mount_name + "/bar/buz"), |
| 151 ExtractDrivePathFromFileSystemUrl(context->CrackURL(GURL( | 151 ExtractDrivePathFromFileSystemUrl(context->CrackURL(GURL( |
| 152 "filesystem:chrome-extension://dummy-id/isolated/" + | 152 "filesystem:chrome-extension://dummy-id/isolated/" + |
| 153 isolated_id + "/" + isolated_name)))); | 153 isolated_id + "/" + isolated_name)))); |
| 154 } | 154 } |
| 155 | 155 |
| 156 TEST(DriveFileSystemUtilTest, EscapeUnescapeCacheFileName) { | 156 TEST(FileSystemUtilTest, EscapeUnescapeCacheFileName) { |
| 157 const std::string kUnescapedFileName( | 157 const std::string kUnescapedFileName( |
| 158 "tmp:`~!@#$%^&*()-_=+[{|]}\\\\;\',<.>/?"); | 158 "tmp:`~!@#$%^&*()-_=+[{|]}\\\\;\',<.>/?"); |
| 159 const std::string kEscapedFileName( | 159 const std::string kEscapedFileName( |
| 160 "tmp:`~!@#$%25^&*()-_=+[{|]}\\\\;\',<%2E>%2F?"); | 160 "tmp:`~!@#$%25^&*()-_=+[{|]}\\\\;\',<%2E>%2F?"); |
| 161 EXPECT_EQ(kEscapedFileName, EscapeCacheFileName(kUnescapedFileName)); | 161 EXPECT_EQ(kEscapedFileName, EscapeCacheFileName(kUnescapedFileName)); |
| 162 EXPECT_EQ(kUnescapedFileName, UnescapeCacheFileName(kEscapedFileName)); | 162 EXPECT_EQ(kUnescapedFileName, UnescapeCacheFileName(kEscapedFileName)); |
| 163 } | 163 } |
| 164 | 164 |
| 165 TEST(DriveFileSystemUtilTest, EscapeUtf8FileName) { | 165 TEST(FileSystemUtilTest, EscapeUtf8FileName) { |
| 166 EXPECT_EQ("", EscapeUtf8FileName("")); | 166 EXPECT_EQ("", EscapeUtf8FileName("")); |
| 167 EXPECT_EQ("foo", EscapeUtf8FileName("foo")); | 167 EXPECT_EQ("foo", EscapeUtf8FileName("foo")); |
| 168 EXPECT_EQ("foo\xE2\x88\x95zzz", EscapeUtf8FileName("foo/zzz")); | 168 EXPECT_EQ("foo\xE2\x88\x95zzz", EscapeUtf8FileName("foo/zzz")); |
| 169 EXPECT_EQ("\xE2\x88\x95\xE2\x88\x95\xE2\x88\x95", EscapeUtf8FileName("///")); | 169 EXPECT_EQ("\xE2\x88\x95\xE2\x88\x95\xE2\x88\x95", EscapeUtf8FileName("///")); |
| 170 } | 170 } |
| 171 | 171 |
| 172 TEST(DriveFileSystemUtilTest, ExtractResourceIdFromUrl) { | 172 TEST(FileSystemUtilTest, ExtractResourceIdFromUrl) { |
| 173 EXPECT_EQ("file:2_file_resource_id", ExtractResourceIdFromUrl( | 173 EXPECT_EQ("file:2_file_resource_id", ExtractResourceIdFromUrl( |
| 174 GURL("https://file1_link_self/file:2_file_resource_id"))); | 174 GURL("https://file1_link_self/file:2_file_resource_id"))); |
| 175 // %3A should be unescaped. | 175 // %3A should be unescaped. |
| 176 EXPECT_EQ("file:2_file_resource_id", ExtractResourceIdFromUrl( | 176 EXPECT_EQ("file:2_file_resource_id", ExtractResourceIdFromUrl( |
| 177 GURL("https://file1_link_self/file%3A2_file_resource_id"))); | 177 GURL("https://file1_link_self/file%3A2_file_resource_id"))); |
| 178 | 178 |
| 179 // The resource ID cannot be extracted, hence empty. | 179 // The resource ID cannot be extracted, hence empty. |
| 180 EXPECT_EQ("", ExtractResourceIdFromUrl(GURL("https://www.example.com/"))); | 180 EXPECT_EQ("", ExtractResourceIdFromUrl(GURL("https://www.example.com/"))); |
| 181 } | 181 } |
| 182 | 182 |
| 183 TEST(DriveFileSystemUtilTest, ParseCacheFilePath) { | 183 TEST(FileSystemUtilTest, ParseCacheFilePath) { |
| 184 std::string resource_id, md5, extra_extension; | 184 std::string resource_id, md5, extra_extension; |
| 185 ParseCacheFilePath( | 185 ParseCacheFilePath( |
| 186 base::FilePath::FromUTF8Unsafe( | 186 base::FilePath::FromUTF8Unsafe( |
| 187 "/home/user/GCache/v1/persistent/pdf:a1b2.0123456789abcdef.mounted"), | 187 "/home/user/GCache/v1/persistent/pdf:a1b2.0123456789abcdef.mounted"), |
| 188 &resource_id, | 188 &resource_id, |
| 189 &md5, | 189 &md5, |
| 190 &extra_extension); | 190 &extra_extension); |
| 191 EXPECT_EQ(resource_id, "pdf:a1b2"); | 191 EXPECT_EQ(resource_id, "pdf:a1b2"); |
| 192 EXPECT_EQ(md5, "0123456789abcdef"); | 192 EXPECT_EQ(md5, "0123456789abcdef"); |
| 193 EXPECT_EQ(extra_extension, "mounted"); | 193 EXPECT_EQ(extra_extension, "mounted"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 206 base::FilePath::FromUTF8Unsafe( | 206 base::FilePath::FromUTF8Unsafe( |
| 207 "/home/user/GCache/v1/pinned/pdf:a1b2"), | 207 "/home/user/GCache/v1/pinned/pdf:a1b2"), |
| 208 &resource_id, | 208 &resource_id, |
| 209 &md5, | 209 &md5, |
| 210 &extra_extension); | 210 &extra_extension); |
| 211 EXPECT_EQ(resource_id, "pdf:a1b2"); | 211 EXPECT_EQ(resource_id, "pdf:a1b2"); |
| 212 EXPECT_EQ(md5, ""); | 212 EXPECT_EQ(md5, ""); |
| 213 EXPECT_EQ(extra_extension, ""); | 213 EXPECT_EQ(extra_extension, ""); |
| 214 } | 214 } |
| 215 | 215 |
| 216 TEST(DriveFileSystemUtilTest, NeedsNamespaceMigration) { | 216 TEST(FileSystemUtilTest, NeedsNamespaceMigration) { |
| 217 // Not Drive cases. | 217 // Not Drive cases. |
| 218 EXPECT_FALSE(NeedsNamespaceMigration( | 218 EXPECT_FALSE(NeedsNamespaceMigration( |
| 219 base::FilePath::FromUTF8Unsafe("/Downloads"))); | 219 base::FilePath::FromUTF8Unsafe("/Downloads"))); |
| 220 EXPECT_FALSE(NeedsNamespaceMigration( | 220 EXPECT_FALSE(NeedsNamespaceMigration( |
| 221 base::FilePath::FromUTF8Unsafe("/Downloads/x"))); | 221 base::FilePath::FromUTF8Unsafe("/Downloads/x"))); |
| 222 EXPECT_FALSE(NeedsNamespaceMigration( | 222 EXPECT_FALSE(NeedsNamespaceMigration( |
| 223 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); | 223 base::FilePath::FromUTF8Unsafe("/wherever/foo.txt"))); |
| 224 EXPECT_FALSE(NeedsNamespaceMigration( | 224 EXPECT_FALSE(NeedsNamespaceMigration( |
| 225 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); | 225 base::FilePath::FromUTF8Unsafe("/special/foo.txt"))); |
| 226 EXPECT_FALSE(NeedsNamespaceMigration( | 226 EXPECT_FALSE(NeedsNamespaceMigration( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 240 EXPECT_FALSE(NeedsNamespaceMigration( | 240 EXPECT_FALSE(NeedsNamespaceMigration( |
| 241 base::FilePath::FromUTF8Unsafe("/special/drive/root"))); | 241 base::FilePath::FromUTF8Unsafe("/special/drive/root"))); |
| 242 EXPECT_FALSE(NeedsNamespaceMigration( | 242 EXPECT_FALSE(NeedsNamespaceMigration( |
| 243 base::FilePath::FromUTF8Unsafe("/special/drive/root/dir1"))); | 243 base::FilePath::FromUTF8Unsafe("/special/drive/root/dir1"))); |
| 244 EXPECT_FALSE(NeedsNamespaceMigration( | 244 EXPECT_FALSE(NeedsNamespaceMigration( |
| 245 base::FilePath::FromUTF8Unsafe("/special/drive/root/root"))); | 245 base::FilePath::FromUTF8Unsafe("/special/drive/root/root"))); |
| 246 EXPECT_FALSE(NeedsNamespaceMigration( | 246 EXPECT_FALSE(NeedsNamespaceMigration( |
| 247 base::FilePath::FromUTF8Unsafe("/special/drive/root/root/dir1"))); | 247 base::FilePath::FromUTF8Unsafe("/special/drive/root/root/dir1"))); |
| 248 } | 248 } |
| 249 | 249 |
| 250 TEST(DriveFileSystemUtilTest, ConvertToMyDriveNamespace) { | 250 TEST(FileSystemUtilTest, ConvertToMyDriveNamespace) { |
| 251 // Migration cases. | 251 // Migration cases. |
| 252 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("/special/drive/root"), | 252 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("/special/drive/root"), |
| 253 drive::util::ConvertToMyDriveNamespace( | 253 drive::util::ConvertToMyDriveNamespace( |
| 254 base::FilePath::FromUTF8Unsafe("/special/drive"))); | 254 base::FilePath::FromUTF8Unsafe("/special/drive"))); |
| 255 | 255 |
| 256 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("/special/drive/root/dir1"), | 256 EXPECT_EQ(base::FilePath::FromUTF8Unsafe("/special/drive/root/dir1"), |
| 257 drive::util::ConvertToMyDriveNamespace( | 257 drive::util::ConvertToMyDriveNamespace( |
| 258 base::FilePath::FromUTF8Unsafe("/special/drive/dir1"))); | 258 base::FilePath::FromUTF8Unsafe("/special/drive/dir1"))); |
| 259 } | 259 } |
| 260 | 260 |
| 261 TEST(DriveFileSystemUtilTest, IsSpecialResourceId) { | 261 TEST(FileSystemUtilTest, IsSpecialResourceId) { |
| 262 EXPECT_FALSE(util::IsSpecialResourceId("abc")); | 262 EXPECT_FALSE(util::IsSpecialResourceId("abc")); |
| 263 EXPECT_FALSE(util::IsSpecialResourceId("file:123")); | 263 EXPECT_FALSE(util::IsSpecialResourceId("file:123")); |
| 264 EXPECT_FALSE(util::IsSpecialResourceId("folder:root")); | 264 EXPECT_FALSE(util::IsSpecialResourceId("folder:root")); |
| 265 EXPECT_FALSE(util::IsSpecialResourceId("folder:xyz")); | 265 EXPECT_FALSE(util::IsSpecialResourceId("folder:xyz")); |
| 266 | 266 |
| 267 EXPECT_TRUE(util::IsSpecialResourceId("<drive>")); | 267 EXPECT_TRUE(util::IsSpecialResourceId("<drive>")); |
| 268 EXPECT_TRUE(util::IsSpecialResourceId("<other>")); | 268 EXPECT_TRUE(util::IsSpecialResourceId("<other>")); |
| 269 } | 269 } |
| 270 | 270 |
| 271 } // namespace util | 271 } // namespace util |
| 272 } // namespace drive | 272 } // namespace drive |
| OLD | NEW |