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 b7a13671cfeecb823528696e605368be8b352c83..8ae9b66a5a81c83e37b5aa497cea29099d7a50da 100644 |
--- a/content/child/fileapi/file_system_dispatcher.cc |
+++ b/content/child/fileapi/file_system_dispatcher.cc |
@@ -20,6 +20,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 +58,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 +113,13 @@ class FileSystemDispatcher::CallbackDispatcher { |
filesystem_callback_.Run(name, root); |
} |
+ void DidResolveURL(const std::string& name, |
+ const GURL& root, |
+ const base::FilePath& file_path, |
+ bool is_directory) { |
+ resolve_callback_.Run(name, root, 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, |
@@ -345,6 +372,18 @@ void FileSystemDispatcher::OnDidOpenFileSystem(int request_id, |
dispatchers_.Remove(request_id); |
} |
+void FileSystemDispatcher::OnDidResolveURL(int request_id, |
+ const std::string& name, |
+ const GURL& root, |
+ const base::FilePath& file_path, |
+ bool is_directory) { |
+ DCHECK(root.is_valid()); |
+ CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); |
+ DCHECK(dispatcher); |
+ dispatcher->DidResolveURL(name, root, file_path, is_directory); |
+ dispatchers_.Remove(request_id); |
+} |
+ |
void FileSystemDispatcher::OnDidSucceed(int request_id) { |
CallbackDispatcher* dispatcher = dispatchers_.Lookup(request_id); |
DCHECK(dispatcher); |