| Index: webkit/fileapi/isolated_context.h
|
| diff --git a/webkit/fileapi/isolated_context.h b/webkit/fileapi/isolated_context.h
|
| index e0cea7cfc8a431d7f1eaad9d4ac5106d2b37e6d5..798206e347aa502f8ef379fa97a86967fbb08a58 100644
|
| --- a/webkit/fileapi/isolated_context.h
|
| +++ b/webkit/fileapi/isolated_context.h
|
| @@ -16,60 +16,25 @@
|
| #include "base/memory/singleton.h"
|
| #include "base/synchronization/lock.h"
|
| #include "webkit/fileapi/file_system_types.h"
|
| +#include "webkit/fileapi/mount_points.h"
|
| #include "webkit/storage/webkit_storage_export.h"
|
|
|
| namespace fileapi {
|
|
|
| -// Manages isolated filesystem namespaces.
|
| -// This context class is a singleton and access to the context is
|
| -// thread-safe (protected with a lock).
|
| -//
|
| -// There are two types of filesystems managed by this context:
|
| -// isolated and external.
|
| -// The former is transient while the latter is persistent.
|
| -//
|
| -// * Transient isolated file systems have no name and are identified by
|
| -// string 'filesystem ID', which usually just looks like random value.
|
| -// This type of filesystem can be created on the fly and may go away
|
| -// when it has no references from renderers.
|
| -// Files in an isolated filesystem are registered with corresponding names
|
| -// and identified by a filesystem URL like:
|
| +// Manages isolated filesystem mount points which have no well-known names
|
| +// and are identified by a string 'filesystem ID', which usually just looks
|
| +// like random value.
|
| +// This type of filesystem can be created on the fly and may go away when it has
|
| +// no references from renderers.
|
| +// Files in an isolated filesystem are registered with corresponding names and
|
| +// identified by a filesystem URL like:
|
| //
|
| // filesystem:<origin>/isolated/<filesystem_id>/<name>/relative/path
|
| //
|
| -// * Persistent external file systems are identified by 'mount name'
|
| -// and are persisted until RevokeFileSystem is called.
|
| -// Files in an external filesystem are identified by a filesystem URL like:
|
| -//
|
| -// filesystem:<origin>/external/<mount_name>/relative/path
|
| -//
|
| -// A filesystem instance is represented by IsolatedContext::Instance, and
|
| -// managed as a map instance_map_ which maps from filesystem ID (or name)
|
| -// to the instance.
|
| -//
|
| // Some methods of this class are virtual just for mocking.
|
| //
|
| -// TODO(kinuko): This should have a better name since this handles both
|
| -// isolated and external file systems.
|
| -//
|
| -class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
| +class WEBKIT_STORAGE_EXPORT IsolatedContext : public MountPoints {
|
| public:
|
| - struct WEBKIT_STORAGE_EXPORT FileInfo {
|
| - FileInfo();
|
| - FileInfo(const std::string& name, const FilePath& path);
|
| -
|
| - // The name to be used to register the file. The registered file can
|
| - // be referred by a virtual path /<filesystem_id>/<name>.
|
| - // The name should NOT contain a path separator '/'.
|
| - std::string name;
|
| -
|
| - // The path of the file.
|
| - FilePath path;
|
| -
|
| - // For STL operation.
|
| - bool operator<(const FileInfo& that) const { return name < that.name; }
|
| - };
|
| -
|
| class WEBKIT_STORAGE_EXPORT FileInfoSet {
|
| public:
|
| FileInfoSet();
|
| @@ -86,10 +51,10 @@ class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
| // is not valid and could not be added.
|
| bool AddPathWithName(const FilePath& path, const std::string& name);
|
|
|
| - const std::set<FileInfo>& fileset() const { return fileset_; }
|
| + const std::set<MountPointInfo>& fileset() const { return fileset_; }
|
|
|
| private:
|
| - std::set<FileInfo> fileset_;
|
| + std::set<MountPointInfo> fileset_;
|
| };
|
|
|
| // The instance is lazily created per browser process.
|
| @@ -133,30 +98,6 @@ class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
| const FilePath& path,
|
| std::string* register_name);
|
|
|
| - // Registers a new named external filesystem.
|
| - // The |path| is registered as the root path of the mount point which
|
| - // is identified by a URL "filesystem:.../external/mount_name".
|
| - //
|
| - // For example, if the path "/media/removable" is registered with
|
| - // the mount_name "removable", a filesystem URL like
|
| - // "filesystem:.../external/removable/a/b" will be resolved as
|
| - // "/media/removable/a/b".
|
| - //
|
| - // The |mount_name| should NOT contain a path separator '/'.
|
| - // Returns false if the given name is already registered.
|
| - //
|
| - // An external file system registered by this method can be revoked
|
| - // by calling RevokeFileSystem with |mount_name|.
|
| - bool RegisterExternalFileSystem(const std::string& mount_name,
|
| - FileSystemType type,
|
| - const FilePath& path);
|
| -
|
| - // Returns a set of FilePath (of <mount_name, path>) registered as external.
|
| - std::vector<FileInfo> GetExternalMountPoints() const;
|
| -
|
| - // Revokes the filesystem |filesystem_id|.
|
| - // Returns false if the |filesystem_id| is not (no longer) registered.
|
| - bool RevokeFileSystem(const std::string& filesystem_id);
|
|
|
| // Revokes all filesystem(s) registered for the given path.
|
| // This is assumed to be called when the registered path becomes
|
| @@ -178,36 +119,35 @@ class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
| void RemoveReference(const std::string& filesystem_id);
|
|
|
| // Cracks the given |virtual_path| (which is the path part of a filesystem URL
|
| - // without '/isolated' or '/external' prefix) and populates the
|
| - // |id_or_name|, |type|, and |path| if the <id_or_name> part embedded in
|
| - // the |virtual_path| (i.e. the first component of the |virtual_path|) is a
|
| - // valid registered filesystem ID or mount name for an isolated or external
|
| - // filesystem.
|
| + // without '/isolated' prefix) and populates the |filesystem_id|, |type|, and
|
| + // |path| if the <filesystem_id> part embedded in the |virtual_path| (i.e. the
|
| + // first component of the |virtual_path|) is a valid registered filesystem ID
|
| + // for an isolated filesystem.
|
| //
|
| - // Returns false if the given virtual_path or the cracked id_or_name
|
| - // is not valid.
|
| + // Returns false if the given virtual_path or the cracked filesystem_id is not
|
| + // valid.
|
| //
|
| // Note that |path| is set to empty paths if the filesystem type is isolated
|
| // and |virtual_path| has no <relative_path> part (i.e. pointing to the
|
| // virtual root).
|
| bool CrackIsolatedPath(const FilePath& virtual_path,
|
| - std::string* id_or_name,
|
| + std::string* filesystem_id,
|
| FileSystemType* type,
|
| FilePath* path) const;
|
|
|
| - // Returns a set of dragged FileInfo's registered for the |filesystem_id|.
|
| + // Returns a set of dragged MountPointInfos registered for the
|
| + // |filesystem_id|.
|
| // The filesystem_id must be pointing to a dragged file system
|
| // (i.e. must be the one registered by RegisterDraggedFileSystem).
|
| // Returns false if the |filesystem_id| is not valid.
|
| bool GetDraggedFileInfo(const std::string& filesystem_id,
|
| - std::vector<FileInfo>* files) const;
|
| + std::vector<MountPointInfo>* files) const;
|
|
|
| - // Returns the file path registered for the |filesystem_id|.
|
| - // The filesystem_id must NOT be pointing to a dragged file system
|
| - // (i.e. must be the one registered by RegisterFileSystemForPath).
|
| - // Returns false if the |filesystem_id| is not valid.
|
| - bool GetRegisteredPath(const std::string& filesystem_id,
|
| - FilePath* path) const;
|
| + // MountPoints override.
|
| + virtual bool CanCrackMountType(FileSystemType type) const OVERRIDE;
|
| + virtual bool GetRegisteredPath(const std::string& filesystem_id,
|
| + FilePath* path) const OVERRIDE;
|
| + virtual bool RevokeFileSystem(const std::string& filesystem_id) OVERRIDE;
|
|
|
| // Returns the virtual root path that looks like /<filesystem_id>.
|
| FilePath CreateVirtualRootPath(const std::string& filesystem_id) const;
|
| @@ -225,7 +165,7 @@ class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
|
|
| // Obtain an instance of this class via GetInstance().
|
| IsolatedContext();
|
| - ~IsolatedContext();
|
| + virtual ~IsolatedContext();
|
|
|
| // Unregisters a file system of given |filesystem_id|. Must be called with
|
| // lock_ held. Returns true if the file system is unregistered.
|
| @@ -243,20 +183,6 @@ class WEBKIT_STORAGE_EXPORT IsolatedContext {
|
| DISALLOW_COPY_AND_ASSIGN(IsolatedContext);
|
| };
|
|
|
| -// Registers a scoped external filesystem which gets revoked when it scopes out.
|
| -class WEBKIT_STORAGE_EXPORT ScopedExternalFileSystem {
|
| - public:
|
| - ScopedExternalFileSystem(const std::string& mount_name,
|
| - FileSystemType type,
|
| - const FilePath& path);
|
| - ~ScopedExternalFileSystem();
|
| -
|
| - FilePath GetVirtualRootPath() const;
|
| -
|
| - private:
|
| - const std::string mount_name_;
|
| -};
|
| -
|
| } // namespace fileapi
|
|
|
| #endif // WEBKIT_FILEAPI_ISOLATED_CONTEXT_H_
|
|
|