Index: webkit/browser/fileapi/isolated_context.h |
diff --git a/webkit/browser/fileapi/isolated_context.h b/webkit/browser/fileapi/isolated_context.h |
index 14a80ade074f0bbde90b8af2697644686a0d14a8..15917f4922c2afad35c38996a260cfe790f07708 100644 |
--- a/webkit/browser/fileapi/isolated_context.h |
+++ b/webkit/browser/fileapi/isolated_context.h |
@@ -1,201 +1,5 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef WEBKIT_BROWSER_FILEAPI_ISOLATED_CONTEXT_H_ |
-#define WEBKIT_BROWSER_FILEAPI_ISOLATED_CONTEXT_H_ |
- |
-#include <map> |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/files/file_path.h" |
-#include "base/lazy_instance.h" |
-#include "base/memory/singleton.h" |
-#include "base/synchronization/lock.h" |
-#include "webkit/browser/fileapi/mount_points.h" |
-#include "webkit/browser/storage_browser_export.h" |
-#include "webkit/common/fileapi/file_system_types.h" |
- |
-namespace storage { |
-class FileSystemURL; |
-} |
- |
-namespace storage { |
- |
-// 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 |
-// |
-// Some methods of this class are virtual just for mocking. |
-// |
-class STORAGE_EXPORT IsolatedContext : public MountPoints { |
- public: |
- class STORAGE_EXPORT FileInfoSet { |
- public: |
- FileInfoSet(); |
- ~FileInfoSet(); |
- |
- // Add the given |path| to the set and populates |registered_name| with |
- // the registered name assigned for the path. |path| needs to be |
- // absolute and should not contain parent references. |
- // Return false if the |path| is not valid and could not be added. |
- bool AddPath(const base::FilePath& path, std::string* registered_name); |
- |
- // Add the given |path| with the |name|. |
- // Return false if the |name| is already registered in the set or |
- // is not valid and could not be added. |
- bool AddPathWithName(const base::FilePath& path, const std::string& name); |
- |
- const std::set<MountPointInfo>& fileset() const { return fileset_; } |
- |
- private: |
- std::set<MountPointInfo> fileset_; |
- }; |
- |
- // The instance is lazily created per browser process. |
- static IsolatedContext* GetInstance(); |
- |
- // Returns true if the given filesystem type is managed by IsolatedContext |
- // (i.e. if the given |type| is Isolated or External). |
- // TODO(kinuko): needs a better function name. |
- static bool IsIsolatedType(FileSystemType type); |
- |
- // Registers a new isolated filesystem with the given FileInfoSet |files| |
- // and returns the new filesystem_id. The files are registered with their |
- // register_name as their keys so that later we can resolve the full paths |
- // for the given name. We only expose the name and the ID for the |
- // newly created filesystem to the renderer for the sake of security. |
- // |
- // The renderer will be sending filesystem requests with a virtual path like |
- // '/<filesystem_id>/<registered_name>/<relative_path_from_the_dropped_path>' |
- // for which we could crack in the browser process by calling |
- // CrackIsolatedPath to get the full path. |
- // |
- // For example: if a dropped file has a path like '/a/b/foo' and we register |
- // the path with the name 'foo' in the newly created filesystem. |
- // Later if the context is asked to crack a virtual path like '/<fsid>/foo' |
- // it can properly return the original path '/a/b/foo' by looking up the |
- // internal mapping. Similarly if a dropped entry is a directory and its |
- // path is like '/a/b/dir' a virtual path like '/<fsid>/dir/foo' can be |
- // 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 registered. |
- std::string RegisterDraggedFileSystem(const FileInfoSet& files); |
- |
- // Registers a new isolated filesystem for a given |path| of filesystem |
- // |type| filesystem with |filesystem_id| and returns a new filesystem ID. |
- // |path| must be an absolute path which has no parent references ('..'). |
- // If |register_name| is non-null and has non-empty string the path is |
- // registered as the given |register_name|, otherwise it is populated |
- // with the name internally assigned to the path. |
- std::string RegisterFileSystemForPath(FileSystemType type, |
- const std::string& filesystem_id, |
- const base::FilePath& path, |
- std::string* register_name); |
- |
- // Registers a virtual filesystem. This is different from |
- // RegisterFileSystemForPath because register_name is required, and |
- // cracked_path_prefix is allowed to be non-absolute. |
- // |register_name| is required, since we cannot infer one from the path. |
- // |cracked_path_prefix| has no parent references, but can be relative. |
- std::string RegisterFileSystemForVirtualPath( |
- FileSystemType type, |
- const std::string& register_name, |
- const base::FilePath& cracked_path_prefix); |
- |
- // 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 for the path that has no associated filesystems. |
- // Note that this only works for the filesystems registered by |
- // |RegisterFileSystemForPath|. |
- void RevokeFileSystemByPath(const base::FilePath& path); |
- |
- // Adds a reference to a filesystem specified by the given filesystem_id. |
- void AddReference(const std::string& filesystem_id); |
- |
- // 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 RevokeFileSystemByPath). |
- void RemoveReference(const std::string& 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<MountPointInfo>* files) const; |
- |
- // MountPoints overrides. |
- virtual bool HandlesFileSystemMountType(FileSystemType type) const OVERRIDE; |
- virtual bool RevokeFileSystem(const std::string& filesystem_id) OVERRIDE; |
- virtual bool GetRegisteredPath(const std::string& filesystem_id, |
- base::FilePath* path) const OVERRIDE; |
- virtual bool CrackVirtualPath( |
- const base::FilePath& virtual_path, |
- std::string* filesystem_id, |
- FileSystemType* type, |
- std::string* cracked_id, |
- base::FilePath* path, |
- FileSystemMountOption* mount_option) const OVERRIDE; |
- virtual FileSystemURL CrackURL(const GURL& url) const OVERRIDE; |
- virtual FileSystemURL CreateCrackedFileSystemURL( |
- const GURL& origin, |
- FileSystemType type, |
- const base::FilePath& path) const OVERRIDE; |
- |
- // Returns the virtual root path that looks like /<filesystem_id>. |
- base::FilePath CreateVirtualRootPath(const std::string& filesystem_id) const; |
- |
- private: |
- friend struct base::DefaultLazyInstanceTraits<IsolatedContext>; |
- |
- // Represents each file system instance (defined in the .cc). |
- class Instance; |
- |
- typedef std::map<std::string, Instance*> IDToInstance; |
- |
- // Reverse map from registered path to IDs. |
- typedef std::map<base::FilePath, std::set<std::string> > PathToID; |
- |
- // Obtain an instance of this class via GetInstance(). |
- IsolatedContext(); |
- virtual ~IsolatedContext(); |
- |
- // MountPoints overrides. |
- virtual FileSystemURL CrackFileSystemURL( |
- const FileSystemURL& url) const OVERRIDE; |
- |
- // Unregisters a file system of given |filesystem_id|. Must be called with |
- // lock_ held. Returns true if the file system is unregistered. |
- bool UnregisterFileSystem(const std::string& filesystem_id); |
- |
- // Returns a new filesystem_id. Called with lock. |
- std::string GetNewFileSystemId() const; |
- |
- // This lock needs to be obtained when accessing the instance_map_. |
- mutable base::Lock lock_; |
- |
- IDToInstance instance_map_; |
- PathToID path_to_id_map_; |
- |
- DISALLOW_COPY_AND_ASSIGN(IsolatedContext); |
-}; |
- |
-} // namespace storage |
- |
-#endif // WEBKIT_BROWSER_FILEAPI_ISOLATED_CONTEXT_H_ |
+#include "storage/browser/fileapi/isolated_context.h" |