| Index: webkit/browser/fileapi/syncable/sync_file_system_backend.cc
|
| diff --git a/webkit/browser/fileapi/syncable/sync_file_system_backend.cc b/webkit/browser/fileapi/syncable/sync_file_system_backend.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4b2dcbb6a157b7c818310b1fd337cb77ac6346d7
|
| --- /dev/null
|
| +++ b/webkit/browser/fileapi/syncable/sync_file_system_backend.cc
|
| @@ -0,0 +1,240 @@
|
| +// Copyright 2013 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/browser/fileapi/syncable/sync_file_system_backend.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "webkit/browser/fileapi/async_file_util_adapter.h"
|
| +#include "webkit/browser/fileapi/file_system_context.h"
|
| +#include "webkit/browser/fileapi/file_system_file_stream_reader.h"
|
| +#include "webkit/browser/fileapi/file_system_operation_impl.h"
|
| +#include "webkit/browser/fileapi/obfuscated_file_util.h"
|
| +#include "webkit/browser/fileapi/sandbox_file_stream_writer.h"
|
| +#include "webkit/browser/fileapi/sandbox_quota_observer.h"
|
| +#include "webkit/browser/fileapi/syncable/syncable_file_system_operation.h"
|
| +#include "webkit/browser/fileapi/syncable/syncable_file_system_util.h"
|
| +#include "webkit/common/fileapi/file_system_util.h"
|
| +
|
| +namespace sync_file_system {
|
| +
|
| +SyncFileSystemBackend::SyncFileSystemBackend()
|
| + : sandbox_context_(NULL) {
|
| +}
|
| +
|
| +SyncFileSystemBackend::~SyncFileSystemBackend() {
|
| +}
|
| +
|
| +bool SyncFileSystemBackend::CanHandleType(
|
| + fileapi::FileSystemType type) const {
|
| + return type == fileapi::kFileSystemTypeSyncable ||
|
| + type == fileapi::kFileSystemTypeSyncableForInternalSync;
|
| +}
|
| +
|
| +void SyncFileSystemBackend::Initialize(fileapi::FileSystemContext* context) {
|
| + DCHECK(context);
|
| + DCHECK(!sandbox_context_);
|
| + sandbox_context_ = context->sandbox_context();
|
| + update_observers_ = update_observers_.AddObserver(
|
| + sandbox_context_->quota_observer(),
|
| + sandbox_context_->file_task_runner());
|
| + syncable_update_observers_ = syncable_update_observers_.AddObserver(
|
| + sandbox_context_->quota_observer(),
|
| + sandbox_context_->file_task_runner());
|
| +}
|
| +
|
| +void SyncFileSystemBackend::OpenFileSystem(
|
| + const GURL& origin_url,
|
| + fileapi::FileSystemType type,
|
| + fileapi::OpenFileSystemMode mode,
|
| + const OpenFileSystemCallback& callback) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + sandbox_context_->OpenFileSystem(
|
| + origin_url, type, mode, callback,
|
| + GetSyncableFileSystemRootURI(origin_url));
|
| +}
|
| +
|
| +fileapi::FileSystemFileUtil* SyncFileSystemBackend::GetFileUtil(
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(sandbox_context_);
|
| + return sandbox_context_->sync_file_util();
|
| +}
|
| +
|
| +fileapi::AsyncFileUtil* SyncFileSystemBackend::GetAsyncFileUtil(
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(sandbox_context_);
|
| + return sandbox_context_->file_util();
|
| +}
|
| +
|
| +fileapi::CopyOrMoveFileValidatorFactory*
|
| +SyncFileSystemBackend::GetCopyOrMoveFileValidatorFactory(
|
| + fileapi::FileSystemType type,
|
| + base::PlatformFileError* error_code) {
|
| + DCHECK(error_code);
|
| + *error_code = base::PLATFORM_FILE_OK;
|
| + return NULL;
|
| +}
|
| +
|
| +fileapi::FileSystemOperation*
|
| +SyncFileSystemBackend::CreateFileSystemOperation(
|
| + const fileapi::FileSystemURL& url,
|
| + fileapi::FileSystemContext* context,
|
| + base::PlatformFileError* error_code) const {
|
| + DCHECK(CanHandleType(url.type()));
|
| + DCHECK(context);
|
| + DCHECK(error_code);
|
| + if (!sandbox_context_->IsAccessValid(url)) {
|
| + *error_code = base::PLATFORM_FILE_ERROR_SECURITY;
|
| + return NULL;
|
| + }
|
| +
|
| + scoped_ptr<fileapi::FileSystemOperationContext> operation_context(
|
| + new fileapi::FileSystemOperationContext(context));
|
| +
|
| + if (url.type() == fileapi::kFileSystemTypeSyncableForInternalSync) {
|
| + operation_context->set_update_observers(update_observers_);
|
| + operation_context->set_change_observers(change_observers_);
|
| + return new fileapi::FileSystemOperationImpl(
|
| + url, context, operation_context.Pass());
|
| + }
|
| +
|
| + operation_context->set_update_observers(syncable_update_observers_);
|
| + operation_context->set_change_observers(syncable_change_observers_);
|
| + return new SyncableFileSystemOperation(
|
| + url, context, operation_context.Pass());
|
| +}
|
| +
|
| +scoped_ptr<webkit_blob::FileStreamReader>
|
| +SyncFileSystemBackend::CreateFileStreamReader(
|
| + const fileapi::FileSystemURL& url,
|
| + int64 offset,
|
| + const base::Time& expected_modification_time,
|
| + fileapi::FileSystemContext* context) const {
|
| + DCHECK(CanHandleType(url.type()));
|
| + if (!sandbox_context_->IsAccessValid(url))
|
| + return scoped_ptr<webkit_blob::FileStreamReader>();
|
| + return scoped_ptr<webkit_blob::FileStreamReader>(
|
| + new fileapi::FileSystemFileStreamReader(
|
| + context, url, offset, expected_modification_time));
|
| +}
|
| +
|
| +scoped_ptr<fileapi::FileStreamWriter>
|
| +SyncFileSystemBackend::CreateFileStreamWriter(
|
| + const fileapi::FileSystemURL& url,
|
| + int64 offset,
|
| + fileapi::FileSystemContext* context) const {
|
| + DCHECK(CanHandleType(url.type()));
|
| + if (!sandbox_context_->IsAccessValid(url))
|
| + return scoped_ptr<fileapi::FileStreamWriter>();
|
| + return scoped_ptr<fileapi::FileStreamWriter>(
|
| + new fileapi::SandboxFileStreamWriter(
|
| + context, url, offset, update_observers_));
|
| +}
|
| +
|
| +fileapi::FileSystemQuotaUtil* SyncFileSystemBackend::GetQuotaUtil() {
|
| + return this;
|
| +}
|
| +
|
| +base::PlatformFileError SyncFileSystemBackend::DeleteOriginDataOnFileThread(
|
| + fileapi::FileSystemContext* context,
|
| + quota::QuotaManagerProxy* proxy,
|
| + const GURL& origin_url,
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + return sandbox_context_->DeleteOriginDataOnFileThread(
|
| + context, proxy, origin_url, type);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::GetOriginsForTypeOnFileThread(
|
| + fileapi::FileSystemType type,
|
| + std::set<GURL>* origins) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + sandbox_context_->GetOriginsForTypeOnFileThread(type, origins);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::GetOriginsForHostOnFileThread(
|
| + fileapi::FileSystemType type,
|
| + const std::string& host,
|
| + std::set<GURL>* origins) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + sandbox_context_->GetOriginsForHostOnFileThread(type, host, origins);
|
| +}
|
| +
|
| +int64 SyncFileSystemBackend::GetOriginUsageOnFileThread(
|
| + fileapi::FileSystemContext* context,
|
| + const GURL& origin_url,
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + return sandbox_context_->GetOriginUsageOnFileThread(
|
| + context, origin_url, type);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::InvalidateUsageCache(
|
| + const GURL& origin_url,
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + sandbox_context_->InvalidateUsageCache(origin_url, type);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::StickyInvalidateUsageCache(
|
| + const GURL& origin_url,
|
| + fileapi::FileSystemType type) {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK(sandbox_context_);
|
| + sandbox_context_->StickyInvalidateUsageCache(origin_url, type);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::AddFileUpdateObserver(
|
| + fileapi::FileSystemType type,
|
| + fileapi::FileUpdateObserver* observer,
|
| + base::SequencedTaskRunner* task_runner) {
|
| + DCHECK_EQ(fileapi::kFileSystemTypeSyncable, type);
|
| + fileapi::UpdateObserverList* list = &syncable_update_observers_;
|
| + *list = list->AddObserver(observer, task_runner);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::AddFileChangeObserver(
|
| + fileapi::FileSystemType type,
|
| + fileapi::FileChangeObserver* observer,
|
| + base::SequencedTaskRunner* task_runner) {
|
| + DCHECK_EQ(fileapi::kFileSystemTypeSyncable, type);
|
| + fileapi::ChangeObserverList* list = &syncable_change_observers_;
|
| + *list = list->AddObserver(observer, task_runner);
|
| +}
|
| +
|
| +void SyncFileSystemBackend::AddFileAccessObserver(
|
| + fileapi::FileSystemType type,
|
| + fileapi::FileAccessObserver* observer,
|
| + base::SequencedTaskRunner* task_runner) {
|
| + NOTREACHED() << "SyncFileSystemBackend does not support access observers.";
|
| +}
|
| +
|
| +const fileapi::UpdateObserverList* SyncFileSystemBackend::GetUpdateObservers(
|
| + fileapi::FileSystemType type) const {
|
| + DCHECK(CanHandleType(type));
|
| + if (type != fileapi::kFileSystemTypeSyncable)
|
| + return NULL;
|
| + return &syncable_update_observers_;
|
| +}
|
| +
|
| +const fileapi::ChangeObserverList* SyncFileSystemBackend::GetChangeObservers(
|
| + fileapi::FileSystemType type) const {
|
| + DCHECK(CanHandleType(type));
|
| + DCHECK_EQ(fileapi::kFileSystemTypeSyncable, type);
|
| + if (type != fileapi::kFileSystemTypeSyncable)
|
| + return NULL;
|
| + return &syncable_change_observers_;
|
| +}
|
| +
|
| +const fileapi::AccessObserverList* SyncFileSystemBackend::GetAccessObservers(
|
| + fileapi::FileSystemType type) const {
|
| + return NULL;
|
| +}
|
| +
|
| +} // namespace sync_file_system
|
|
|