| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "webkit/browser/fileapi/file_system_url.h" | 10 #include "webkit/browser/fileapi/file_system_url.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 } | 95 } |
| 96 | 96 |
| 97 // See if the name of each registered kTestPaths (that is what we | 97 // See if the name of each registered kTestPaths (that is what we |
| 98 // register in SetUp() by RegisterDraggedFileSystem) is properly cracked as | 98 // register in SetUp() by RegisterDraggedFileSystem) is properly cracked as |
| 99 // a valid virtual path in the isolated filesystem. | 99 // a valid virtual path in the isolated filesystem. |
| 100 for (size_t i = 0; i < arraysize(kTestPaths); ++i) { | 100 for (size_t i = 0; i < arraysize(kTestPaths); ++i) { |
| 101 base::FilePath virtual_path = isolated_context()->CreateVirtualRootPath(id_) | 101 base::FilePath virtual_path = isolated_context()->CreateVirtualRootPath(id_) |
| 102 .AppendASCII(names_[i]); | 102 .AppendASCII(names_[i]); |
| 103 std::string cracked_id; | 103 std::string cracked_id; |
| 104 base::FilePath cracked_path; | 104 base::FilePath cracked_path; |
| 105 std::string cracked_inner_id; |
| 105 fileapi::FileSystemType cracked_type; | 106 fileapi::FileSystemType cracked_type; |
| 106 FileSystemMountOption cracked_option; | 107 FileSystemMountOption cracked_option; |
| 107 ASSERT_TRUE(isolated_context()->CrackVirtualPath( | 108 ASSERT_TRUE(isolated_context()->CrackVirtualPath( |
| 108 virtual_path, &cracked_id, &cracked_type, &cracked_path, | 109 virtual_path, &cracked_id, &cracked_type, &cracked_inner_id, |
| 109 &cracked_option)); | 110 &cracked_path, &cracked_option)); |
| 110 ASSERT_EQ(kTestPaths[i].NormalizePathSeparators().value(), | 111 ASSERT_EQ(kTestPaths[i].NormalizePathSeparators().value(), |
| 111 cracked_path.value()); | 112 cracked_path.value()); |
| 112 ASSERT_EQ(id_, cracked_id); | 113 ASSERT_EQ(id_, cracked_id); |
| 113 ASSERT_EQ(kFileSystemTypeDragged, cracked_type); | 114 ASSERT_EQ(kFileSystemTypeDragged, cracked_type); |
| 115 EXPECT_TRUE(cracked_inner_id.empty()); |
| 114 } | 116 } |
| 115 | 117 |
| 116 // Make sure GetRegisteredPath returns false for id_ since it is | 118 // Make sure GetRegisteredPath returns false for id_ since it is |
| 117 // registered for dragged files. | 119 // registered for dragged files. |
| 118 base::FilePath path; | 120 base::FilePath path; |
| 119 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id_, &path)); | 121 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id_, &path)); |
| 120 | 122 |
| 121 // Deref the current one and registering a new one. | 123 // Deref the current one and registering a new one. |
| 122 isolated_context()->RemoveReference(id_); | 124 isolated_context()->RemoveReference(id_); |
| 123 | 125 |
| 124 std::string id2 = isolated_context()->RegisterFileSystemForPath( | 126 std::string id2 = isolated_context()->RegisterFileSystemForPath( |
| 125 kFileSystemTypeNativeLocal, base::FilePath(DRIVE FPL("/foo")), NULL); | 127 kFileSystemTypeNativeLocal, std::string(), |
| 128 base::FilePath(DRIVE FPL("/foo")), NULL); |
| 126 | 129 |
| 127 // Make sure the GetDraggedFileInfo returns false for both ones. | 130 // Make sure the GetDraggedFileInfo returns false for both ones. |
| 128 ASSERT_FALSE(isolated_context()->GetDraggedFileInfo(id2, &toplevels)); | 131 ASSERT_FALSE(isolated_context()->GetDraggedFileInfo(id2, &toplevels)); |
| 129 ASSERT_FALSE(isolated_context()->GetDraggedFileInfo(id_, &toplevels)); | 132 ASSERT_FALSE(isolated_context()->GetDraggedFileInfo(id_, &toplevels)); |
| 130 | 133 |
| 131 // Make sure the GetRegisteredPath returns true only for the new one. | 134 // Make sure the GetRegisteredPath returns true only for the new one. |
| 132 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id_, &path)); | 135 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id_, &path)); |
| 133 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id2, &path)); | 136 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id2, &path)); |
| 134 | 137 |
| 135 // Try registering three more file systems for the same path as id2. | 138 // Try registering three more file systems for the same path as id2. |
| 136 std::string id3 = isolated_context()->RegisterFileSystemForPath( | 139 std::string id3 = isolated_context()->RegisterFileSystemForPath( |
| 137 kFileSystemTypeNativeLocal, path, NULL); | 140 kFileSystemTypeNativeLocal, std::string(), path, NULL); |
| 138 std::string id4 = isolated_context()->RegisterFileSystemForPath( | 141 std::string id4 = isolated_context()->RegisterFileSystemForPath( |
| 139 kFileSystemTypeNativeLocal, path, NULL); | 142 kFileSystemTypeNativeLocal, std::string(), path, NULL); |
| 140 std::string id5 = isolated_context()->RegisterFileSystemForPath( | 143 std::string id5 = isolated_context()->RegisterFileSystemForPath( |
| 141 kFileSystemTypeNativeLocal, path, NULL); | 144 kFileSystemTypeNativeLocal, std::string(), path, NULL); |
| 142 | 145 |
| 143 // Remove file system for id4. | 146 // Remove file system for id4. |
| 144 isolated_context()->AddReference(id4); | 147 isolated_context()->AddReference(id4); |
| 145 isolated_context()->RemoveReference(id4); | 148 isolated_context()->RemoveReference(id4); |
| 146 | 149 |
| 147 // Only id4 should become invalid now. | 150 // Only id4 should become invalid now. |
| 148 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id2, &path)); | 151 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id2, &path)); |
| 149 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id3, &path)); | 152 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id3, &path)); |
| 150 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id4, &path)); | 153 ASSERT_FALSE(isolated_context()->GetRegisteredPath(id4, &path)); |
| 151 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id5, &path)); | 154 ASSERT_TRUE(isolated_context()->GetRegisteredPath(id5, &path)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 for (size_t i = 0; i < arraysize(kTestPaths); ++i) { | 197 for (size_t i = 0; i < arraysize(kTestPaths); ++i) { |
| 195 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(relatives); ++j) { | 198 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(relatives); ++j) { |
| 196 SCOPED_TRACE(testing::Message() << "Testing " | 199 SCOPED_TRACE(testing::Message() << "Testing " |
| 197 << kTestPaths[i].value() << " " << relatives[j].path); | 200 << kTestPaths[i].value() << " " << relatives[j].path); |
| 198 base::FilePath virtual_path = | 201 base::FilePath virtual_path = |
| 199 isolated_context()->CreateVirtualRootPath(id_).AppendASCII( | 202 isolated_context()->CreateVirtualRootPath(id_).AppendASCII( |
| 200 names_[i]).Append(relatives[j].path); | 203 names_[i]).Append(relatives[j].path); |
| 201 std::string cracked_id; | 204 std::string cracked_id; |
| 202 base::FilePath cracked_path; | 205 base::FilePath cracked_path; |
| 203 fileapi::FileSystemType cracked_type; | 206 fileapi::FileSystemType cracked_type; |
| 207 std::string cracked_inner_id; |
| 204 FileSystemMountOption cracked_option; | 208 FileSystemMountOption cracked_option; |
| 205 if (!relatives[j].valid) { | 209 if (!relatives[j].valid) { |
| 206 ASSERT_FALSE(isolated_context()->CrackVirtualPath( | 210 ASSERT_FALSE(isolated_context()->CrackVirtualPath( |
| 207 virtual_path, &cracked_id, &cracked_type, &cracked_path, | 211 virtual_path, &cracked_id, &cracked_type, &cracked_inner_id, |
| 208 &cracked_option)); | 212 &cracked_path, &cracked_option)); |
| 209 continue; | 213 continue; |
| 210 } | 214 } |
| 211 ASSERT_TRUE(isolated_context()->CrackVirtualPath( | 215 ASSERT_TRUE(isolated_context()->CrackVirtualPath( |
| 212 virtual_path, &cracked_id, &cracked_type, &cracked_path, | 216 virtual_path, &cracked_id, &cracked_type, &cracked_inner_id, |
| 213 &cracked_option)); | 217 &cracked_path, &cracked_option)); |
| 214 ASSERT_EQ(kTestPaths[i].Append(relatives[j].path) | 218 ASSERT_EQ(kTestPaths[i].Append(relatives[j].path) |
| 215 .NormalizePathSeparators().value(), | 219 .NormalizePathSeparators().value(), |
| 216 cracked_path.value()); | 220 cracked_path.value()); |
| 217 ASSERT_EQ(id_, cracked_id); | 221 ASSERT_EQ(id_, cracked_id); |
| 218 ASSERT_EQ(kFileSystemTypeDragged, cracked_type); | 222 ASSERT_EQ(kFileSystemTypeDragged, cracked_type); |
| 223 EXPECT_TRUE(cracked_inner_id.empty()); |
| 219 } | 224 } |
| 220 } | 225 } |
| 221 } | 226 } |
| 222 | 227 |
| 223 TEST_F(IsolatedContextTest, CrackURLWithRelativePaths) { | 228 TEST_F(IsolatedContextTest, CrackURLWithRelativePaths) { |
| 224 const struct { | 229 const struct { |
| 225 base::FilePath::StringType path; | 230 base::FilePath::StringType path; |
| 226 bool valid; | 231 bool valid; |
| 227 } relatives[] = { | 232 } relatives[] = { |
| 228 { FPL("foo"), true }, | 233 { FPL("foo"), true }, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 TEST_F(IsolatedContextTest, TestWithVirtualRoot) { | 274 TEST_F(IsolatedContextTest, TestWithVirtualRoot) { |
| 270 std::string cracked_id; | 275 std::string cracked_id; |
| 271 base::FilePath cracked_path; | 276 base::FilePath cracked_path; |
| 272 FileSystemMountOption cracked_option; | 277 FileSystemMountOption cracked_option; |
| 273 | 278 |
| 274 // Trying to crack virtual root "/" returns true but with empty cracked path | 279 // Trying to crack virtual root "/" returns true but with empty cracked path |
| 275 // as "/" of the isolated filesystem is a pure virtual directory | 280 // as "/" of the isolated filesystem is a pure virtual directory |
| 276 // that has no corresponding platform directory. | 281 // that has no corresponding platform directory. |
| 277 base::FilePath virtual_path = isolated_context()->CreateVirtualRootPath(id_); | 282 base::FilePath virtual_path = isolated_context()->CreateVirtualRootPath(id_); |
| 278 ASSERT_TRUE(isolated_context()->CrackVirtualPath( | 283 ASSERT_TRUE(isolated_context()->CrackVirtualPath( |
| 279 virtual_path, &cracked_id, NULL, &cracked_path, &cracked_option)); | 284 virtual_path, &cracked_id, NULL, NULL, &cracked_path, &cracked_option)); |
| 280 ASSERT_EQ(FPL(""), cracked_path.value()); | 285 ASSERT_EQ(FPL(""), cracked_path.value()); |
| 281 ASSERT_EQ(id_, cracked_id); | 286 ASSERT_EQ(id_, cracked_id); |
| 282 | 287 |
| 283 // Trying to crack "/foo" should fail (because "foo" is not the one | 288 // Trying to crack "/foo" should fail (because "foo" is not the one |
| 284 // included in the kTestPaths). | 289 // included in the kTestPaths). |
| 285 virtual_path = isolated_context()->CreateVirtualRootPath( | 290 virtual_path = isolated_context()->CreateVirtualRootPath( |
| 286 id_).AppendASCII("foo"); | 291 id_).AppendASCII("foo"); |
| 287 ASSERT_FALSE(isolated_context()->CrackVirtualPath( | 292 ASSERT_FALSE(isolated_context()->CrackVirtualPath( |
| 288 virtual_path, &cracked_id, NULL, &cracked_path, &cracked_option)); | 293 virtual_path, &cracked_id, NULL, NULL, &cracked_path, &cracked_option)); |
| 289 } | 294 } |
| 290 | 295 |
| 291 TEST_F(IsolatedContextTest, CanHandleURL) { | 296 TEST_F(IsolatedContextTest, CanHandleURL) { |
| 292 const GURL test_origin("http://chromium.org"); | 297 const GURL test_origin("http://chromium.org"); |
| 293 const base::FilePath test_path(FPL("/mount")); | 298 const base::FilePath test_path(FPL("/mount")); |
| 294 | 299 |
| 295 // Should handle isolated file system. | 300 // Should handle isolated file system. |
| 296 EXPECT_TRUE(isolated_context()->HandlesFileSystemMountType( | 301 EXPECT_TRUE(isolated_context()->HandlesFileSystemMountType( |
| 297 fileapi::kFileSystemTypeIsolated)); | 302 fileapi::kFileSystemTypeIsolated)); |
| 298 | 303 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 | 340 |
| 336 base::FilePath test_virtual_path = | 341 base::FilePath test_virtual_path = |
| 337 base::FilePath().AppendASCII("virtualdir").AppendASCII("virtualfile.txt"); | 342 base::FilePath().AppendASCII("virtualdir").AppendASCII("virtualfile.txt"); |
| 338 | 343 |
| 339 base::FilePath whole_virtual_path = | 344 base::FilePath whole_virtual_path = |
| 340 isolated_context()->CreateVirtualRootPath(database_fsid) | 345 isolated_context()->CreateVirtualRootPath(database_fsid) |
| 341 .AppendASCII("_").Append(test_virtual_path); | 346 .AppendASCII("_").Append(test_virtual_path); |
| 342 | 347 |
| 343 std::string cracked_id; | 348 std::string cracked_id; |
| 344 base::FilePath cracked_path; | 349 base::FilePath cracked_path; |
| 350 std::string cracked_inner_id; |
| 345 FileSystemMountOption cracked_option; | 351 FileSystemMountOption cracked_option; |
| 346 ASSERT_TRUE(isolated_context()->CrackVirtualPath( | 352 ASSERT_TRUE(isolated_context()->CrackVirtualPath( |
| 347 whole_virtual_path, &cracked_id, NULL, &cracked_path, &cracked_option)); | 353 whole_virtual_path, &cracked_id, NULL, &cracked_inner_id, |
| 354 &cracked_path, &cracked_option)); |
| 348 ASSERT_EQ(database_fsid, cracked_id); | 355 ASSERT_EQ(database_fsid, cracked_id); |
| 349 ASSERT_EQ(test_virtual_path, cracked_path); | 356 ASSERT_EQ(test_virtual_path, cracked_path); |
| 357 EXPECT_TRUE(cracked_inner_id.empty()); |
| 350 } | 358 } |
| 351 | 359 |
| 352 } // namespace content | 360 } // namespace content |
| OLD | NEW |