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

Unified Diff: webkit/fileapi/file_system_context.cc

Issue 15859007: Move browser-specific FileAPI code from webkit/fileapi to webkit/browser/fileapi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: dump_file_system build fix Created 7 years, 7 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
« no previous file with comments | « webkit/fileapi/file_system_context.h ('k') | webkit/fileapi/file_system_context_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/fileapi/file_system_context.cc
diff --git a/webkit/fileapi/file_system_context.cc b/webkit/fileapi/file_system_context.cc
deleted file mode 100644
index f9505374046c93b5ecabb86a901f754e8bd5215d..0000000000000000000000000000000000000000
--- a/webkit/fileapi/file_system_context.cc
+++ /dev/null
@@ -1,421 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "webkit/fileapi/file_system_context.h"
-
-#include "base/bind.h"
-#include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
-#include "googleurl/src/gurl.h"
-#include "webkit/blob/file_stream_reader.h"
-#include "webkit/browser/fileapi/copy_or_move_file_validator.h"
-#include "webkit/browser/fileapi/external_mount_points.h"
-#include "webkit/browser/fileapi/file_system_file_util.h"
-#include "webkit/browser/fileapi/file_system_quota_client.h"
-#include "webkit/browser/fileapi/file_system_task_runners.h"
-#include "webkit/browser/fileapi/isolated_context.h"
-#include "webkit/browser/fileapi/isolated_mount_point_provider.h"
-#include "webkit/browser/fileapi/mount_points.h"
-#include "webkit/browser/fileapi/sandbox_mount_point_provider.h"
-#include "webkit/fileapi/file_stream_writer.h"
-#include "webkit/fileapi/file_system_operation.h"
-#include "webkit/fileapi/file_system_options.h"
-#include "webkit/fileapi/file_system_url.h"
-#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/syncable/local_file_change_tracker.h"
-#include "webkit/fileapi/syncable/local_file_sync_context.h"
-#include "webkit/fileapi/syncable/syncable_file_system_util.h"
-#include "webkit/fileapi/test_mount_point_provider.h"
-#include "webkit/quota/quota_manager.h"
-#include "webkit/quota/special_storage_policy.h"
-
-#if defined(OS_CHROMEOS)
-#include "webkit/chromeos/fileapi/cros_mount_point_provider.h"
-#endif
-
-using quota::QuotaClient;
-
-namespace fileapi {
-
-namespace {
-
-QuotaClient* CreateQuotaClient(
- FileSystemContext* context,
- bool is_incognito) {
- return new FileSystemQuotaClient(context, is_incognito);
-}
-
-void DidOpenFileSystem(
- const FileSystemContext::OpenFileSystemCallback& callback,
- const GURL& filesystem_root,
- const std::string& filesystem_name,
- base::PlatformFileError error) {
- callback.Run(error, filesystem_name, filesystem_root);
-}
-
-} // namespace
-
-FileSystemContext::FileSystemContext(
- scoped_ptr<FileSystemTaskRunners> task_runners,
- ExternalMountPoints* external_mount_points,
- quota::SpecialStoragePolicy* special_storage_policy,
- quota::QuotaManagerProxy* quota_manager_proxy,
- ScopedVector<FileSystemMountPointProvider> additional_providers,
- const base::FilePath& partition_path,
- const FileSystemOptions& options)
- : task_runners_(task_runners.Pass()),
- quota_manager_proxy_(quota_manager_proxy),
- sandbox_provider_(
- new SandboxMountPointProvider(
- quota_manager_proxy,
- task_runners_->file_task_runner(),
- partition_path,
- options,
- special_storage_policy)),
- isolated_provider_(new IsolatedMountPointProvider()),
- additional_providers_(additional_providers.Pass()),
- external_mount_points_(external_mount_points),
- partition_path_(partition_path) {
- DCHECK(task_runners_.get());
-
- if (quota_manager_proxy) {
- quota_manager_proxy->RegisterClient(CreateQuotaClient(
- this, options.is_incognito()));
- }
-
- RegisterMountPointProvider(sandbox_provider_.get());
- RegisterMountPointProvider(isolated_provider_.get());
-
-#if defined(OS_CHROMEOS)
- // TODO(kinuko): Move this out of webkit/fileapi layer.
- DCHECK(external_mount_points);
- external_provider_.reset(
- new chromeos::CrosMountPointProvider(
- special_storage_policy,
- external_mount_points,
- ExternalMountPoints::GetSystemInstance()));
- RegisterMountPointProvider(external_provider_.get());
-#endif
-
- for (ScopedVector<FileSystemMountPointProvider>::const_iterator iter =
- additional_providers_.begin();
- iter != additional_providers_.end(); ++iter) {
- RegisterMountPointProvider(*iter);
- }
-
- // Additional mount points must be added before regular system-wide
- // mount points.
- if (external_mount_points)
- url_crackers_.push_back(external_mount_points);
- url_crackers_.push_back(ExternalMountPoints::GetSystemInstance());
- url_crackers_.push_back(IsolatedContext::GetInstance());
-}
-
-bool FileSystemContext::DeleteDataForOriginOnFileThread(
- const GURL& origin_url) {
- DCHECK(task_runners_->file_task_runner()->RunsTasksOnCurrentThread());
- DCHECK(sandbox_provider());
- DCHECK(origin_url == origin_url.GetOrigin());
-
- // Delete temporary and persistent data.
- return
- (sandbox_provider()->DeleteOriginDataOnFileThread(
- this, quota_manager_proxy(), origin_url,
- kFileSystemTypeTemporary) ==
- base::PLATFORM_FILE_OK) &&
- (sandbox_provider()->DeleteOriginDataOnFileThread(
- this, quota_manager_proxy(), origin_url,
- kFileSystemTypePersistent) ==
- base::PLATFORM_FILE_OK) &&
- (sandbox_provider()->DeleteOriginDataOnFileThread(
- this, quota_manager_proxy(), origin_url,
- kFileSystemTypeSyncable) ==
- base::PLATFORM_FILE_OK);
-}
-
-FileSystemQuotaUtil*
-FileSystemContext::GetQuotaUtil(FileSystemType type) const {
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider)
- return NULL;
- return mount_point_provider->GetQuotaUtil();
-}
-
-AsyncFileUtil* FileSystemContext::GetAsyncFileUtil(
- FileSystemType type) const {
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider)
- return NULL;
- return mount_point_provider->GetAsyncFileUtil(type);
-}
-
-FileSystemFileUtil* FileSystemContext::GetFileUtil(
- FileSystemType type) const {
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider)
- return NULL;
- return mount_point_provider->GetFileUtil(type);
-}
-
-CopyOrMoveFileValidatorFactory*
-FileSystemContext::GetCopyOrMoveFileValidatorFactory(
- FileSystemType type, base::PlatformFileError* error_code) const {
- DCHECK(error_code);
- *error_code = base::PLATFORM_FILE_OK;
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider)
- return NULL;
- return mount_point_provider->GetCopyOrMoveFileValidatorFactory(
- type, error_code);
-}
-
-FileSystemMountPointProvider* FileSystemContext::GetMountPointProvider(
- FileSystemType type) const {
- MountPointProviderMap::const_iterator found = provider_map_.find(type);
- if (found != provider_map_.end())
- return found->second;
- NOTREACHED() << "Unknown filesystem type: " << type;
- return NULL;
-}
-
-const UpdateObserverList* FileSystemContext::GetUpdateObservers(
- FileSystemType type) const {
- // Currently update observer is only available in SandboxMountPointProvider
- // and TestMountPointProvider.
- // TODO(kinuko): Probably GetUpdateObservers() virtual method should be
- // added to FileSystemMountPointProvider interface and be called like
- // other GetFoo() methods do.
- if (SandboxMountPointProvider::IsSandboxType(type))
- return sandbox_provider()->GetUpdateObservers(type);
- if (type != kFileSystemTypeTest)
- return NULL;
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- return static_cast<TestMountPointProvider*>(
- mount_point_provider)->GetUpdateObservers(type);
-}
-
-SandboxMountPointProvider*
-FileSystemContext::sandbox_provider() const {
- return sandbox_provider_.get();
-}
-
-ExternalFileSystemMountPointProvider*
-FileSystemContext::external_provider() const {
- return external_provider_.get();
-}
-
-void FileSystemContext::OpenFileSystem(
- const GURL& origin_url,
- FileSystemType type,
- bool create,
- const OpenFileSystemCallback& callback) {
- DCHECK(!callback.is_null());
-
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider) {
- callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, std::string(), GURL());
- return;
- }
-
- GURL root_url = GetFileSystemRootURI(origin_url, type);
- std::string name = GetFileSystemName(origin_url, type);
-
- mount_point_provider->ValidateFileSystemRoot(
- origin_url, type, create,
- base::Bind(&DidOpenFileSystem, callback, root_url, name));
-}
-
-void FileSystemContext::OpenSyncableFileSystem(
- const std::string& mount_name,
- const GURL& origin_url,
- FileSystemType type,
- bool create,
- const OpenFileSystemCallback& callback) {
- DCHECK(!callback.is_null());
-
- DCHECK(type == kFileSystemTypeSyncable);
-
- GURL root_url = sync_file_system::GetSyncableFileSystemRootURI(
- origin_url, mount_name);
- std::string name = GetFileSystemName(origin_url, kFileSystemTypeSyncable);
-
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- DCHECK(mount_point_provider);
- mount_point_provider->ValidateFileSystemRoot(
- origin_url, type, create,
- base::Bind(&DidOpenFileSystem, callback, root_url, name));
-}
-
-void FileSystemContext::DeleteFileSystem(
- const GURL& origin_url,
- FileSystemType type,
- const DeleteFileSystemCallback& callback) {
- DCHECK(origin_url == origin_url.GetOrigin());
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(type);
- if (!mount_point_provider) {
- callback.Run(base::PLATFORM_FILE_ERROR_SECURITY);
- return;
- }
-
- mount_point_provider->DeleteFileSystem(origin_url, type, this, callback);
-}
-
-FileSystemOperation* FileSystemContext::CreateFileSystemOperation(
- const FileSystemURL& url, base::PlatformFileError* error_code) {
- if (!url.is_valid()) {
- if (error_code)
- *error_code = base::PLATFORM_FILE_ERROR_INVALID_URL;
- return NULL;
- }
-
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(url.type());
- if (!mount_point_provider) {
- if (error_code)
- *error_code = base::PLATFORM_FILE_ERROR_FAILED;
- return NULL;
- }
-
- base::PlatformFileError fs_error = base::PLATFORM_FILE_OK;
- FileSystemOperation* operation =
- mount_point_provider->CreateFileSystemOperation(url, this, &fs_error);
-
- if (error_code)
- *error_code = fs_error;
- return operation;
-}
-
-scoped_ptr<webkit_blob::FileStreamReader>
-FileSystemContext::CreateFileStreamReader(
- const FileSystemURL& url,
- int64 offset,
- const base::Time& expected_modification_time) {
- if (!url.is_valid())
- return scoped_ptr<webkit_blob::FileStreamReader>();
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(url.type());
- if (!mount_point_provider)
- return scoped_ptr<webkit_blob::FileStreamReader>();
- return mount_point_provider->CreateFileStreamReader(
- url, offset, expected_modification_time, this);
-}
-
-scoped_ptr<FileStreamWriter> FileSystemContext::CreateFileStreamWriter(
- const FileSystemURL& url,
- int64 offset) {
- if (!url.is_valid())
- return scoped_ptr<FileStreamWriter>();
- FileSystemMountPointProvider* mount_point_provider =
- GetMountPointProvider(url.type());
- if (!mount_point_provider)
- return scoped_ptr<FileStreamWriter>();
- return mount_point_provider->CreateFileStreamWriter(url, offset, this);
-}
-
-void FileSystemContext::SetLocalFileChangeTracker(
- scoped_ptr<sync_file_system::LocalFileChangeTracker> tracker) {
- DCHECK(!change_tracker_.get());
- DCHECK(tracker.get());
- change_tracker_ = tracker.Pass();
- sandbox_provider_->AddSyncableFileUpdateObserver(
- change_tracker_.get(),
- task_runners_->file_task_runner());
- sandbox_provider_->AddSyncableFileChangeObserver(
- change_tracker_.get(),
- task_runners_->file_task_runner());
-}
-
-void FileSystemContext::set_sync_context(
- sync_file_system::LocalFileSyncContext* sync_context) {
- sync_context_ = sync_context;
-}
-
-FileSystemURL FileSystemContext::CrackURL(const GURL& url) const {
- return CrackFileSystemURL(FileSystemURL(url));
-}
-
-FileSystemURL FileSystemContext::CreateCrackedFileSystemURL(
- const GURL& origin,
- FileSystemType type,
- const base::FilePath& path) const {
- return CrackFileSystemURL(FileSystemURL(origin, type, path));
-}
-
-FileSystemContext::~FileSystemContext() {
- task_runners_->file_task_runner()->DeleteSoon(
- FROM_HERE, change_tracker_.release());
-}
-
-void FileSystemContext::DeleteOnCorrectThread() const {
- if (!task_runners_->io_task_runner()->RunsTasksOnCurrentThread() &&
- task_runners_->io_task_runner()->DeleteSoon(FROM_HERE, this)) {
- return;
- }
- delete this;
-}
-
-FileSystemURL FileSystemContext::CrackFileSystemURL(
- const FileSystemURL& url) const {
- if (!url.is_valid())
- return FileSystemURL();
-
- // The returned value in case there is no crackers which can crack the url.
- // This is valid situation for non isolated/external file systems.
- FileSystemURL current = url;
-
- // File system may be mounted multiple times (e.g., an isolated filesystem on
- // top of an external filesystem). Hence cracking needs to be iterated.
- for (;;) {
- FileSystemURL cracked = current;
- for (size_t i = 0; i < url_crackers_.size(); ++i) {
- if (!url_crackers_[i]->HandlesFileSystemMountType(current.type()))
- continue;
- cracked = url_crackers_[i]->CrackFileSystemURL(current);
- if (cracked.is_valid())
- break;
- }
- if (cracked == current)
- break;
- current = cracked;
- }
- return current;
-}
-
-void FileSystemContext::RegisterMountPointProvider(
- FileSystemMountPointProvider* provider) {
- const FileSystemType mount_types[] = {
- kFileSystemTypeTemporary,
- kFileSystemTypePersistent,
- kFileSystemTypeIsolated,
- kFileSystemTypeExternal,
- };
- // Register mount point providers for public mount types.
- for (size_t j = 0; j < ARRAYSIZE_UNSAFE(mount_types); ++j) {
- if (provider->CanHandleType(mount_types[j])) {
- const bool inserted = provider_map_.insert(
- std::make_pair(mount_types[j], provider)).second;
- DCHECK(inserted);
- }
- }
- // Register mount point providers for internal types.
- for (int t = kFileSystemInternalTypeEnumStart + 1;
- t < kFileSystemInternalTypeEnumEnd; ++t) {
- FileSystemType type = static_cast<FileSystemType>(t);
- if (provider->CanHandleType(type)) {
- const bool inserted = provider_map_.insert(
- std::make_pair(type, provider)).second;
- DCHECK(inserted);
- }
- }
-}
-
-} // namespace fileapi
« no previous file with comments | « webkit/fileapi/file_system_context.h ('k') | webkit/fileapi/file_system_context_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698