Index: content/browser/fileapi/fileapi_message_filter.cc |
diff --git a/content/browser/fileapi/fileapi_message_filter.cc b/content/browser/fileapi/fileapi_message_filter.cc |
index b4b5aefc866fdaa0d599b4f093b8f8cf462f43fe..acf963faf29784489969a8ddec1e16600f2a798e 100644 |
--- a/content/browser/fileapi/fileapi_message_filter.cc |
+++ b/content/browser/fileapi/fileapi_message_filter.cc |
@@ -159,6 +159,7 @@ bool FileAPIMessageFilter::OnMessageReceived( |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP_EX(FileAPIMessageFilter, message, *message_was_ok) |
IPC_MESSAGE_HANDLER(FileSystemHostMsg_Open, OnOpen) |
+ IPC_MESSAGE_HANDLER(FileSystemHostMsg_ResolveURL, OnResolveURL) |
IPC_MESSAGE_HANDLER(FileSystemHostMsg_DeleteFileSystem, OnDeleteFileSystem) |
IPC_MESSAGE_HANDLER(FileSystemHostMsg_Move, OnMove) |
IPC_MESSAGE_HANDLER(FileSystemHostMsg_Copy, OnCopy) |
@@ -227,6 +228,21 @@ void FileAPIMessageFilter::OnOpen( |
&FileAPIMessageFilter::DidOpenFileSystem, this, request_id)); |
} |
+void FileAPIMessageFilter::OnResolveURL( |
+ int request_id, |
+ const GURL& filesystem_url) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ base::PlatformFileError error; |
+ FileSystemURL url(context_->CrackURL(filesystem_url)); |
+ if (!HasPermissionsForFile(url, fileapi::kReadFilePermissions, &error)) { |
+ Send(new FileSystemMsg_DidFail(request_id, error)); |
+ return; |
+ } |
+ |
+ context_->ResolveURL(filesystem_url, base::Bind( |
+ &FileAPIMessageFilter::DidResolveURL, this, request_id)); |
+} |
+ |
void FileAPIMessageFilter::OnDeleteFileSystem( |
int request_id, |
const GURL& origin_url, |
@@ -791,6 +807,23 @@ void FileAPIMessageFilter::DidOpenFileSystem(int request_id, |
// For OpenFileSystem we do not create a new operation, so no unregister here. |
} |
+void FileAPIMessageFilter::DidResolveURL(int request_id, |
+ base::PlatformFileError result, |
+ const std::string& name, |
+ const GURL& root, |
+ const base::FilePath& file_path, |
+ bool is_directory) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ if (result == base::PLATFORM_FILE_OK) { |
+ DCHECK(root.is_valid()); |
+ Send(new FileSystemMsg_DidResolveURL( |
+ request_id, name, root, file_path, is_directory)); |
+ } else { |
+ Send(new FileSystemMsg_DidFail(request_id, result)); |
+ } |
+ // For ResolveURL we do not create a new operation, so no unregister here. |
+} |
+ |
void FileAPIMessageFilter::DidDeleteFileSystem( |
int request_id, |
base::PlatformFileError result) { |