Index: content/child/fileapi/file_system_dispatcher.cc |
diff --git a/content/child/fileapi/file_system_dispatcher.cc b/content/child/fileapi/file_system_dispatcher.cc |
index c564f8d5706572b7458aeed24c6534ecd1c2c6b6..fa73ad118df969488f51a39c903962bbb64f21e2 100644 |
--- a/content/child/fileapi/file_system_dispatcher.cc |
+++ b/content/child/fileapi/file_system_dispatcher.cc |
@@ -10,6 +10,7 @@ |
#include "base/process/process.h" |
#include "content/child/child_thread.h" |
#include "content/common/fileapi/file_system_messages.h" |
+#include "webkit/common/fileapi/file_system_info.h" |
namespace content { |
@@ -20,6 +21,7 @@ class FileSystemDispatcher::CallbackDispatcher { |
typedef FileSystemDispatcher::MetadataCallback MetadataCallback; |
typedef FileSystemDispatcher::ReadDirectoryCallback ReadDirectoryCallback; |
typedef FileSystemDispatcher::OpenFileSystemCallback OpenFileSystemCallback; |
+ typedef FileSystemDispatcher::ResolveURLCallback ResolveURLCallback; |
typedef FileSystemDispatcher::WriteCallback WriteCallback; |
typedef FileSystemDispatcher::OpenFileCallback OpenFileCallback; |
@@ -57,6 +59,13 @@ class FileSystemDispatcher::CallbackDispatcher { |
dispatcher->error_callback_ = error_callback; |
return dispatcher; |
} |
+ static CallbackDispatcher* Create(const ResolveURLCallback& callback, |
+ const StatusCallback& error_callback) { |
+ CallbackDispatcher* dispatcher = new CallbackDispatcher; |
+ dispatcher->resolve_callback_ = callback; |
+ dispatcher->error_callback_ = error_callback; |
+ return dispatcher; |
+ } |
static CallbackDispatcher* Create(const WriteCallback& callback, |
const StatusCallback& error_callback) { |
CallbackDispatcher* dispatcher = new CallbackDispatcher; |
@@ -105,6 +114,12 @@ class FileSystemDispatcher::CallbackDispatcher { |
filesystem_callback_.Run(name, root); |
} |
+ void DidResolveURL(const fileapi::FileSystemInfo& info, |
+ const base::FilePath& file_path, |
+ bool is_directory) { |
+ resolve_callback_.Run(info, file_path, is_directory); |
+ } |
+ |
void DidWrite(int64 bytes, bool complete) { |
write_callback_.Run(bytes, complete); |
} |
@@ -123,6 +138,7 @@ class FileSystemDispatcher::CallbackDispatcher { |
CreateSnapshotFileCallback snapshot_callback_; |
ReadDirectoryCallback directory_callback_; |
OpenFileSystemCallback filesystem_callback_; |
+ ResolveURLCallback resolve_callback_; |
WriteCallback write_callback_; |
OpenFileCallback open_callback_; |
@@ -150,6 +166,7 @@ bool FileSystemDispatcher::OnMessageReceived(const IPC::Message& msg) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(FileSystemDispatcher, msg) |
IPC_MESSAGE_HANDLER(FileSystemMsg_DidOpenFileSystem, OnDidOpenFileSystem) |
+ IPC_MESSAGE_HANDLER(FileSystemMsg_DidResolveURL, OnDidResolveURL) |
IPC_MESSAGE_HANDLER(FileSystemMsg_DidSucceed, OnDidSucceed) |
IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadDirectory, OnDidReadDirectory) |
IPC_MESSAGE_HANDLER(FileSystemMsg_DidReadMetadata, OnDidReadMetadata) |
@@ -174,6 +191,16 @@ void FileSystemDispatcher::OpenFileSystem( |
request_id, origin_url, type, size, create)); |
} |
+void FileSystemDispatcher::ResolveURL( |
+ const GURL& filesystem_url, |
+ const ResolveURLCallback& success_callback, |
+ const StatusCallback& error_callback) { |
+ int request_id = dispatchers_.Add( |
+ CallbackDispatcher::Create(success_callback, error_callback)); |
+ ChildThread::current()->Send(new FileSystemHostMsg_ResolveURL( |
+ request_id, filesystem_url)); |
+} |
+ |
void FileSystemDispatcher::DeleteFileSystem( |
const GURL& origin_url, |
fileapi::FileSystemType type, |
@@ -362,6 +389,17 @@ void FileSystemDispatcher::OnDidOpenFileSystem(int request_id, |
dispatchers_.Remove(request_id); |
} |
+void FileSystemDispatcher::OnDidResolveURL(int request_id, |
+ const fileapi::FileSystemInfo& info, |
+ const base::FilePath& file_path, |
+ bool is_directory) { |
+ DCHECK(info.root_url.is_valid()); |
+ CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); |
+ DCHECK(dispatcher); |
+ dispatcher->DidResolveURL(info, file_path, is_directory); |
+ dispatchers_.Remove(request_id); |
+} |
+ |
void FileSystemDispatcher::OnDidSucceed(int request_id) { |
CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); |
DCHECK(dispatcher); |