| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "webkit/fileapi/file_system_context.h" | 5 #include "webkit/fileapi/file_system_context.h" |
| 6 | 6 |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #define DRIVE FPL("C:") | 21 #define DRIVE FPL("C:") |
| 22 #else | 22 #else |
| 23 #define DRIVE | 23 #define DRIVE |
| 24 #endif | 24 #endif |
| 25 | 25 |
| 26 namespace fileapi { | 26 namespace fileapi { |
| 27 | 27 |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 const char kTestOrigin[] = "http://chromium.org/"; | 30 const char kTestOrigin[] = "http://chromium.org/"; |
| 31 const FilePath::CharType kVirtualPathNoRoot[] = FPL("root/file"); | 31 const base::FilePath::CharType kVirtualPathNoRoot[] = FPL("root/file"); |
| 32 | 32 |
| 33 GURL CreateRawFileSystemURL(const std::string& type_str, | 33 GURL CreateRawFileSystemURL(const std::string& type_str, |
| 34 const std::string& fs_id) { | 34 const std::string& fs_id) { |
| 35 std::string url_str = base::StringPrintf( | 35 std::string url_str = base::StringPrintf( |
| 36 "filesystem:http://chromium.org/%s/%s/root/file", | 36 "filesystem:http://chromium.org/%s/%s/root/file", |
| 37 type_str.c_str(), | 37 type_str.c_str(), |
| 38 fs_id.c_str()); | 38 fs_id.c_str()); |
| 39 return GURL(url_str); | 39 return GURL(url_str); |
| 40 } | 40 } |
| 41 | 41 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 66 mock_quota_manager_->proxy(), | 66 mock_quota_manager_->proxy(), |
| 67 data_dir_.path(), | 67 data_dir_.path(), |
| 68 CreateAllowFileAccessOptions()); | 68 CreateAllowFileAccessOptions()); |
| 69 } | 69 } |
| 70 | 70 |
| 71 // Verifies a *valid* filesystem url has expected values. | 71 // Verifies a *valid* filesystem url has expected values. |
| 72 void ExpectFileSystemURLMatches(const FileSystemURL& url, | 72 void ExpectFileSystemURLMatches(const FileSystemURL& url, |
| 73 const GURL& expect_origin, | 73 const GURL& expect_origin, |
| 74 FileSystemType expect_mount_type, | 74 FileSystemType expect_mount_type, |
| 75 FileSystemType expect_type, | 75 FileSystemType expect_type, |
| 76 const FilePath& expect_path, | 76 const base::FilePath& expect_path, |
| 77 const FilePath& expect_virtual_path, | 77 const base::FilePath& expect_virtual_path, |
| 78 const std::string& expect_filesystem_id) { | 78 const std::string& expect_filesystem_id) { |
| 79 EXPECT_TRUE(url.is_valid()); | 79 EXPECT_TRUE(url.is_valid()); |
| 80 | 80 |
| 81 EXPECT_EQ(expect_origin, url.origin()); | 81 EXPECT_EQ(expect_origin, url.origin()); |
| 82 EXPECT_EQ(expect_mount_type, url.mount_type()); | 82 EXPECT_EQ(expect_mount_type, url.mount_type()); |
| 83 EXPECT_EQ(expect_type, url.type()); | 83 EXPECT_EQ(expect_type, url.type()); |
| 84 EXPECT_EQ(expect_path, url.path()); | 84 EXPECT_EQ(expect_path, url.path()); |
| 85 EXPECT_EQ(expect_virtual_path, url.virtual_path()); | 85 EXPECT_EQ(expect_virtual_path, url.virtual_path()); |
| 86 EXPECT_EQ(expect_filesystem_id, url.filesystem_id()); | 86 EXPECT_EQ(expect_filesystem_id, url.filesystem_id()); |
| 87 } | 87 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 98 #if !defined(OS_CHROMEOS) | 98 #if !defined(OS_CHROMEOS) |
| 99 TEST_F(FileSystemContextTest, NullExternalMountPoints) { | 99 TEST_F(FileSystemContextTest, NullExternalMountPoints) { |
| 100 scoped_refptr<FileSystemContext> file_system_context( | 100 scoped_refptr<FileSystemContext> file_system_context( |
| 101 CreateFileSystemContextForTest(NULL)); | 101 CreateFileSystemContextForTest(NULL)); |
| 102 | 102 |
| 103 // Cracking system external mount and isolated mount points should work. | 103 // Cracking system external mount and isolated mount points should work. |
| 104 std::string isolated_name = "root"; | 104 std::string isolated_name = "root"; |
| 105 std::string isolated_id = | 105 std::string isolated_id = |
| 106 IsolatedContext::GetInstance()->RegisterFileSystemForPath( | 106 IsolatedContext::GetInstance()->RegisterFileSystemForPath( |
| 107 kFileSystemTypeNativeLocal, | 107 kFileSystemTypeNativeLocal, |
| 108 FilePath(DRIVE FPL("/test/isolated/root")), | 108 base::FilePath(DRIVE FPL("/test/isolated/root")), |
| 109 &isolated_name); | 109 &isolated_name); |
| 110 // Register system external mount point. | 110 // Register system external mount point. |
| 111 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 111 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
| 112 "system", | 112 "system", |
| 113 kFileSystemTypeNativeLocal, | 113 kFileSystemTypeNativeLocal, |
| 114 FilePath(DRIVE FPL("/test/sys/")))); | 114 base::FilePath(DRIVE FPL("/test/sys/")))); |
| 115 | 115 |
| 116 FileSystemURL cracked_isolated = file_system_context->CrackURL( | 116 FileSystemURL cracked_isolated = file_system_context->CrackURL( |
| 117 CreateRawFileSystemURL("isolated", isolated_id)); | 117 CreateRawFileSystemURL("isolated", isolated_id)); |
| 118 | 118 |
| 119 ExpectFileSystemURLMatches( | 119 ExpectFileSystemURLMatches( |
| 120 cracked_isolated, | 120 cracked_isolated, |
| 121 GURL(kTestOrigin), | 121 GURL(kTestOrigin), |
| 122 kFileSystemTypeIsolated, | 122 kFileSystemTypeIsolated, |
| 123 kFileSystemTypeNativeLocal, | 123 kFileSystemTypeNativeLocal, |
| 124 FilePath(DRIVE FPL("/test/isolated/root/file")).NormalizePathSeparators(), | 124 base::FilePath(DRIVE FPL("/test/isolated/root/file")).NormalizePathSeparat
ors(), |
| 125 FilePath::FromUTF8Unsafe(isolated_id).Append(FPL("root/file")). | 125 base::FilePath::FromUTF8Unsafe(isolated_id).Append(FPL("root/file")). |
| 126 NormalizePathSeparators(), | 126 NormalizePathSeparators(), |
| 127 isolated_id); | 127 isolated_id); |
| 128 | 128 |
| 129 FileSystemURL cracked_external = file_system_context->CrackURL( | 129 FileSystemURL cracked_external = file_system_context->CrackURL( |
| 130 CreateRawFileSystemURL("external", "system")); | 130 CreateRawFileSystemURL("external", "system")); |
| 131 | 131 |
| 132 ExpectFileSystemURLMatches( | 132 ExpectFileSystemURLMatches( |
| 133 cracked_external, | 133 cracked_external, |
| 134 GURL(kTestOrigin), | 134 GURL(kTestOrigin), |
| 135 kFileSystemTypeExternal, | 135 kFileSystemTypeExternal, |
| 136 kFileSystemTypeNativeLocal, | 136 kFileSystemTypeNativeLocal, |
| 137 FilePath(DRIVE FPL("/test/sys/root/file")).NormalizePathSeparators(), | 137 base::FilePath(DRIVE FPL("/test/sys/root/file")).NormalizePathSeparators()
, |
| 138 FilePath(FPL("system/root/file")).NormalizePathSeparators(), | 138 base::FilePath(FPL("system/root/file")).NormalizePathSeparators(), |
| 139 "system"); | 139 "system"); |
| 140 | 140 |
| 141 | 141 |
| 142 IsolatedContext::GetInstance()->RevokeFileSystem(isolated_id); | 142 IsolatedContext::GetInstance()->RevokeFileSystem(isolated_id); |
| 143 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system"); | 143 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system"); |
| 144 } | 144 } |
| 145 #endif // !defiend(OS_CHROMEOS) | 145 #endif // !defiend(OS_CHROMEOS) |
| 146 | 146 |
| 147 TEST_F(FileSystemContextTest, FileSystemContextKeepsMountPointsAlive) { | 147 TEST_F(FileSystemContextTest, FileSystemContextKeepsMountPointsAlive) { |
| 148 scoped_refptr<ExternalMountPoints> mount_points = | 148 scoped_refptr<ExternalMountPoints> mount_points = |
| 149 ExternalMountPoints::CreateRefCounted(); | 149 ExternalMountPoints::CreateRefCounted(); |
| 150 | 150 |
| 151 // Register system external mount point. | 151 // Register system external mount point. |
| 152 ASSERT_TRUE(mount_points->RegisterFileSystem( | 152 ASSERT_TRUE(mount_points->RegisterFileSystem( |
| 153 "system", | 153 "system", |
| 154 kFileSystemTypeNativeLocal, | 154 kFileSystemTypeNativeLocal, |
| 155 FilePath(DRIVE FPL("/test/sys/")))); | 155 base::FilePath(DRIVE FPL("/test/sys/")))); |
| 156 | 156 |
| 157 scoped_refptr<FileSystemContext> file_system_context( | 157 scoped_refptr<FileSystemContext> file_system_context( |
| 158 CreateFileSystemContextForTest(mount_points.get())); | 158 CreateFileSystemContextForTest(mount_points.get())); |
| 159 | 159 |
| 160 // Release a MountPoints reference created in the test. | 160 // Release a MountPoints reference created in the test. |
| 161 mount_points = NULL; | 161 mount_points = NULL; |
| 162 | 162 |
| 163 // FileSystemContext should keep a reference to the |mount_points|, so it | 163 // FileSystemContext should keep a reference to the |mount_points|, so it |
| 164 // should be able to resolve the URL. | 164 // should be able to resolve the URL. |
| 165 FileSystemURL cracked_external = file_system_context->CrackURL( | 165 FileSystemURL cracked_external = file_system_context->CrackURL( |
| 166 CreateRawFileSystemURL("external", "system")); | 166 CreateRawFileSystemURL("external", "system")); |
| 167 | 167 |
| 168 ExpectFileSystemURLMatches( | 168 ExpectFileSystemURLMatches( |
| 169 cracked_external, | 169 cracked_external, |
| 170 GURL(kTestOrigin), | 170 GURL(kTestOrigin), |
| 171 kFileSystemTypeExternal, | 171 kFileSystemTypeExternal, |
| 172 kFileSystemTypeNativeLocal, | 172 kFileSystemTypeNativeLocal, |
| 173 FilePath(DRIVE FPL("/test/sys/root/file")).NormalizePathSeparators(), | 173 base::FilePath(DRIVE FPL("/test/sys/root/file")).NormalizePathSeparators()
, |
| 174 FilePath(FPL("system/root/file")).NormalizePathSeparators(), | 174 base::FilePath(FPL("system/root/file")).NormalizePathSeparators(), |
| 175 "system"); | 175 "system"); |
| 176 | 176 |
| 177 // No need to revoke the registered filesystem since |mount_points| lifetime | 177 // No need to revoke the registered filesystem since |mount_points| lifetime |
| 178 // is bound to this test. | 178 // is bound to this test. |
| 179 } | 179 } |
| 180 | 180 |
| 181 TEST_F(FileSystemContextTest, CrackFileSystemURL) { | 181 TEST_F(FileSystemContextTest, CrackFileSystemURL) { |
| 182 scoped_refptr<ExternalMountPoints> external_mount_points( | 182 scoped_refptr<ExternalMountPoints> external_mount_points( |
| 183 ExternalMountPoints::CreateRefCounted()); | 183 ExternalMountPoints::CreateRefCounted()); |
| 184 scoped_refptr<FileSystemContext> file_system_context( | 184 scoped_refptr<FileSystemContext> file_system_context( |
| 185 CreateFileSystemContextForTest(external_mount_points)); | 185 CreateFileSystemContextForTest(external_mount_points)); |
| 186 | 186 |
| 187 // Register an isolated mount point. | 187 // Register an isolated mount point. |
| 188 std::string isolated_file_system_name = "root"; | 188 std::string isolated_file_system_name = "root"; |
| 189 const std::string kIsolatedFileSystemID = | 189 const std::string kIsolatedFileSystemID = |
| 190 IsolatedContext::GetInstance()->RegisterFileSystemForPath( | 190 IsolatedContext::GetInstance()->RegisterFileSystemForPath( |
| 191 kFileSystemTypeNativeLocal, | 191 kFileSystemTypeNativeLocal, |
| 192 FilePath(DRIVE FPL("/test/isolated/root")), | 192 base::FilePath(DRIVE FPL("/test/isolated/root")), |
| 193 &isolated_file_system_name); | 193 &isolated_file_system_name); |
| 194 // Register system external mount point. | 194 // Register system external mount point. |
| 195 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 195 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
| 196 "system", | 196 "system", |
| 197 kFileSystemTypeDrive, | 197 kFileSystemTypeDrive, |
| 198 FilePath(DRIVE FPL("/test/sys/")))); | 198 base::FilePath(DRIVE FPL("/test/sys/")))); |
| 199 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 199 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
| 200 "ext", | 200 "ext", |
| 201 kFileSystemTypeNativeLocal, | 201 kFileSystemTypeNativeLocal, |
| 202 FilePath(DRIVE FPL("/test/ext")))); | 202 base::FilePath(DRIVE FPL("/test/ext")))); |
| 203 // Register a system external mount point with the same name/id as the | 203 // Register a system external mount point with the same name/id as the |
| 204 // registered isolated mount point. | 204 // registered isolated mount point. |
| 205 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 205 ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
| 206 kIsolatedFileSystemID, | 206 kIsolatedFileSystemID, |
| 207 kFileSystemTypeRestrictedNativeLocal, | 207 kFileSystemTypeRestrictedNativeLocal, |
| 208 FilePath(DRIVE FPL("/test/system/isolated")))); | 208 base::FilePath(DRIVE FPL("/test/system/isolated")))); |
| 209 // Add a mount points with the same name as a system mount point to | 209 // Add a mount points with the same name as a system mount point to |
| 210 // FileSystemContext's external mount points. | 210 // FileSystemContext's external mount points. |
| 211 ASSERT_TRUE(external_mount_points->RegisterFileSystem( | 211 ASSERT_TRUE(external_mount_points->RegisterFileSystem( |
| 212 "ext", | 212 "ext", |
| 213 kFileSystemTypeNativeLocal, | 213 kFileSystemTypeNativeLocal, |
| 214 FilePath(DRIVE FPL("/test/local/ext/")))); | 214 base::FilePath(DRIVE FPL("/test/local/ext/")))); |
| 215 | 215 |
| 216 const GURL kTestOrigin = GURL("http://chromium.org/"); | 216 const GURL kTestOrigin = GURL("http://chromium.org/"); |
| 217 const FilePath kVirtualPathNoRoot = FilePath(FPL("root/file")); | 217 const base::FilePath kVirtualPathNoRoot = base::FilePath(FPL("root/file")); |
| 218 | 218 |
| 219 struct TestCase { | 219 struct TestCase { |
| 220 // Test case values. | 220 // Test case values. |
| 221 std::string root; | 221 std::string root; |
| 222 std::string type_str; | 222 std::string type_str; |
| 223 | 223 |
| 224 // Expected test results. | 224 // Expected test results. |
| 225 bool expect_is_valid; | 225 bool expect_is_valid; |
| 226 FileSystemType expect_mount_type; | 226 FileSystemType expect_mount_type; |
| 227 FileSystemType expect_type; | 227 FileSystemType expect_type; |
| 228 const FilePath::CharType* expect_path; | 228 const base::FilePath::CharType* expect_path; |
| 229 bool expect_virtual_path_empty; | 229 bool expect_virtual_path_empty; |
| 230 std::string expect_filesystem_id; | 230 std::string expect_filesystem_id; |
| 231 }; | 231 }; |
| 232 | 232 |
| 233 const TestCase kTestCases[] = { | 233 const TestCase kTestCases[] = { |
| 234 // Following should not be handled by the url crackers: | 234 // Following should not be handled by the url crackers: |
| 235 { | 235 { |
| 236 "pers_mount", "persistent", true /* is_valid */, | 236 "pers_mount", "persistent", true /* is_valid */, |
| 237 kFileSystemTypePersistent, kFileSystemTypePersistent, | 237 kFileSystemTypePersistent, kFileSystemTypePersistent, |
| 238 FPL("pers_mount/root/file"), true /* virtual path empty */, | 238 FPL("pers_mount/root/file"), true /* virtual path empty */, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 // Test for URL with non-existing filesystem id. | 283 // Test for URL with non-existing filesystem id. |
| 284 { | 284 { |
| 285 "invalid", "external", false /* is_valid */, | 285 "invalid", "external", false /* is_valid */, |
| 286 // The rest of values will be ignored. | 286 // The rest of values will be ignored. |
| 287 kFileSystemTypeUnknown, kFileSystemTypeUnknown, FPL(""), true, | 287 kFileSystemTypeUnknown, kFileSystemTypeUnknown, FPL(""), true, |
| 288 std::string() | 288 std::string() |
| 289 }, | 289 }, |
| 290 }; | 290 }; |
| 291 | 291 |
| 292 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { | 292 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
| 293 const FilePath virtual_path = | 293 const base::FilePath virtual_path = |
| 294 FilePath::FromUTF8Unsafe(kTestCases[i].root).Append(kVirtualPathNoRoot); | 294 base::FilePath::FromUTF8Unsafe(kTestCases[i].root).Append(kVirtualPathNo
Root); |
| 295 | 295 |
| 296 GURL raw_url = | 296 GURL raw_url = |
| 297 CreateRawFileSystemURL(kTestCases[i].type_str, kTestCases[i].root); | 297 CreateRawFileSystemURL(kTestCases[i].type_str, kTestCases[i].root); |
| 298 FileSystemURL cracked_url = file_system_context->CrackURL(raw_url); | 298 FileSystemURL cracked_url = file_system_context->CrackURL(raw_url); |
| 299 | 299 |
| 300 SCOPED_TRACE(testing::Message() << "Test case " << i << ": " | 300 SCOPED_TRACE(testing::Message() << "Test case " << i << ": " |
| 301 << "Cracking URL: " << raw_url); | 301 << "Cracking URL: " << raw_url); |
| 302 | 302 |
| 303 EXPECT_EQ(kTestCases[i].expect_is_valid, cracked_url.is_valid()); | 303 EXPECT_EQ(kTestCases[i].expect_is_valid, cracked_url.is_valid()); |
| 304 if (!kTestCases[i].expect_is_valid) | 304 if (!kTestCases[i].expect_is_valid) |
| 305 continue; | 305 continue; |
| 306 | 306 |
| 307 ExpectFileSystemURLMatches( | 307 ExpectFileSystemURLMatches( |
| 308 cracked_url, | 308 cracked_url, |
| 309 GURL(kTestOrigin), | 309 GURL(kTestOrigin), |
| 310 kTestCases[i].expect_mount_type, | 310 kTestCases[i].expect_mount_type, |
| 311 kTestCases[i].expect_type, | 311 kTestCases[i].expect_type, |
| 312 FilePath(kTestCases[i].expect_path).NormalizePathSeparators(), | 312 base::FilePath(kTestCases[i].expect_path).NormalizePathSeparators(), |
| 313 kTestCases[i].expect_virtual_path_empty ? | 313 kTestCases[i].expect_virtual_path_empty ? |
| 314 FilePath() : virtual_path.NormalizePathSeparators(), | 314 base::FilePath() : virtual_path.NormalizePathSeparators(), |
| 315 kTestCases[i].expect_filesystem_id); | 315 kTestCases[i].expect_filesystem_id); |
| 316 } | 316 } |
| 317 | 317 |
| 318 IsolatedContext::GetInstance()->RevokeFileSystemByPath( | 318 IsolatedContext::GetInstance()->RevokeFileSystemByPath( |
| 319 FilePath(DRIVE FPL("/test/isolated/root"))); | 319 base::FilePath(DRIVE FPL("/test/isolated/root"))); |
| 320 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system"); | 320 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system"); |
| 321 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("ext"); | 321 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("ext"); |
| 322 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem( | 322 ExternalMountPoints::GetSystemInstance()->RevokeFileSystem( |
| 323 kIsolatedFileSystemID); | 323 kIsolatedFileSystemID); |
| 324 } | 324 } |
| 325 | 325 |
| 326 } // namespace | 326 } // namespace |
| 327 | 327 |
| 328 } // namespace fileapi | 328 } // namespace fileapi |
| 329 | 329 |
| OLD | NEW |