| 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/browser/fileapi/external_mount_points.h" | 5 #include "webkit/browser/fileapi/external_mount_points.h" |
| 6 | 6 |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 if (path.empty()) | 23 if (path.empty()) |
| 24 return path; | 24 return path; |
| 25 | 25 |
| 26 base::FilePath::StringType path_str = path.StripTrailingSeparators().value(); | 26 base::FilePath::StringType path_str = path.StripTrailingSeparators().value(); |
| 27 if (!base::FilePath::IsSeparator(path_str[path_str.length() - 1])) | 27 if (!base::FilePath::IsSeparator(path_str[path_str.length() - 1])) |
| 28 path_str.append(FILE_PATH_LITERAL("/")); | 28 path_str.append(FILE_PATH_LITERAL("/")); |
| 29 | 29 |
| 30 return base::FilePath(path_str).NormalizePathSeparators(); | 30 return base::FilePath(path_str).NormalizePathSeparators(); |
| 31 } | 31 } |
| 32 | 32 |
| 33 bool IsOverlappingMountPathForbidden(fileapi::FileSystemType type) { | 33 bool IsOverlappingMountPathForbidden(storage::FileSystemType type) { |
| 34 return type != fileapi::kFileSystemTypeNativeMedia && | 34 return type != storage::kFileSystemTypeNativeMedia && |
| 35 type != fileapi::kFileSystemTypeDeviceMedia; | 35 type != storage::kFileSystemTypeDeviceMedia; |
| 36 } | 36 } |
| 37 | 37 |
| 38 // Wrapper around ref-counted ExternalMountPoints that will be used to lazily | 38 // Wrapper around ref-counted ExternalMountPoints that will be used to lazily |
| 39 // create and initialize LazyInstance system ExternalMountPoints. | 39 // create and initialize LazyInstance system ExternalMountPoints. |
| 40 class SystemMountPointsLazyWrapper { | 40 class SystemMountPointsLazyWrapper { |
| 41 public: | 41 public: |
| 42 SystemMountPointsLazyWrapper() | 42 SystemMountPointsLazyWrapper() |
| 43 : system_mount_points_(fileapi::ExternalMountPoints::CreateRefCounted()) { | 43 : system_mount_points_(storage::ExternalMountPoints::CreateRefCounted()) { |
| 44 } | 44 } |
| 45 | 45 |
| 46 ~SystemMountPointsLazyWrapper() {} | 46 ~SystemMountPointsLazyWrapper() {} |
| 47 | 47 |
| 48 fileapi::ExternalMountPoints* get() { | 48 storage::ExternalMountPoints* get() { return system_mount_points_.get(); } |
| 49 return system_mount_points_.get(); | |
| 50 } | |
| 51 | 49 |
| 52 private: | 50 private: |
| 53 scoped_refptr<fileapi::ExternalMountPoints> system_mount_points_; | 51 scoped_refptr<storage::ExternalMountPoints> system_mount_points_; |
| 54 }; | 52 }; |
| 55 | 53 |
| 56 base::LazyInstance<SystemMountPointsLazyWrapper>::Leaky | 54 base::LazyInstance<SystemMountPointsLazyWrapper>::Leaky |
| 57 g_external_mount_points = LAZY_INSTANCE_INITIALIZER; | 55 g_external_mount_points = LAZY_INSTANCE_INITIALIZER; |
| 58 | 56 |
| 59 } // namespace | 57 } // namespace |
| 60 | 58 |
| 61 namespace fileapi { | 59 namespace storage { |
| 62 | 60 |
| 63 class ExternalMountPoints::Instance { | 61 class ExternalMountPoints::Instance { |
| 64 public: | 62 public: |
| 65 Instance(FileSystemType type, | 63 Instance(FileSystemType type, |
| 66 const base::FilePath& path, | 64 const base::FilePath& path, |
| 67 const FileSystemMountOption& mount_option) | 65 const FileSystemMountOption& mount_option) |
| 68 : type_(type), | 66 : type_(type), |
| 69 path_(path.StripTrailingSeparators()), | 67 path_(path.StripTrailingSeparators()), |
| 70 mount_option_(mount_option) {} | 68 mount_option_(mount_option) {} |
| 71 ~Instance() {} | 69 ~Instance() {} |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 const std::string& mount_name) const { | 238 const std::string& mount_name) const { |
| 241 return base::FilePath().AppendASCII(mount_name); | 239 return base::FilePath().AppendASCII(mount_name); |
| 242 } | 240 } |
| 243 | 241 |
| 244 FileSystemURL ExternalMountPoints::CreateExternalFileSystemURL( | 242 FileSystemURL ExternalMountPoints::CreateExternalFileSystemURL( |
| 245 const GURL& origin, | 243 const GURL& origin, |
| 246 const std::string& mount_name, | 244 const std::string& mount_name, |
| 247 const base::FilePath& path) const { | 245 const base::FilePath& path) const { |
| 248 return CreateCrackedFileSystemURL( | 246 return CreateCrackedFileSystemURL( |
| 249 origin, | 247 origin, |
| 250 fileapi::kFileSystemTypeExternal, | 248 storage::kFileSystemTypeExternal, |
| 251 // Avoid using FilePath::Append as path may be an absolute path. | 249 // Avoid using FilePath::Append as path may be an absolute path. |
| 252 base::FilePath( | 250 base::FilePath(CreateVirtualRootPath(mount_name).value() + |
| 253 CreateVirtualRootPath(mount_name).value() + | 251 base::FilePath::kSeparators[0] + path.value())); |
| 254 base::FilePath::kSeparators[0] + path.value())); | |
| 255 } | 252 } |
| 256 | 253 |
| 257 void ExternalMountPoints::RevokeAllFileSystems() { | 254 void ExternalMountPoints::RevokeAllFileSystems() { |
| 258 NameToInstance instance_map_copy; | 255 NameToInstance instance_map_copy; |
| 259 { | 256 { |
| 260 base::AutoLock locker(lock_); | 257 base::AutoLock locker(lock_); |
| 261 instance_map_copy = instance_map_; | 258 instance_map_copy = instance_map_; |
| 262 instance_map_.clear(); | 259 instance_map_.clear(); |
| 263 path_to_name_map_.clear(); | 260 path_to_name_map_.clear(); |
| 264 } | 261 } |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 if (potential_child->first == path || | 347 if (potential_child->first == path || |
| 351 path.IsParent(potential_child->first)) { | 348 path.IsParent(potential_child->first)) { |
| 352 return false; | 349 return false; |
| 353 } | 350 } |
| 354 } | 351 } |
| 355 } | 352 } |
| 356 | 353 |
| 357 return true; | 354 return true; |
| 358 } | 355 } |
| 359 | 356 |
| 360 } // namespace fileapi | 357 } // namespace storage |
| OLD | NEW |