| Index: webkit/fileapi/isolated_context.h
|
| diff --git a/webkit/fileapi/isolated_context.h b/webkit/fileapi/isolated_context.h
|
| index ca891062f02148e0c0db31736e93f1c51982bfba..5593c629877c56226a9b214e50dfe70085f8c051 100644
|
| --- a/webkit/fileapi/isolated_context.h
|
| +++ b/webkit/fileapi/isolated_context.h
|
| @@ -88,7 +88,7 @@ class FILEAPI_EXPORT IsolatedContext {
|
| // cracked into '/a/b/dir/foo'.
|
| //
|
| // Note that the path in |fileset| that contains '..' or is not an
|
| - // absolute path is skipped and is not registerred.
|
| + // absolute path is skipped and is not registered.
|
| std::string RegisterDraggedFileSystem(const FileInfoSet& files);
|
|
|
| // Registers a new isolated filesystem for a given |path| of filesystem
|
| @@ -101,11 +101,15 @@ class FILEAPI_EXPORT IsolatedContext {
|
| const FilePath& path,
|
| std::string* register_name);
|
|
|
| - // Revokes filesystem specified by the given filesystem_id.
|
| + // Revokes all filesystem(s) registered for the given path.
|
| + // This is assumed to be called when the registered path becomes
|
| + // globally invalid, e.g. when a device for the path is detached.
|
| + //
|
| // Note that this revokes the filesystem no matter how many references it has.
|
| - // It is ok to call this on the filesystem that has been already deleted
|
| - // (if its reference count had reached 0).
|
| - void RevokeFileSystem(const std::string& filesystem_id);
|
| + // It is ok to call this for the path that has no associated filesystems.
|
| + // Note that this only works for the filesystems registered by
|
| + // |RegisterFileSystemForPath|.
|
| + void RevokeFileSystemByPath(const FilePath& path);
|
|
|
| // Adds a reference to a filesystem specified by the given filesystem_id.
|
| void AddReference(const std::string& filesystem_id);
|
| @@ -113,13 +117,13 @@ class FILEAPI_EXPORT IsolatedContext {
|
| // Removes a reference to a filesystem specified by the given filesystem_id.
|
| // If the reference count reaches 0 the isolated context gets destroyed.
|
| // It is ok to call this on the filesystem that has been already deleted
|
| - // (e.g. by RevokeFileSystem).
|
| + // (e.g. by RevokeFileSystemByPath).
|
| void RemoveReference(const std::string& filesystem_id);
|
|
|
| // Cracks the given |virtual_path| (which should look like
|
| // "/<filesystem_id>/<registered_name>/<relative_path>") and populates
|
| // the |filesystem_id| and |path| if the embedded <filesystem_id>
|
| - // is registerred to this context. |root_path| is also populated to have
|
| + // is registered to this context. |root_path| is also populated to have
|
| // the registered root (toplevel) file info for the |virtual_path|.
|
| //
|
| // Returns false if the given virtual_path or the cracked filesystem_id
|
| @@ -155,26 +159,39 @@ class FILEAPI_EXPORT IsolatedContext {
|
| // Represents each isolated file system instance.
|
| class Instance {
|
| public:
|
| + // For a single-path file system, which could be registered by
|
| + // IsolatedContext::RegisterFileSystemForPath().
|
| + // Most of isolated file system contexts should be of this type.
|
| Instance(FileSystemType type, const FileInfo& file_info);
|
| - explicit Instance(const std::set<FileInfo>& dragged_files);
|
| +
|
| + // For a multi-paths file system. As of writing only file system
|
| + // type which could have multi-paths is Dragged file system, and
|
| + // could be registered by IsolatedContext::RegisterDraggedFileSystem().
|
| + Instance(FileSystemType type, const std::set<FileInfo>& files);
|
| +
|
| ~Instance();
|
|
|
| FileSystemType type() const { return type_; }
|
| const FileInfo& file_info() const { return file_info_; }
|
| - const std::set<FileInfo>& dragged_files() const { return dragged_files_; }
|
| + const std::set<FileInfo>& files() const { return files_; }
|
| int ref_counts() const { return ref_counts_; }
|
|
|
| void AddRef() { ++ref_counts_; }
|
| void RemoveRef() { --ref_counts_; }
|
|
|
| - bool ResolvePathForName(const std::string& name, FilePath* path);
|
| + bool ResolvePathForName(const std::string& name, FilePath* path) const;
|
| +
|
| + // Returns true if the instance is a single-path instance.
|
| + bool IsSinglePathInstance() const;
|
|
|
| private:
|
| const FileSystemType type_;
|
| +
|
| + // For single-path instance.
|
| const FileInfo file_info_;
|
|
|
| - // For dragged file system.
|
| - const std::set<FileInfo> dragged_files_;
|
| + // For multiple-path instance (e.g. dragged file system).
|
| + const std::set<FileInfo> files_;
|
|
|
| // Reference counts. Note that an isolated filesystem is created with ref==0
|
| // and will get deleted when the ref count reaches <=0.
|
| @@ -185,6 +202,9 @@ class FILEAPI_EXPORT IsolatedContext {
|
|
|
| typedef std::map<std::string, Instance*> IDToInstance;
|
|
|
| + // Reverse map from registered path to IDs.
|
| + typedef std::map<FilePath, std::set<std::string> > PathToID;
|
| +
|
| // Obtain an instance of this class via GetInstance().
|
| IsolatedContext();
|
| ~IsolatedContext();
|
| @@ -196,6 +216,7 @@ class FILEAPI_EXPORT IsolatedContext {
|
| mutable base::Lock lock_;
|
|
|
| IDToInstance instance_map_;
|
| + PathToID path_to_id_map_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(IsolatedContext);
|
| };
|
|
|