Index: webkit/chromeos/fileapi/cros_mount_point_provider.h |
diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider.h b/webkit/chromeos/fileapi/cros_mount_point_provider.h |
index 8e32f4dc20cf99abfac4bd7db97f2e5ffde41e24..c259c61e7bebad65f7207d543af3159275afd273 100644 |
--- a/webkit/chromeos/fileapi/cros_mount_point_provider.h |
+++ b/webkit/chromeos/fileapi/cros_mount_point_provider.h |
@@ -18,6 +18,7 @@ |
#include "webkit/storage/webkit_storage_export.h" |
namespace fileapi { |
+class ExternalMountPoints; |
class FileSystemFileUtil; |
class FileSystemURL; |
class IsolatedContext; |
@@ -35,8 +36,13 @@ class WEBKIT_STORAGE_EXPORT CrosMountPointProvider |
using fileapi::FileSystemMountPointProvider::ValidateFileSystemCallback; |
using fileapi::FileSystemMountPointProvider::DeleteFileSystemCallback; |
+ // CrosMountPointProvider will take an ownership of a |mount_points| |
+ // reference. On the other hand, |system_mount_points| will be kept as a raw |
+ // pointer and it should outlive CrosMountPointProvider instance. |
CrosMountPointProvider( |
- scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy); |
+ scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy, |
+ scoped_refptr<fileapi::ExternalMountPoints> mount_points, |
+ fileapi::ExternalMountPoints* system_mount_points); |
virtual ~CrosMountPointProvider(); |
// Returns true if CrosMountpointProvider can handle |url|, i.e. its |
@@ -80,18 +86,22 @@ class WEBKIT_STORAGE_EXPORT CrosMountPointProvider |
const DeleteFileSystemCallback& callback) OVERRIDE; |
// fileapi::ExternalFileSystemMountPointProvider overrides. |
- virtual std::vector<FilePath> GetRootDirectories() const OVERRIDE; |
+ virtual std::vector<FilePath> GetRootDirectories( |
+ bool include_system_mount_points) const OVERRIDE; |
virtual void GrantFullAccessToExtension( |
const std::string& extension_id) OVERRIDE; |
virtual void GrantFileAccessToExtension( |
const std::string& extension_id, const FilePath& virtual_path) OVERRIDE; |
virtual void RevokeAccessForExtension( |
const std::string& extension_id) OVERRIDE; |
- virtual bool HasMountPoint(const FilePath& mount_point) OVERRIDE; |
- virtual void AddLocalMountPoint(const FilePath& mount_point) OVERRIDE; |
- virtual void AddRestrictedLocalMountPoint( |
+ // Note: This will ignore |system_mount_points_|. The reasoning behind this is |
+ // the method should be used paired with Add/RemoveMountPoint methods, which |
+ // don't affect |system_mount_points_|. |
+ virtual bool HasMountPoint(const FilePath& mount_point) const OVERRIDE; |
+ virtual bool AddLocalMountPoint(const FilePath& mount_point) OVERRIDE; |
+ virtual bool AddRestrictedLocalMountPoint( |
const FilePath& mount_point) OVERRIDE; |
- virtual void AddRemoteMountPoint( |
+ virtual bool AddRemoteMountPoint( |
const FilePath& mount_point, |
fileapi::RemoteFileSystemProxyInterface* remote_proxy) OVERRIDE; |
virtual void RemoveMountPoint(const FilePath& mount_point) OVERRIDE; |
@@ -99,22 +109,31 @@ class WEBKIT_STORAGE_EXPORT CrosMountPointProvider |
FilePath* virtual_path) OVERRIDE; |
private: |
- typedef scoped_refptr<fileapi::RemoteFileSystemProxyInterface> RemoteProxy; |
- typedef std::map<FilePath::StringType, RemoteProxy> RemoteProxyMap; |
- |
- fileapi::IsolatedContext* isolated_context() const; |
- |
- // Represents a map from mount point name to a remote proxy. |
- RemoteProxyMap remote_proxy_map_; |
- |
- // Reverse map for GetVirtualPath. |
- std::map<FilePath, FilePath> local_to_virtual_map_; |
- |
- mutable base::Lock mount_point_map_lock_; |
+ fileapi::RemoteFileSystemProxyInterface* GetRemoteProxy( |
+ const std::string& mount_name) const; |
scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_; |
scoped_ptr<FileAccessPermissions> file_access_permissions_; |
scoped_ptr<fileapi::LocalFileUtil> local_file_util_; |
+ |
+ // Mount points specific to the owning context. |
+ // |
+ // Add/Remove MountPoints will affect only these mount points. |
+ // |
+ // It is legal to have mount points with the same name as in |
+ // system_mount_points_. Also, mount point paths may overlap with mount point |
+ // paths in system_mount_points_. In both cases mount points in |
+ // |mount_points_| will have a priority. |
+ // E.g. if |mount_points_| map 'foo1' to '/foo/foo1' and |
+ // |file_system_mount_points_| map 'xxx' to '/foo/foo1/xxx', |GetVirtualPaths| |
+ // will resolve '/foo/foo1/xxx/yyy' as 'foo1/xxx/yyy' (i.e. the mapping from |
+ // |mount_points_| will be used). |
+ scoped_refptr<fileapi::ExternalMountPoints> mount_points_; |
+ |
+ // Globally visible mount points. System MountPonts instance should outlive |
+ // all CrosMountPointProvider instances, so raw pointer is safe. |
+ fileapi::ExternalMountPoints* system_mount_points_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CrosMountPointProvider); |
}; |