Index: webkit/browser/fileapi/file_system_context.h |
diff --git a/webkit/browser/fileapi/file_system_context.h b/webkit/browser/fileapi/file_system_context.h |
index cbebf030faed564fdd4a773bc0a7355641eb3337..6b016b91af878be586aa701db185fa94edb7827f 100644 |
--- a/webkit/browser/fileapi/file_system_context.h |
+++ b/webkit/browser/fileapi/file_system_context.h |
@@ -1,427 +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_FILE_SYSTEM_CONTEXT_H_ |
-#define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "base/callback.h" |
-#include "base/files/file.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/scoped_vector.h" |
-#include "base/sequenced_task_runner_helpers.h" |
-#include "webkit/browser/fileapi/file_system_url.h" |
-#include "webkit/browser/fileapi/open_file_system_mode.h" |
-#include "webkit/browser/fileapi/plugin_private_file_system_backend.h" |
-#include "webkit/browser/fileapi/sandbox_file_system_backend_delegate.h" |
-#include "webkit/browser/fileapi/task_runner_bound_observer_list.h" |
-#include "webkit/browser/storage_browser_export.h" |
-#include "webkit/common/fileapi/file_system_types.h" |
- |
-namespace base { |
-class FilePath; |
-class SequencedTaskRunner; |
-class SingleThreadTaskRunner; |
-} |
- |
-namespace chrome { |
-class NativeMediaFileUtilTest; |
-} |
- |
-namespace storage { |
-class QuotaManagerProxy; |
-class SpecialStoragePolicy; |
-} |
- |
-namespace net { |
-class URLRequest; |
-} |
- |
-namespace storage { |
-class BlobURLRequestJobTest; |
-class FileStreamReader; |
-} |
- |
-namespace storage { |
- |
-class AsyncFileUtil; |
-class CopyOrMoveFileValidatorFactory; |
-class ExternalFileSystemBackend; |
-class ExternalMountPoints; |
-class FileStreamWriter; |
-class FileSystemBackend; |
-class FileSystemFileUtil; |
-class FileSystemOperation; |
-class FileSystemOperationRunner; |
-class FileSystemOptions; |
-class FileSystemQuotaUtil; |
-class FileSystemURL; |
-class IsolatedFileSystemBackend; |
-class MountPoints; |
-class QuotaReservation; |
-class SandboxFileSystemBackend; |
-class WatchManager; |
- |
-struct DefaultContextDeleter; |
-struct FileSystemInfo; |
- |
-// An auto mount handler will attempt to mount the file system requested in |
-// |url_request|. If the URL is for this auto mount handler, it returns true |
-// and calls |callback| when the attempt is complete. If the auto mounter |
-// does not recognize the URL, it returns false and does not call |callback|. |
-// Called on the IO thread. |
-typedef base::Callback<bool( |
- const net::URLRequest* url_request, |
- const FileSystemURL& filesystem_url, |
- const std::string& storage_domain, |
- const base::Callback<void(base::File::Error result)>& callback)> |
- URLRequestAutoMountHandler; |
- |
-// This class keeps and provides a file system context for FileSystem API. |
-// An instance of this class is created and owned by profile. |
-class STORAGE_EXPORT FileSystemContext |
- : public base::RefCountedThreadSafe<FileSystemContext, |
- DefaultContextDeleter> { |
- public: |
- // Returns file permission policy we should apply for the given |type|. |
- // The return value must be bitwise-or'd of FilePermissionPolicy. |
- // |
- // Note: if a part of a filesystem is returned via 'Isolated' mount point, |
- // its per-filesystem permission overrides the underlying filesystem's |
- // permission policy. |
- static int GetPermissionPolicy(FileSystemType type); |
- |
- // file_task_runner is used as default TaskRunner. |
- // Unless a FileSystemBackend is overridden in CreateFileSystemOperation, |
- // it is used for all file operations and file related meta operations. |
- // The code assumes that file_task_runner->RunsTasksOnCurrentThread() |
- // returns false if the current task is not running on the thread that allows |
- // blocking file operations (like SequencedWorkerPool implementation does). |
- // |
- // |external_mount_points| contains non-system external mount points available |
- // in the context. If not NULL, it will be used during URL cracking. |
- // |external_mount_points| may be NULL only on platforms different from |
- // ChromeOS (i.e. platforms that don't use external_mount_point_provider). |
- // |
- // |additional_backends| are added to the internal backend map |
- // to serve filesystem requests for non-regular types. |
- // If none is given, this context only handles HTML5 Sandbox FileSystem |
- // and Drag-and-drop Isolated FileSystem requests. |
- // |
- // |auto_mount_handlers| are used to resolve calls to |
- // AttemptAutoMountForURLRequest. Only external filesystems are auto mounted |
- // when a filesystem: URL request is made. |
- FileSystemContext( |
- base::SingleThreadTaskRunner* io_task_runner, |
- base::SequencedTaskRunner* file_task_runner, |
- ExternalMountPoints* external_mount_points, |
- storage::SpecialStoragePolicy* special_storage_policy, |
- storage::QuotaManagerProxy* quota_manager_proxy, |
- ScopedVector<FileSystemBackend> additional_backends, |
- const std::vector<URLRequestAutoMountHandler>& auto_mount_handlers, |
- const base::FilePath& partition_path, |
- const FileSystemOptions& options); |
- |
- bool DeleteDataForOriginOnFileTaskRunner(const GURL& origin_url); |
- |
- // Creates a new QuotaReservation for the given |origin_url| and |type|. |
- // Returns NULL if |type| does not support quota or reservation fails. |
- // This should be run on |default_file_task_runner_| and the returned value |
- // should be destroyed on the runner. |
- scoped_refptr<QuotaReservation> CreateQuotaReservationOnFileTaskRunner( |
- const GURL& origin_url, |
- FileSystemType type); |
- |
- storage::QuotaManagerProxy* quota_manager_proxy() const { |
- return quota_manager_proxy_.get(); |
- } |
- |
- // Discards inflight operations in the operation runner. |
- void Shutdown(); |
- |
- // Returns a quota util for a given filesystem type. This may |
- // return NULL if the type does not support the usage tracking or |
- // it is not a quota-managed storage. |
- FileSystemQuotaUtil* GetQuotaUtil(FileSystemType type) const; |
- |
- // Returns the appropriate AsyncFileUtil instance for the given |type|. |
- AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) const; |
- |
- // Returns the appropriate CopyOrMoveFileValidatorFactory for the given |
- // |type|. If |error_code| is File::FILE_OK and the result is NULL, |
- // then no validator is required. |
- CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory( |
- FileSystemType type, base::File::Error* error_code) const; |
- |
- // Returns the file system backend instance for the given |type|. |
- // This may return NULL if it is given an invalid or unsupported filesystem |
- // type. |
- FileSystemBackend* GetFileSystemBackend( |
- FileSystemType type) const; |
- |
- // Returns the watcher manager for the given |type|. |
- // This may return NULL if the type does not support watching. |
- WatcherManager* GetWatcherManager(FileSystemType type) const; |
- |
- // Returns true for sandboxed filesystems. Currently this does |
- // the same as GetQuotaUtil(type) != NULL. (In an assumption that |
- // all sandboxed filesystems must cooperate with QuotaManager so that |
- // they can get deleted) |
- bool IsSandboxFileSystem(FileSystemType type) const; |
- |
- // Returns observers for the given filesystem type. |
- const UpdateObserverList* GetUpdateObservers(FileSystemType type) const; |
- const AccessObserverList* GetAccessObservers(FileSystemType type) const; |
- |
- // Returns all registered filesystem types. |
- void GetFileSystemTypes(std::vector<FileSystemType>* types) const; |
- |
- // Returns a FileSystemBackend instance for external filesystem |
- // type, which is used only by chromeos for now. This is equivalent to |
- // calling GetFileSystemBackend(kFileSystemTypeExternal). |
- ExternalFileSystemBackend* external_backend() const; |
- |
- // Used for OpenFileSystem. |
- typedef base::Callback<void(const GURL& root, |
- const std::string& name, |
- base::File::Error result)> |
- OpenFileSystemCallback; |
- |
- // Used for ResolveURL. |
- enum ResolvedEntryType { |
- RESOLVED_ENTRY_FILE, |
- RESOLVED_ENTRY_DIRECTORY, |
- RESOLVED_ENTRY_NOT_FOUND, |
- }; |
- typedef base::Callback<void(base::File::Error result, |
- const FileSystemInfo& info, |
- const base::FilePath& file_path, |
- ResolvedEntryType type)> ResolveURLCallback; |
- |
- // Used for DeleteFileSystem and OpenPluginPrivateFileSystem. |
- typedef base::Callback<void(base::File::Error result)> StatusCallback; |
- |
- // Opens the filesystem for the given |origin_url| and |type|, and dispatches |
- // |callback| on completion. |
- // If |create| is true this may actually set up a filesystem instance |
- // (e.g. by creating the root directory or initializing the database |
- // entry etc). |
- void OpenFileSystem( |
- const GURL& origin_url, |
- FileSystemType type, |
- OpenFileSystemMode mode, |
- const OpenFileSystemCallback& callback); |
- |
- // Opens the filesystem for the given |url| as read-only, if the filesystem |
- // backend referred by the URL allows opening by resolveURL. Otherwise it |
- // fails with FILE_ERROR_SECURITY. The entry pointed by the URL can be |
- // absent; in that case RESOLVED_ENTRY_NOT_FOUND type is returned to the |
- // callback for indicating the absence. Can be called from any thread with |
- // a message loop. |callback| is invoked on the caller thread. |
- void ResolveURL( |
- const FileSystemURL& url, |
- const ResolveURLCallback& callback); |
- |
- // Attempts to mount the filesystem needed to satisfy |url_request| made |
- // from |storage_domain|. If an appropriate file system is not found, |
- // callback will return an error. |
- void AttemptAutoMountForURLRequest(const net::URLRequest* url_request, |
- const std::string& storage_domain, |
- const StatusCallback& callback); |
- |
- // Deletes the filesystem for the given |origin_url| and |type|. This should |
- // be called on the IO thread. |
- void DeleteFileSystem( |
- const GURL& origin_url, |
- FileSystemType type, |
- const StatusCallback& callback); |
- |
- // Creates new FileStreamReader instance to read a file pointed by the given |
- // filesystem URL |url| starting from |offset|. |expected_modification_time| |
- // specifies the expected last modification if the value is non-null, the |
- // reader will check the underlying file's actual modification time to see if |
- // the file has been modified, and if it does any succeeding read operations |
- // should fail with ERR_UPLOAD_FILE_CHANGED error. |
- // This method internally cracks the |url|, get an appropriate |
- // FileSystemBackend for the URL and call the backend's CreateFileReader. |
- // The resolved FileSystemBackend could perform further specialization |
- // depending on the filesystem type pointed by the |url|. |
- scoped_ptr<storage::FileStreamReader> CreateFileStreamReader( |
- const FileSystemURL& url, |
- int64 offset, |
- const base::Time& expected_modification_time); |
- |
- // Creates new FileStreamWriter instance to write into a file pointed by |
- // |url| from |offset|. |
- scoped_ptr<FileStreamWriter> CreateFileStreamWriter( |
- const FileSystemURL& url, |
- int64 offset); |
- |
- // Creates a new FileSystemOperationRunner. |
- scoped_ptr<FileSystemOperationRunner> CreateFileSystemOperationRunner(); |
- |
- base::SequencedTaskRunner* default_file_task_runner() { |
- return default_file_task_runner_.get(); |
- } |
- |
- FileSystemOperationRunner* operation_runner() { |
- return operation_runner_.get(); |
- } |
- |
- const base::FilePath& partition_path() const { return partition_path_; } |
- |
- // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from |url|. |
- FileSystemURL CrackURL(const GURL& url) const; |
- // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from method |
- // arguments. |
- FileSystemURL CreateCrackedFileSystemURL(const GURL& origin, |
- FileSystemType type, |
- const base::FilePath& path) const; |
- |
-#if defined(OS_CHROMEOS) |
- // Used only on ChromeOS for now. |
- void EnableTemporaryFileSystemInIncognito(); |
-#endif |
- |
- SandboxFileSystemBackendDelegate* sandbox_delegate() { |
- return sandbox_delegate_.get(); |
- } |
- |
- // Returns true if the requested url is ok to be served. |
- // (E.g. this returns false if the context is created for incognito mode) |
- bool CanServeURLRequest(const FileSystemURL& url) const; |
- |
- // Returns true if a file in the file system should be flushed for each write |
- // completion. |
- bool ShouldFlushOnWriteCompletion(FileSystemType type) const; |
- |
- // This must be used to open 'plugin private' filesystem. |
- // See "plugin_private_file_system_backend.h" for more details. |
- void OpenPluginPrivateFileSystem( |
- const GURL& origin_url, |
- FileSystemType type, |
- const std::string& filesystem_id, |
- const std::string& plugin_id, |
- OpenFileSystemMode mode, |
- const StatusCallback& callback); |
- |
- private: |
- typedef std::map<FileSystemType, FileSystemBackend*> |
- FileSystemBackendMap; |
- |
- // For CreateFileSystemOperation. |
- friend class FileSystemOperationRunner; |
- |
- // For sandbox_backend(). |
- friend class content::SandboxFileSystemTestHelper; |
- |
- // For plugin_private_backend(). |
- friend class content::PluginPrivateFileSystemBackendTest; |
- |
- // Deleters. |
- friend struct DefaultContextDeleter; |
- friend class base::DeleteHelper<FileSystemContext>; |
- friend class base::RefCountedThreadSafe<FileSystemContext, |
- DefaultContextDeleter>; |
- ~FileSystemContext(); |
- |
- void DeleteOnCorrectThread() const; |
- |
- // Creates a new FileSystemOperation instance by getting an appropriate |
- // FileSystemBackend for |url| and calling the backend's corresponding |
- // CreateFileSystemOperation method. |
- // The resolved FileSystemBackend could perform further specialization |
- // depending on the filesystem type pointed by the |url|. |
- // |
- // Called by FileSystemOperationRunner. |
- FileSystemOperation* CreateFileSystemOperation( |
- const FileSystemURL& url, |
- base::File::Error* error_code); |
- |
- // For non-cracked isolated and external mount points, returns a FileSystemURL |
- // created by cracking |url|. The url is cracked using MountPoints registered |
- // as |url_crackers_|. If the url cannot be cracked, returns invalid |
- // FileSystemURL. |
- // |
- // If the original url does not point to an isolated or external filesystem, |
- // returns the original url, without attempting to crack it. |
- FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const; |
- |
- // For initial backend_map construction. This must be called only from |
- // the constructor. |
- void RegisterBackend(FileSystemBackend* backend); |
- |
- void DidOpenFileSystemForResolveURL( |
- const FileSystemURL& url, |
- const ResolveURLCallback& callback, |
- const GURL& filesystem_root, |
- const std::string& filesystem_name, |
- base::File::Error error); |
- |
- // Returns a FileSystemBackend, used only by test code. |
- SandboxFileSystemBackend* sandbox_backend() const { |
- return sandbox_backend_.get(); |
- } |
- |
- // Used only by test code. |
- PluginPrivateFileSystemBackend* plugin_private_backend() const { |
- return plugin_private_backend_.get(); |
- } |
- |
- scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
- scoped_refptr<base::SequencedTaskRunner> default_file_task_runner_; |
- |
- scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_; |
- |
- scoped_ptr<SandboxFileSystemBackendDelegate> sandbox_delegate_; |
- |
- // Regular file system backends. |
- scoped_ptr<SandboxFileSystemBackend> sandbox_backend_; |
- scoped_ptr<IsolatedFileSystemBackend> isolated_backend_; |
- |
- // Additional file system backends. |
- scoped_ptr<PluginPrivateFileSystemBackend> plugin_private_backend_; |
- ScopedVector<FileSystemBackend> additional_backends_; |
- |
- std::vector<URLRequestAutoMountHandler> auto_mount_handlers_; |
- |
- // Registered file system backends. |
- // The map must be constructed in the constructor since it can be accessed |
- // on multiple threads. |
- // This map itself doesn't retain each backend's ownership; ownerships |
- // of the backends are held by additional_backends_ or other scoped_ptr |
- // backend fields. |
- FileSystemBackendMap backend_map_; |
- |
- // External mount points visible in the file system context (excluding system |
- // external mount points). |
- scoped_refptr<ExternalMountPoints> external_mount_points_; |
- |
- // MountPoints used to crack FileSystemURLs. The MountPoints are ordered |
- // in order they should try to crack a FileSystemURL. |
- std::vector<MountPoints*> url_crackers_; |
- |
- // The base path of the storage partition for this context. |
- const base::FilePath partition_path_; |
- |
- bool is_incognito_; |
- |
- scoped_ptr<FileSystemOperationRunner> operation_runner_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); |
-}; |
- |
-struct DefaultContextDeleter { |
- static void Destruct(const FileSystemContext* context) { |
- context->DeleteOnCorrectThread(); |
- } |
-}; |
- |
-} // namespace storage |
- |
-#endif // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
+#include "storage/browser/fileapi/file_system_context.h" |