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

Side by Side Diff: content/child/fileapi/file_system_dispatcher.cc

Issue 23856002: SyncFS: Support resolveLocalFileSystemURL on SyncFileSystem (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/fileapi/file_system_dispatcher.h" 5 #include "content/child/fileapi/file_system_dispatcher.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "base/process/process.h" 10 #include "base/process/process.h"
11 #include "content/child/child_thread.h" 11 #include "content/child/child_thread.h"
12 #include "content/common/fileapi/file_system_messages.h" 12 #include "content/common/fileapi/file_system_messages.h"
13 #include "webkit/common/fileapi/file_system_info.h"
13 14
14 namespace content { 15 namespace content {
15 16
16 class FileSystemDispatcher::CallbackDispatcher { 17 class FileSystemDispatcher::CallbackDispatcher {
17 public: 18 public:
18 typedef CallbackDispatcher self; 19 typedef CallbackDispatcher self;
19 typedef FileSystemDispatcher::StatusCallback StatusCallback; 20 typedef FileSystemDispatcher::StatusCallback StatusCallback;
20 typedef FileSystemDispatcher::MetadataCallback MetadataCallback; 21 typedef FileSystemDispatcher::MetadataCallback MetadataCallback;
21 typedef FileSystemDispatcher::ReadDirectoryCallback ReadDirectoryCallback; 22 typedef FileSystemDispatcher::ReadDirectoryCallback ReadDirectoryCallback;
22 typedef FileSystemDispatcher::OpenFileSystemCallback OpenFileSystemCallback; 23 typedef FileSystemDispatcher::OpenFileSystemCallback OpenFileSystemCallback;
24 typedef FileSystemDispatcher::ResolveURLCallback ResolveURLCallback;
23 typedef FileSystemDispatcher::WriteCallback WriteCallback; 25 typedef FileSystemDispatcher::WriteCallback WriteCallback;
24 typedef FileSystemDispatcher::OpenFileCallback OpenFileCallback; 26 typedef FileSystemDispatcher::OpenFileCallback OpenFileCallback;
25 27
26 static CallbackDispatcher* Create(const StatusCallback& callback) { 28 static CallbackDispatcher* Create(const StatusCallback& callback) {
27 CallbackDispatcher* dispatcher = new CallbackDispatcher; 29 CallbackDispatcher* dispatcher = new CallbackDispatcher;
28 dispatcher->status_callback_ = callback; 30 dispatcher->status_callback_ = callback;
29 dispatcher->error_callback_ = callback; 31 dispatcher->error_callback_ = callback;
30 return dispatcher; 32 return dispatcher;
31 } 33 }
32 static CallbackDispatcher* Create(const MetadataCallback& callback, 34 static CallbackDispatcher* Create(const MetadataCallback& callback,
(...skipping 17 matching lines...) Expand all
50 dispatcher->error_callback_ = error_callback; 52 dispatcher->error_callback_ = error_callback;
51 return dispatcher; 53 return dispatcher;
52 } 54 }
53 static CallbackDispatcher* Create(const OpenFileSystemCallback& callback, 55 static CallbackDispatcher* Create(const OpenFileSystemCallback& callback,
54 const StatusCallback& error_callback) { 56 const StatusCallback& error_callback) {
55 CallbackDispatcher* dispatcher = new CallbackDispatcher; 57 CallbackDispatcher* dispatcher = new CallbackDispatcher;
56 dispatcher->filesystem_callback_ = callback; 58 dispatcher->filesystem_callback_ = callback;
57 dispatcher->error_callback_ = error_callback; 59 dispatcher->error_callback_ = error_callback;
58 return dispatcher; 60 return dispatcher;
59 } 61 }
62 static CallbackDispatcher* Create(const ResolveURLCallback& callback,
63 const StatusCallback& error_callback) {
64 CallbackDispatcher* dispatcher = new CallbackDispatcher;
65 dispatcher->resolve_callback_ = callback;
66 dispatcher->error_callback_ = error_callback;
67 return dispatcher;
68 }
60 static CallbackDispatcher* Create(const WriteCallback& callback, 69 static CallbackDispatcher* Create(const WriteCallback& callback,
61 const StatusCallback& error_callback) { 70 const StatusCallback& error_callback) {
62 CallbackDispatcher* dispatcher = new CallbackDispatcher; 71 CallbackDispatcher* dispatcher = new CallbackDispatcher;
63 dispatcher->write_callback_ = callback; 72 dispatcher->write_callback_ = callback;
64 dispatcher->error_callback_ = error_callback; 73 dispatcher->error_callback_ = error_callback;
65 return dispatcher; 74 return dispatcher;
66 } 75 }
67 static CallbackDispatcher* Create(const OpenFileCallback& callback, 76 static CallbackDispatcher* Create(const OpenFileCallback& callback,
68 const StatusCallback& error_callback) { 77 const StatusCallback& error_callback) {
69 CallbackDispatcher* dispatcher = new CallbackDispatcher; 78 CallbackDispatcher* dispatcher = new CallbackDispatcher;
(...skipping 28 matching lines...) Expand all
98 const std::vector<fileapi::DirectoryEntry>& entries, 107 const std::vector<fileapi::DirectoryEntry>& entries,
99 bool has_more) { 108 bool has_more) {
100 directory_callback_.Run(entries, has_more); 109 directory_callback_.Run(entries, has_more);
101 } 110 }
102 111
103 void DidOpenFileSystem(const std::string& name, 112 void DidOpenFileSystem(const std::string& name,
104 const GURL& root) { 113 const GURL& root) {
105 filesystem_callback_.Run(name, root); 114 filesystem_callback_.Run(name, root);
106 } 115 }
107 116
117 void DidResolveURL(const fileapi::FileSystemInfo& info,
118 const base::FilePath& file_path,
119 bool is_directory) {
120 resolve_callback_.Run(info, file_path, is_directory);
121 }
122
108 void DidWrite(int64 bytes, bool complete) { 123 void DidWrite(int64 bytes, bool complete) {
109 write_callback_.Run(bytes, complete); 124 write_callback_.Run(bytes, complete);
110 } 125 }
111 126
112 void DidOpenFile(base::PlatformFile file, 127 void DidOpenFile(base::PlatformFile file,
113 int file_open_id, 128 int file_open_id,
114 quota::QuotaLimitType quota_policy) { 129 quota::QuotaLimitType quota_policy) {
115 open_callback_.Run(file, file_open_id, quota_policy); 130 open_callback_.Run(file, file_open_id, quota_policy);
116 } 131 }
117 132
118 private: 133 private:
119 CallbackDispatcher() {} 134 CallbackDispatcher() {}
120 135
121 StatusCallback status_callback_; 136 StatusCallback status_callback_;
122 MetadataCallback metadata_callback_; 137 MetadataCallback metadata_callback_;
123 CreateSnapshotFileCallback snapshot_callback_; 138 CreateSnapshotFileCallback snapshot_callback_;
124 ReadDirectoryCallback directory_callback_; 139 ReadDirectoryCallback directory_callback_;
125 OpenFileSystemCallback filesystem_callback_; 140 OpenFileSystemCallback filesystem_callback_;
141 ResolveURLCallback resolve_callback_;
126 WriteCallback write_callback_; 142 WriteCallback write_callback_;
127 OpenFileCallback open_callback_; 143 OpenFileCallback open_callback_;
128 144
129 StatusCallback error_callback_; 145 StatusCallback error_callback_;
130 146
131 DISALLOW_COPY_AND_ASSIGN(CallbackDispatcher); 147 DISALLOW_COPY_AND_ASSIGN(CallbackDispatcher);
132 }; 148 };
133 149
134 FileSystemDispatcher::FileSystemDispatcher() { 150 FileSystemDispatcher::FileSystemDispatcher() {
135 } 151 }
136 152
137 FileSystemDispatcher::~FileSystemDispatcher() { 153 FileSystemDispatcher::~FileSystemDispatcher() {
138 // Make sure we fire all the remaining callbacks. 154 // Make sure we fire all the remaining callbacks.
139 for (IDMap<CallbackDispatcher, IDMapOwnPointer>::iterator 155 for (IDMap<CallbackDispatcher, IDMapOwnPointer>::iterator
140 iter(&dispatchers_); !iter.IsAtEnd(); iter.Advance()) { 156 iter(&dispatchers_); !iter.IsAtEnd(); iter.Advance()) {
141 int request_id = iter.GetCurrentKey(); 157 int request_id = iter.GetCurrentKey();
142 CallbackDispatcher* dispatcher = iter.GetCurrentValue(); 158 CallbackDispatcher* dispatcher = iter.GetCurrentValue();
143 DCHECK(dispatcher); 159 DCHECK(dispatcher);
144 dispatcher->DidFail(base::PLATFORM_FILE_ERROR_ABORT); 160 dispatcher->DidFail(base::PLATFORM_FILE_ERROR_ABORT);
145 dispatchers_.Remove(request_id); 161 dispatchers_.Remove(request_id);
146 } 162 }
147 } 163 }
148 164
149 bool FileSystemDispatcher::OnMessageReceived(const IPC::Message& msg) { 165 bool FileSystemDispatcher::OnMessageReceived(const IPC::Message& msg) {
150 bool handled = true; 166 bool handled = true;
151 IPC_BEGIN_MESSAGE_MAP(FileSystemDispatcher, msg) 167 IPC_BEGIN_MESSAGE_MAP(FileSystemDispatcher, msg)
152 IPC_MESSAGE_HANDLER(FileSystemMsg_DidOpenFileSystem, OnDidOpenFileSystem) 168 IPC_MESSAGE_HANDLER(FileSystemMsg_DidOpenFileSystem, OnDidOpenFileSystem)
169 IPC_MESSAGE_HANDLER(FileSystemMsg_DidResolveURL, OnDidResolveURL)
153 IPC_MESSAGE_HANDLER(FileSystemMsg_DidSucceed, OnDidSucceed) 170 IPC_MESSAGE_HANDLER(FileSystemMsg_DidSucceed, OnDidSucceed)
154 IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadDirectory, OnDidReadDirectory) 171 IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadDirectory, OnDidReadDirectory)
155 IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadMetadata, OnDidReadMetadata) 172 IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadMetadata, OnDidReadMetadata)
156 IPC_MESSAGE_HANDLER(FileSystemMsg_DidCreateSnapshotFile, 173 IPC_MESSAGE_HANDLER(FileSystemMsg_DidCreateSnapshotFile,
157 OnDidCreateSnapshotFile) 174 OnDidCreateSnapshotFile)
158 IPC_MESSAGE_HANDLER(FileSystemMsg_DidFail, OnDidFail) 175 IPC_MESSAGE_HANDLER(FileSystemMsg_DidFail, OnDidFail)
159 IPC_MESSAGE_HANDLER(FileSystemMsg_DidWrite, OnDidWrite) 176 IPC_MESSAGE_HANDLER(FileSystemMsg_DidWrite, OnDidWrite)
160 IPC_MESSAGE_HANDLER(FileSystemMsg_DidOpenFile, OnDidOpenFile) 177 IPC_MESSAGE_HANDLER(FileSystemMsg_DidOpenFile, OnDidOpenFile)
161 IPC_MESSAGE_UNHANDLED(handled = false) 178 IPC_MESSAGE_UNHANDLED(handled = false)
162 IPC_END_MESSAGE_MAP() 179 IPC_END_MESSAGE_MAP()
163 return handled; 180 return handled;
164 } 181 }
165 182
166 void FileSystemDispatcher::OpenFileSystem( 183 void FileSystemDispatcher::OpenFileSystem(
167 const GURL& origin_url, fileapi::FileSystemType type, 184 const GURL& origin_url, fileapi::FileSystemType type,
168 long long size, bool create, 185 long long size, bool create,
169 const OpenFileSystemCallback& success_callback, 186 const OpenFileSystemCallback& success_callback,
170 const StatusCallback& error_callback) { 187 const StatusCallback& error_callback) {
171 int request_id = dispatchers_.Add( 188 int request_id = dispatchers_.Add(
172 CallbackDispatcher::Create(success_callback, error_callback)); 189 CallbackDispatcher::Create(success_callback, error_callback));
173 ChildThread::current()->Send(new FileSystemHostMsg_Open( 190 ChildThread::current()->Send(new FileSystemHostMsg_Open(
174 request_id, origin_url, type, size, create)); 191 request_id, origin_url, type, size, create));
175 } 192 }
176 193
194 void FileSystemDispatcher::ResolveURL(
195 const GURL& filesystem_url,
196 const ResolveURLCallback& success_callback,
197 const StatusCallback& error_callback) {
198 int request_id = dispatchers_.Add(
199 CallbackDispatcher::Create(success_callback, error_callback));
200 ChildThread::current()->Send(new FileSystemHostMsg_ResolveURL(
201 request_id, filesystem_url));
202 }
203
177 void FileSystemDispatcher::DeleteFileSystem( 204 void FileSystemDispatcher::DeleteFileSystem(
178 const GURL& origin_url, 205 const GURL& origin_url,
179 fileapi::FileSystemType type, 206 fileapi::FileSystemType type,
180 const StatusCallback& callback) { 207 const StatusCallback& callback) {
181 int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback)); 208 int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
182 ChildThread::current()->Send(new FileSystemHostMsg_DeleteFileSystem( 209 ChildThread::current()->Send(new FileSystemHostMsg_DeleteFileSystem(
183 request_id, origin_url, type)); 210 request_id, origin_url, type));
184 } 211 }
185 212
186 void FileSystemDispatcher::Move( 213 void FileSystemDispatcher::Move(
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 void FileSystemDispatcher::OnDidOpenFileSystem(int request_id, 382 void FileSystemDispatcher::OnDidOpenFileSystem(int request_id,
356 const std::string& name, 383 const std::string& name,
357 const GURL& root) { 384 const GURL& root) {
358 DCHECK(root.is_valid()); 385 DCHECK(root.is_valid());
359 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); 386 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id);
360 DCHECK(dispatcher); 387 DCHECK(dispatcher);
361 dispatcher->DidOpenFileSystem(name, root); 388 dispatcher->DidOpenFileSystem(name, root);
362 dispatchers_.Remove(request_id); 389 dispatchers_.Remove(request_id);
363 } 390 }
364 391
392 void FileSystemDispatcher::OnDidResolveURL(int request_id,
393 const fileapi::FileSystemInfo& info,
394 const base::FilePath& file_path,
395 bool is_directory) {
396 DCHECK(info.root_url.is_valid());
397 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id);
398 DCHECK(dispatcher);
399 dispatcher->DidResolveURL(info, file_path, is_directory);
400 dispatchers_.Remove(request_id);
401 }
402
365 void FileSystemDispatcher::OnDidSucceed(int request_id) { 403 void FileSystemDispatcher::OnDidSucceed(int request_id) {
366 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); 404 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id);
367 DCHECK(dispatcher); 405 DCHECK(dispatcher);
368 dispatcher->DidSucceed(); 406 dispatcher->DidSucceed();
369 dispatchers_.Remove(request_id); 407 dispatchers_.Remove(request_id);
370 } 408 }
371 409
372 void FileSystemDispatcher::OnDidReadMetadata( 410 void FileSystemDispatcher::OnDidReadMetadata(
373 int request_id, const base::PlatformFileInfo& file_info) { 411 int request_id, const base::PlatformFileInfo& file_info) {
374 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); 412 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 quota::QuotaLimitType quota_policy) { 458 quota::QuotaLimitType quota_policy) {
421 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); 459 CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id);
422 DCHECK(dispatcher); 460 DCHECK(dispatcher);
423 dispatcher->DidOpenFile(IPC::PlatformFileForTransitToPlatformFile(file), 461 dispatcher->DidOpenFile(IPC::PlatformFileForTransitToPlatformFile(file),
424 file_open_id, 462 file_open_id,
425 quota_policy); 463 quota_policy);
426 dispatchers_.Remove(request_id); 464 dispatchers_.Remove(request_id);
427 } 465 }
428 466
429 } // namespace content 467 } // namespace content
OLDNEW
« no previous file with comments | « content/child/fileapi/file_system_dispatcher.h ('k') | content/child/fileapi/webfilesystem_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698