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

Side by Side Diff: webkit/browser/fileapi/syncable/sync_file_system_backend.cc

Issue 18668003: SyncFS: Introduce SyncFileSystemBackend (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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/browser/fileapi/syncable/sync_file_system_backend.h"
6
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "webkit/browser/fileapi/async_file_util_adapter.h"
10 #include "webkit/browser/fileapi/file_system_context.h"
11 #include "webkit/browser/fileapi/obfuscated_file_util.h"
12 #include "webkit/browser/fileapi/sandbox_quota_observer.h"
13 #include "webkit/browser/fileapi/syncable/syncable_file_system_operation.h"
14 #include "webkit/browser/fileapi/syncable/syncable_file_system_util.h"
15 #include "webkit/common/fileapi/file_system_util.h"
16
17 namespace sync_file_system {
18
19 SyncFileSystemBackend::SyncFileSystemBackend(
20 const fileapi::FileSystemOptions& file_system_options)
21 : SandboxFileSystemBackend(NULL, file_system_options) {
22 }
23
24 SyncFileSystemBackend::~SyncFileSystemBackend() {
25 }
26
27 bool SyncFileSystemBackend::CanHandleType(
28 fileapi::FileSystemType type) const {
29 return type == fileapi::kFileSystemTypeSyncable ||
30 type == fileapi::kFileSystemTypeSyncableForInternalSync;
31 }
32
33 void SyncFileSystemBackend::Initialize(
34 const fileapi::FileSystemContext* context) {
35 DCHECK(context);
36 DCHECK(!sandbox_context());
37 set_sandbox_context(context->sandbox_context());
38 // Set quota observers.
39 if (sandbox_context()->is_usage_tracking_enabled()) {
40 set_update_observers(update_observers()->AddObserver(
41 sandbox_context()->quota_observer(),
42 sandbox_context()->file_task_runner()));
43 set_access_observers(access_observers()->AddObserver(
44 sandbox_context()->quota_observer(), NULL));
kinuko 2013/07/24 06:18:30 When do we use the parent class's update_observers
nhiroki 2013/07/24 10:22:58 Right, I realized we don't need to treat the those
45 syncable_update_observers_ = syncable_update_observers_.AddObserver(
46 sandbox_context()->quota_observer(),
47 sandbox_context()->file_task_runner());
48 }
49 }
50
51 void SyncFileSystemBackend::OpenFileSystem(
52 const GURL& origin_url,
53 fileapi::FileSystemType type,
54 fileapi::OpenFileSystemMode mode,
55 const OpenFileSystemCallback& callback) {
56 // TODO(nhiroki): Implement SyncFileSystem's own OpenFileSystem.
57 SandboxFileSystemBackend::OpenFileSystem(origin_url, type, mode, callback);
kinuko 2013/07/24 06:18:30 What's your plan to proceed? I'm slightly not sure
nhiroki 2013/07/24 10:22:58 Let me explain... it was my plan that the followin
58 }
59
60 fileapi::FileSystemFileUtil* SyncFileSystemBackend::GetFileUtil(
61 fileapi::FileSystemType type) {
62 DCHECK(sandbox_context());
63 return sandbox_context()->sync_file_util();
64 }
65
66 fileapi::AsyncFileUtil* SyncFileSystemBackend::GetAsyncFileUtil(
67 fileapi::FileSystemType type) {
68 DCHECK(sandbox_context());
69 return sandbox_context()->file_util();
70 }
71
72 fileapi::FileSystemOperation*
73 SyncFileSystemBackend::CreateFileSystemOperation(
74 const fileapi::FileSystemURL& url,
75 fileapi::FileSystemContext* context,
76 base::PlatformFileError* error_code) const {
77 if (!IsAccessValid(url)) {
78 *error_code = base::PLATFORM_FILE_ERROR_SECURITY;
79 return NULL;
80 }
81
82 if (url.type() == fileapi::kFileSystemTypeSyncableForInternalSync) {
83 return SandboxFileSystemBackend::CreateFileSystemOperation(
84 url, context, error_code);
85 }
86
87 scoped_ptr<fileapi::FileSystemOperationContext> operation_context(
88 new fileapi::FileSystemOperationContext(context));
89 operation_context->set_update_observers(syncable_update_observers_);
90 operation_context->set_change_observers(syncable_change_observers_);
91
92 return new SyncableFileSystemOperation(
93 url, context, operation_context.Pass());
94 }
95
96 void SyncFileSystemBackend::AddFileUpdateObserver(
97 fileapi::FileSystemType type,
98 fileapi::FileUpdateObserver* observer,
99 base::SequencedTaskRunner* task_runner) {
100 DCHECK(CanHandleType(type));
101 if (type == fileapi::kFileSystemTypeSyncableForInternalSync) {
102 SandboxFileSystemBackend::AddFileUpdateObserver(
103 type, observer, task_runner);
104 return;
105 }
106 fileapi::UpdateObserverList* list = &syncable_update_observers_;
107 *list = list->AddObserver(observer, task_runner);
108 }
109
110 void SyncFileSystemBackend::AddFileChangeObserver(
111 fileapi::FileSystemType type,
112 fileapi::FileChangeObserver* observer,
113 base::SequencedTaskRunner* task_runner) {
114 DCHECK(CanHandleType(type));
115 if (type == fileapi::kFileSystemTypeSyncableForInternalSync) {
116 SandboxFileSystemBackend::AddFileChangeObserver(
117 type, observer, task_runner);
118 return;
119 }
120 fileapi::ChangeObserverList* list = &syncable_change_observers_;
121 *list = list->AddObserver(observer, task_runner);
122 }
123
124 const fileapi::UpdateObserverList* SyncFileSystemBackend::GetUpdateObservers(
125 fileapi::FileSystemType type) const {
126 DCHECK(CanHandleType(type));
127 if (type == fileapi::kFileSystemTypeSyncableForInternalSync)
128 return update_observers();
129 return &syncable_update_observers_;
130 }
131
132 const fileapi::ChangeObserverList* SyncFileSystemBackend::GetChangeObservers(
133 fileapi::FileSystemType type) const {
134 DCHECK(CanHandleType(type));
135 if (type == fileapi::kFileSystemTypeSyncableForInternalSync)
136 return change_observers();
137 return &syncable_change_observers_;
138 }
139
140 // static
141 SyncFileSystemBackend* SyncFileSystemBackend::GetBackend(
142 const fileapi::FileSystemContext* file_system_context) {
143 return static_cast<SyncFileSystemBackend*>(
144 file_system_context->GetFileSystemBackend(
145 fileapi::kFileSystemTypeSyncable));
146 }
147
148 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698