Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2040)

Unified Diff: webkit/browser/fileapi/file_system_context.h

Issue 539143002: Migrate webkit/browser/ to storage/browser/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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"

Powered by Google App Engine
This is Rietveld 408576698