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

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

Issue 18668003: SyncFS: Introduce SyncFileSystemBackend (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/syncable_sandbox_mount_point_provider. h"
6
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "webkit/browser/fileapi/file_system_context.h"
10 #include "webkit/browser/fileapi/sandbox_quota_observer.h"
11 #include "webkit/browser/fileapi/syncable/syncable_file_system_operation.h"
12 #include "webkit/browser/fileapi/syncable/syncable_file_system_util.h"
13 #include "webkit/common/fileapi/file_system_util.h"
14
15 namespace sync_file_system {
16
17 namespace {
18 const char kSyncableOriginsCountLabel[] = "FileSystem.SyncableOriginsCount";
19 } // namespace
20
21 SyncableSandboxMountPointProvider::SyncableSandboxMountPointProvider(
22 quota::QuotaManagerProxy* quota_manager_proxy,
23 base::SequencedTaskRunner* file_task_runner,
24 const base::FilePath& profile_path,
25 const fileapi::FileSystemOptions& file_system_options,
26 quota::SpecialStoragePolicy* special_storage_policy)
27 : SandboxMountPointProvider(quota_manager_proxy,
28 file_task_runner,
29 profile_path,
30 file_system_options,
31 special_storage_policy) {
kinuko 2013/07/08 12:31:20 Hmm... I realized this needs a bit more design dis
nhiroki 2013/07/22 04:34:14 Done in http://crrev.com/210790/
32 fileapi::UpdateObserverList::Source update_observers_src;
33
34 if (enable_usage_tracking_) {
35 update_observers_src.AddObserver(quota_observer_.get(),
36 file_task_runner_.get());
37 }
38
39 syncable_update_observers_ =
40 fileapi::UpdateObserverList(update_observers_src);
41 }
42
43 SyncableSandboxMountPointProvider::~SyncableSandboxMountPointProvider() {
44 file_task_runner_->DeleteSoon(FROM_HERE, change_tracker_.release());
45 }
46
47 bool SyncableSandboxMountPointProvider::CanHandleType(
48 fileapi::FileSystemType type) const {
49 return type == fileapi::kFileSystemTypeSyncable ||
50 type == fileapi::kFileSystemTypeSyncableForInternalSync;
51 }
52
53 GURL SyncableSandboxMountPointProvider::GetRootURI(
54 const GURL& origin_url,
55 fileapi::FileSystemType type) const {
56 if (!CanHandleType(type))
57 return GURL();
58 if (type == fileapi::kFileSystemTypeSyncableForInternalSync)
59 return GetFileSystemRootURI(origin_url, type);
60 return sync_file_system::GetSyncableFileSystemRootURI(origin_url);
61 }
62
63 fileapi::FileSystemOperation*
64 SyncableSandboxMountPointProvider::CreateFileSystemOperation(
65 const fileapi::FileSystemURL& url,
66 fileapi::FileSystemContext* context,
67 base::PlatformFileError* error_code) const {
68 if (!IsAccessValid(url)) {
69 *error_code = base::PLATFORM_FILE_ERROR_SECURITY;
70 return NULL;
71 }
72
73 if (url.type() == fileapi::kFileSystemTypeSyncableForInternalSync) {
74 return fileapi::SandboxMountPointProvider::CreateFileSystemOperation(
75 url, context, error_code);
76 }
77
78 scoped_ptr<fileapi::FileSystemOperationContext> operation_context(
79 new fileapi::FileSystemOperationContext(context));
80 operation_context->set_update_observers(syncable_update_observers_);
81 operation_context->set_change_observers(syncable_change_observers_);
82
83 return new SyncableFileSystemOperation(
84 url, context, operation_context.Pass());
85 }
86
87 const fileapi::UpdateObserverList*
88 SyncableSandboxMountPointProvider::GetUpdateObservers(
89 fileapi::FileSystemType type) const {
90 if (type == fileapi::kFileSystemTypeSyncableForInternalSync)
91 return &update_observers_;
92 return &syncable_update_observers_;
93 }
94
95 void SyncableSandboxMountPointProvider::GetOriginsForTypeOnFileThread(
96 fileapi::FileSystemType type,
97 std::set<GURL>* origins) {
98 DCHECK(CanHandleType(type));
99 DCHECK(origins);
100 scoped_ptr<OriginEnumerator> enumerator(CreateOriginEnumerator());
101 GURL origin;
102 while (!(origin = enumerator->Next()).is_empty()) {
103 if (enumerator->HasFileSystemType(type))
104 origins->insert(origin);
105 }
106 switch (type) {
107 case fileapi::kFileSystemTypeSyncable:
108 UMA_HISTOGRAM_COUNTS(kSyncableOriginsCountLabel, origins->size());
109 break;
110 default:
111 break;
112 }
113 }
114
115 void SyncableSandboxMountPointProvider::AddFileUpdateObserver(
116 fileapi::FileSystemType type,
117 fileapi::FileUpdateObserver* observer,
118 base::SequencedTaskRunner* task_runner) {
119 DCHECK(CanHandleType(type));
120 if (type == fileapi::kFileSystemTypeSyncableForInternalSync) {
121 fileapi::SandboxMountPointProvider::AddFileUpdateObserver(
122 type, observer, task_runner);
123 return;
124 }
125
126 fileapi::UpdateObserverList* list = &syncable_update_observers_;
127 fileapi::UpdateObserverList::Source observer_source = list->source();
128 observer_source.AddObserver(observer, task_runner);
129 *list = fileapi::UpdateObserverList(observer_source);
130 }
131
132 void SyncableSandboxMountPointProvider::AddFileChangeObserver(
133 fileapi::FileSystemType type,
134 fileapi::FileChangeObserver* observer,
135 base::SequencedTaskRunner* task_runner) {
136 DCHECK(CanHandleType(type));
137 if (type == fileapi::kFileSystemTypeSyncableForInternalSync) {
138 fileapi::SandboxMountPointProvider::AddFileChangeObserver(
139 type, observer, task_runner);
140 return;
141 }
142
143 fileapi::ChangeObserverList* list = &syncable_change_observers_;
144 fileapi::ChangeObserverList::Source observer_source = list->source();
145 observer_source.AddObserver(observer, task_runner);
146 *list = fileapi::ChangeObserverList(observer_source);
147 }
148
149 // static
150 SyncableSandboxMountPointProvider*
151 SyncableSandboxMountPointProvider::GetProvider(
152 const fileapi::FileSystemContext* file_system_context) {
153 return static_cast<SyncableSandboxMountPointProvider*>(
154 file_system_context->GetMountPointProvider(
155 fileapi::kFileSystemTypeSyncable));
156 }
157
158 void SyncableSandboxMountPointProvider::set_change_tracker(
159 scoped_ptr<LocalFileChangeTracker> tracker) {
160 DCHECK(!change_tracker_.get());
161 DCHECK(tracker.get());
162 change_tracker_ = tracker.Pass();
163 AddFileUpdateObserver(fileapi::kFileSystemTypeSyncable,
164 change_tracker_.get(),
165 file_task_runner_);
166 AddFileChangeObserver(fileapi::kFileSystemTypeSyncable,
167 change_tracker_.get(),
168 file_task_runner_);
169 }
170
171 void SyncableSandboxMountPointProvider::set_sync_context(
172 sync_file_system::LocalFileSyncContext* sync_context) {
173 sync_context_ = sync_context;
174 }
175
176 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698