blob: 25b1630f4464fbb4b461af7ee3edeffea755cd5b [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
5#include "webkit/fileapi/test_mount_point_provider.h"
6
7#include <set>
8#include <string>
9#include <vector>
10
11#include "base/file_util.h"
12#include "base/sequenced_task_runner.h"
[email protected]caf66702012-09-07 07:02:2013#include "webkit/fileapi/file_observers.h"
[email protected]c4ca3b452012-05-31 03:15:4614#include "webkit/fileapi/file_system_file_stream_reader.h"
[email protected]6faad822012-05-11 12:58:2915#include "webkit/fileapi/file_system_quota_util.h"
[email protected]7e836a3d2012-05-31 05:14:5916#include "webkit/fileapi/file_system_util.h"
[email protected]02a60542012-07-24 20:05:3317#include "webkit/fileapi/local_file_system_operation.h"
[email protected]6faad822012-05-11 12:58:2918#include "webkit/fileapi/local_file_util.h"
19#include "webkit/fileapi/native_file_util.h"
[email protected]74698902012-06-12 12:16:3820#include "webkit/fileapi/sandbox_file_stream_writer.h"
[email protected]6faad822012-05-11 12:58:2921#include "webkit/quota/quota_manager.h"
22
23namespace fileapi {
24
[email protected]6faad822012-05-11 12:58:2925// This only supports single origin.
[email protected]caf66702012-09-07 07:02:2026class TestMountPointProvider::QuotaUtil
27 : public FileSystemQuotaUtil,
28 public FileUpdateObserver {
[email protected]6faad822012-05-11 12:58:2929 public:
[email protected]caf66702012-09-07 07:02:2030 QuotaUtil() : usage_(0) {}
31 virtual ~QuotaUtil() {}
[email protected]6faad822012-05-11 12:58:2932
[email protected]caf66702012-09-07 07:02:2033 // FileSystemQuotaUtil overrides.
[email protected]6faad822012-05-11 12:58:2934 virtual void GetOriginsForTypeOnFileThread(
35 FileSystemType type,
36 std::set<GURL>* origins) OVERRIDE {
37 NOTREACHED();
38 }
39 virtual void GetOriginsForHostOnFileThread(
40 FileSystemType type,
41 const std::string& host,
42 std::set<GURL>* origins) OVERRIDE {
43 NOTREACHED();
44 }
45 virtual int64 GetOriginUsageOnFileThread(
[email protected]22894522012-05-23 07:14:5846 FileSystemContext* context,
[email protected]6faad822012-05-11 12:58:2947 const GURL& origin_url,
48 FileSystemType type) OVERRIDE {
49 return usage_;
50 }
[email protected]6faad822012-05-11 12:58:2951 virtual void InvalidateUsageCache(const GURL& origin_url,
52 FileSystemType type) OVERRIDE {
53 // Do nothing.
54 }
55
[email protected]caf66702012-09-07 07:02:2056 // FileUpdateObserver overrides.
57 virtual void OnStartUpdate(const FileSystemURL& url) OVERRIDE {}
58 virtual void OnUpdate(const FileSystemURL& url, int64 delta) OVERRIDE {
59 usage_ += delta;
60 }
61 virtual void OnEndUpdate(const FileSystemURL& url) OVERRIDE {}
62
[email protected]6faad822012-05-11 12:58:2963 private:
64 int64 usage_;
65};
66
[email protected]6faad822012-05-11 12:58:2967TestMountPointProvider::TestMountPointProvider(
68 base::SequencedTaskRunner* task_runner,
[email protected]a3ef4832013-02-02 05:12:3369 const base::FilePath& base_path)
[email protected]6faad822012-05-11 12:58:2970 : base_path_(base_path),
[email protected]caf66702012-09-07 07:02:2071 task_runner_(task_runner),
[email protected]25b697992013-01-29 07:10:0572 local_file_util_(new AsyncFileUtilAdapter(new LocalFileUtil())),
[email protected]caf66702012-09-07 07:02:2073 quota_util_(new QuotaUtil) {
74 UpdateObserverList::Source source;
75 source.AddObserver(quota_util_.get(), task_runner_);
76 observers_ = UpdateObserverList(source);
[email protected]6faad822012-05-11 12:58:2977}
78
79TestMountPointProvider::~TestMountPointProvider() {
80}
81
82void TestMountPointProvider::ValidateFileSystemRoot(
83 const GURL& origin_url,
84 FileSystemType type,
85 bool create,
86 const ValidateFileSystemCallback& callback) {
87 // This won't be called unless we add test code that opens a test
88 // filesystem by OpenFileSystem.
89 NOTREACHED();
90}
91
[email protected]a3ef4832013-02-02 05:12:3392base::FilePath TestMountPointProvider::GetFileSystemRootPathOnFileThread(
[email protected]199263e2012-12-14 07:14:2093 const FileSystemURL& url,
[email protected]6faad822012-05-11 12:58:2994 bool create) {
[email protected]199263e2012-12-14 07:14:2095 DCHECK_EQ(kFileSystemTypeTest, url.type());
[email protected]6faad822012-05-11 12:58:2996 bool success = true;
97 if (create)
98 success = file_util::CreateDirectory(base_path_);
99 else
100 success = file_util::DirectoryExists(base_path_);
[email protected]a3ef4832013-02-02 05:12:33101 return success ? base_path_ : base::FilePath();
[email protected]6faad822012-05-11 12:58:29102}
103
[email protected]5aeeb7c62012-08-27 11:34:13104bool TestMountPointProvider::IsAccessAllowed(const FileSystemURL& url) {
105 return url.type() == fileapi::kFileSystemTypeTest;
[email protected]6faad822012-05-11 12:58:29106}
107
108bool TestMountPointProvider::IsRestrictedFileName(
[email protected]a3ef4832013-02-02 05:12:33109 const base::FilePath& filename) const {
[email protected]6faad822012-05-11 12:58:29110 return false;
111}
112
[email protected]d6afd112012-07-25 22:55:04113FileSystemFileUtil* TestMountPointProvider::GetFileUtil(FileSystemType type) {
[email protected]25b697992013-01-29 07:10:05114 DCHECK(local_file_util_.get());
115 return local_file_util_->sync_file_util();
116}
117
118AsyncFileUtil* TestMountPointProvider::GetAsyncFileUtil(FileSystemType type) {
[email protected]6faad822012-05-11 12:58:29119 return local_file_util_.get();
120}
121
[email protected]b40ffe72013-01-10 04:05:31122FilePermissionPolicy TestMountPointProvider::GetPermissionPolicy(
123 const FileSystemURL& url, int permissions) const {
124 return FILE_PERMISSION_ALWAYS_DENY;
[email protected]6faad822012-05-11 12:58:29125}
126
[email protected]8e3bc3e2012-08-24 13:12:53127FileSystemOperation* TestMountPointProvider::CreateFileSystemOperation(
[email protected]949f25a2012-06-27 01:53:09128 const FileSystemURL& url,
[email protected]d23a00cc2012-09-11 17:38:13129 FileSystemContext* context,
130 base::PlatformFileError* error_code) const {
[email protected]75af1a42012-07-26 04:06:20131 scoped_ptr<FileSystemOperationContext> operation_context(
132 new FileSystemOperationContext(context));
[email protected]caf66702012-09-07 07:02:20133 operation_context->set_update_observers(observers_);
[email protected]75af1a42012-07-26 04:06:20134 return new LocalFileSystemOperation(context, operation_context.Pass());
[email protected]6faad822012-05-11 12:58:29135}
136
[email protected]c4ca3b452012-05-31 03:15:46137webkit_blob::FileStreamReader* TestMountPointProvider::CreateFileStreamReader(
[email protected]949f25a2012-06-27 01:53:09138 const FileSystemURL& url,
[email protected]6faad822012-05-11 12:58:29139 int64 offset,
[email protected]a1057832012-10-15 13:28:06140 const base::Time& expected_modification_time,
[email protected]6faad822012-05-11 12:58:29141 FileSystemContext* context) const {
[email protected]a1057832012-10-15 13:28:06142 return new FileSystemFileStreamReader(
143 context, url, offset, expected_modification_time);
[email protected]6faad822012-05-11 12:58:29144}
145
[email protected]7e836a3d2012-05-31 05:14:59146fileapi::FileStreamWriter* TestMountPointProvider::CreateFileStreamWriter(
[email protected]949f25a2012-06-27 01:53:09147 const FileSystemURL& url,
[email protected]7e84b912012-05-16 04:42:01148 int64 offset,
149 FileSystemContext* context) const {
[email protected]caf66702012-09-07 07:02:20150 return new SandboxFileStreamWriter(context, url, offset, observers_);
[email protected]7e84b912012-05-16 04:42:01151}
152
[email protected]6faad822012-05-11 12:58:29153FileSystemQuotaUtil* TestMountPointProvider::GetQuotaUtil() {
154 return quota_util_.get();
155}
156
[email protected]d5e08552012-08-02 21:43:40157void TestMountPointProvider::DeleteFileSystem(
158 const GURL& origin_url,
159 FileSystemType type,
160 FileSystemContext* context,
161 const DeleteFileSystemCallback& callback) {
162 // This won't be called unless we add test code that opens a test
163 // filesystem by OpenFileSystem.
164 NOTREACHED();
165 callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
166}
167
[email protected]caf66702012-09-07 07:02:20168const UpdateObserverList* TestMountPointProvider::GetUpdateObservers(
169 FileSystemType type) const {
170 return &observers_;
171}
172
[email protected]6faad822012-05-11 12:58:29173} // namespace fileapi