blob: fe05ceb467b7a42dc1cf02a782c15a9da2629a64 [file] [log] [blame]
[email protected]6faad822012-05-11 12:58:291// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]c6f9203a2013-05-28 02:08:075#include "webkit/browser/fileapi/test_mount_point_provider.h"
[email protected]6faad822012-05-11 12:58:296
7#include <set>
8#include <string>
9#include <vector>
10
11#include "base/file_util.h"
[email protected]fb441962013-05-08 05:35:2412#include "base/sequenced_task_runner.h"
[email protected]20c2df62013-05-21 08:26:3613#include "webkit/browser/fileapi/copy_or_move_file_validator.h"
[email protected]f25e1132013-05-24 13:58:0414#include "webkit/browser/fileapi/file_observers.h"
[email protected]c6f9203a2013-05-28 02:08:0715#include "webkit/browser/fileapi/file_system_file_stream_reader.h"
16#include "webkit/browser/fileapi/file_system_operation_context.h"
[email protected]20c2df62013-05-21 08:26:3617#include "webkit/browser/fileapi/file_system_quota_util.h"
[email protected]f25e1132013-05-24 13:58:0418#include "webkit/browser/fileapi/local_file_system_operation.h"
[email protected]5a20d042013-05-22 12:54:1819#include "webkit/browser/fileapi/local_file_util.h"
20#include "webkit/browser/fileapi/native_file_util.h"
[email protected]28f051c32013-05-21 05:15:2621#include "webkit/browser/fileapi/sandbox_file_stream_writer.h"
[email protected]7660ec92013-05-30 05:12:3922#include "webkit/browser/quota/quota_manager.h"
[email protected]61d271f32013-05-28 04:59:2323#include "webkit/common/fileapi/file_system_util.h"
[email protected]6faad822012-05-11 12:58:2924
25namespace fileapi {
26
[email protected]6faad822012-05-11 12:58:2927// This only supports single origin.
[email protected]caf66702012-09-07 07:02:2028class TestMountPointProvider::QuotaUtil
29 : public FileSystemQuotaUtil,
30 public FileUpdateObserver {
[email protected]6faad822012-05-11 12:58:2931 public:
[email protected]caf66702012-09-07 07:02:2032 QuotaUtil() : usage_(0) {}
33 virtual ~QuotaUtil() {}
[email protected]6faad822012-05-11 12:58:2934
[email protected]caf66702012-09-07 07:02:2035 // FileSystemQuotaUtil overrides.
[email protected]2a030ee2013-06-18 15:16:4836 virtual base::PlatformFileError DeleteOriginDataOnFileThread(
37 FileSystemContext* context,
38 quota::QuotaManagerProxy* proxy,
39 const GURL& origin_url,
40 FileSystemType type) OVERRIDE {
41 NOTREACHED();
42 return base::PLATFORM_FILE_OK;
43 }
[email protected]6faad822012-05-11 12:58:2944 virtual void GetOriginsForTypeOnFileThread(
45 FileSystemType type,
46 std::set<GURL>* origins) OVERRIDE {
47 NOTREACHED();
48 }
49 virtual void GetOriginsForHostOnFileThread(
50 FileSystemType type,
51 const std::string& host,
52 std::set<GURL>* origins) OVERRIDE {
53 NOTREACHED();
54 }
55 virtual int64 GetOriginUsageOnFileThread(
[email protected]22894522012-05-23 07:14:5856 FileSystemContext* context,
[email protected]6faad822012-05-11 12:58:2957 const GURL& origin_url,
58 FileSystemType type) OVERRIDE {
59 return usage_;
60 }
[email protected]6faad822012-05-11 12:58:2961 virtual void InvalidateUsageCache(const GURL& origin_url,
62 FileSystemType type) OVERRIDE {
63 // Do nothing.
64 }
[email protected]bd4219cf2013-04-26 14:33:4665 virtual void StickyInvalidateUsageCache(
66 const GURL& origin,
67 FileSystemType type) OVERRIDE {
68 // Do nothing.
69 }
[email protected]6faad822012-05-11 12:58:2970
[email protected]caf66702012-09-07 07:02:2071 // FileUpdateObserver overrides.
72 virtual void OnStartUpdate(const FileSystemURL& url) OVERRIDE {}
73 virtual void OnUpdate(const FileSystemURL& url, int64 delta) OVERRIDE {
74 usage_ += delta;
75 }
76 virtual void OnEndUpdate(const FileSystemURL& url) OVERRIDE {}
77
[email protected]6faad822012-05-11 12:58:2978 private:
79 int64 usage_;
80};
81
[email protected]6faad822012-05-11 12:58:2982TestMountPointProvider::TestMountPointProvider(
83 base::SequencedTaskRunner* task_runner,
[email protected]a3ef4832013-02-02 05:12:3384 const base::FilePath& base_path)
[email protected]6faad822012-05-11 12:58:2985 : base_path_(base_path),
[email protected]caf66702012-09-07 07:02:2086 task_runner_(task_runner),
[email protected]25b697992013-01-29 07:10:0587 local_file_util_(new AsyncFileUtilAdapter(new LocalFileUtil())),
[email protected]c3d638b32013-04-22 02:18:4988 quota_util_(new QuotaUtil),
89 require_copy_or_move_validator_(false) {
[email protected]caf66702012-09-07 07:02:2090 UpdateObserverList::Source source;
[email protected]ff875be52013-06-02 23:47:3891 source.AddObserver(quota_util_.get(), task_runner_.get());
[email protected]3a7bf222013-06-09 14:14:1292 update_observers_ = UpdateObserverList(source);
[email protected]6faad822012-05-11 12:58:2993}
94
95TestMountPointProvider::~TestMountPointProvider() {
96}
97
[email protected]420fb562013-04-18 01:46:3498bool TestMountPointProvider::CanHandleType(FileSystemType type) const {
99 return (type == kFileSystemTypeTest);
100}
101
[email protected]22dea52c2013-05-29 07:44:40102void TestMountPointProvider::OpenFileSystem(
[email protected]6faad822012-05-11 12:58:29103 const GURL& origin_url,
104 FileSystemType type,
[email protected]22dea52c2013-05-29 07:44:40105 OpenFileSystemMode mode,
106 const OpenFileSystemCallback& callback) {
[email protected]e4d20b02013-05-29 04:24:56107 callback.Run(base::PLATFORM_FILE_OK);
[email protected]6faad822012-05-11 12:58:29108}
109
[email protected]d6afd112012-07-25 22:55:04110FileSystemFileUtil* TestMountPointProvider::GetFileUtil(FileSystemType type) {
[email protected]25b697992013-01-29 07:10:05111 DCHECK(local_file_util_.get());
112 return local_file_util_->sync_file_util();
113}
114
115AsyncFileUtil* TestMountPointProvider::GetAsyncFileUtil(FileSystemType type) {
[email protected]6faad822012-05-11 12:58:29116 return local_file_util_.get();
117}
118
[email protected]98407ee2013-04-04 08:52:17119CopyOrMoveFileValidatorFactory*
120TestMountPointProvider::GetCopyOrMoveFileValidatorFactory(
121 FileSystemType type, base::PlatformFileError* error_code) {
122 DCHECK(error_code);
123 *error_code = base::PLATFORM_FILE_OK;
[email protected]c3d638b32013-04-22 02:18:49124 if (require_copy_or_move_validator_) {
125 if (!copy_or_move_file_validator_factory_)
126 *error_code = base::PLATFORM_FILE_ERROR_SECURITY;
127 return copy_or_move_file_validator_factory_.get();
128 }
[email protected]98407ee2013-04-04 08:52:17129 return NULL;
130}
131
132void TestMountPointProvider::InitializeCopyOrMoveFileValidatorFactory(
[email protected]96f03c42013-05-29 08:51:32133 scoped_ptr<CopyOrMoveFileValidatorFactory> factory) {
[email protected]c3d638b32013-04-22 02:18:49134 if (!require_copy_or_move_validator_) {
135 DCHECK(!factory);
136 return;
137 }
138 if (!copy_or_move_file_validator_factory_)
139 copy_or_move_file_validator_factory_ = factory.Pass();
[email protected]98407ee2013-04-04 08:52:17140}
141
[email protected]b40ffe72013-01-10 04:05:31142FilePermissionPolicy TestMountPointProvider::GetPermissionPolicy(
143 const FileSystemURL& url, int permissions) const {
144 return FILE_PERMISSION_ALWAYS_DENY;
[email protected]6faad822012-05-11 12:58:29145}
146
[email protected]8e3bc3e2012-08-24 13:12:53147FileSystemOperation* TestMountPointProvider::CreateFileSystemOperation(
[email protected]949f25a2012-06-27 01:53:09148 const FileSystemURL& url,
[email protected]d23a00cc2012-09-11 17:38:13149 FileSystemContext* context,
150 base::PlatformFileError* error_code) const {
[email protected]75af1a42012-07-26 04:06:20151 scoped_ptr<FileSystemOperationContext> operation_context(
152 new FileSystemOperationContext(context));
[email protected]3a7bf222013-06-09 14:14:12153 operation_context->set_update_observers(update_observers_);
154 operation_context->set_change_observers(change_observers_);
[email protected]e4d20b02013-05-29 04:24:56155 operation_context->set_root_path(base_path_);
[email protected]5dfa47c2013-06-10 04:57:15156 return new LocalFileSystemOperation(url, context, operation_context.Pass());
[email protected]6faad822012-05-11 12:58:29157}
158
[email protected]3ee9eb02013-04-10 09:17:05159scoped_ptr<webkit_blob::FileStreamReader>
160TestMountPointProvider::CreateFileStreamReader(
[email protected]949f25a2012-06-27 01:53:09161 const FileSystemURL& url,
[email protected]6faad822012-05-11 12:58:29162 int64 offset,
[email protected]a1057832012-10-15 13:28:06163 const base::Time& expected_modification_time,
[email protected]6faad822012-05-11 12:58:29164 FileSystemContext* context) const {
[email protected]3ee9eb02013-04-10 09:17:05165 return scoped_ptr<webkit_blob::FileStreamReader>(
166 new FileSystemFileStreamReader(
167 context, url, offset, expected_modification_time));
[email protected]6faad822012-05-11 12:58:29168}
169
[email protected]3ee9eb02013-04-10 09:17:05170scoped_ptr<fileapi::FileStreamWriter>
171TestMountPointProvider::CreateFileStreamWriter(
[email protected]949f25a2012-06-27 01:53:09172 const FileSystemURL& url,
[email protected]7e84b912012-05-16 04:42:01173 int64 offset,
174 FileSystemContext* context) const {
[email protected]3ee9eb02013-04-10 09:17:05175 return scoped_ptr<fileapi::FileStreamWriter>(
[email protected]3a7bf222013-06-09 14:14:12176 new SandboxFileStreamWriter(context, url, offset, update_observers_));
[email protected]7e84b912012-05-16 04:42:01177}
178
[email protected]6faad822012-05-11 12:58:29179FileSystemQuotaUtil* TestMountPointProvider::GetQuotaUtil() {
180 return quota_util_.get();
181}
182
[email protected]d5e08552012-08-02 21:43:40183void TestMountPointProvider::DeleteFileSystem(
184 const GURL& origin_url,
185 FileSystemType type,
186 FileSystemContext* context,
187 const DeleteFileSystemCallback& callback) {
188 // This won't be called unless we add test code that opens a test
189 // filesystem by OpenFileSystem.
190 NOTREACHED();
191 callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
192}
193
[email protected]caf66702012-09-07 07:02:20194const UpdateObserverList* TestMountPointProvider::GetUpdateObservers(
195 FileSystemType type) const {
[email protected]3a7bf222013-06-09 14:14:12196 return &update_observers_;
197}
198
199void TestMountPointProvider::AddFileChangeObserver(
200 FileChangeObserver* observer) {
201 ChangeObserverList::Source source = change_observers_.source();
202 source.AddObserver(observer, task_runner_.get());
203 change_observers_ = ChangeObserverList(source);
[email protected]caf66702012-09-07 07:02:20204}
205
[email protected]6faad822012-05-11 12:58:29206} // namespace fileapi