Index: content/browser/file_system/file_system_dispatcher_host.cc |
diff --git a/content/browser/file_system/file_system_dispatcher_host.cc b/content/browser/file_system/file_system_dispatcher_host.cc |
index e4469af99c4e6ea9eb3a6a73d3aa22df3aa7e65e..3be73310e637fc77743c59caff8d9fd206ec5409 100644 |
--- a/content/browser/file_system/file_system_dispatcher_host.cc |
+++ b/content/browser/file_system/file_system_dispatcher_host.cc |
@@ -21,9 +21,9 @@ |
#include "webkit/fileapi/file_system_callback_dispatcher.h" |
#include "webkit/fileapi/file_system_context.h" |
#include "webkit/fileapi/file_system_operation.h" |
-#include "webkit/fileapi/file_system_operation.h" |
#include "webkit/fileapi/file_system_quota_util.h" |
#include "webkit/fileapi/file_system_util.h" |
+#include "webkit/fileapi/sandbox_mount_point_provider.h" |
using content::BrowserMessageFilter; |
using content::BrowserThread; |
@@ -31,6 +31,7 @@ using content::UserMetricsAction; |
using fileapi::FileSystemCallbackDispatcher; |
using fileapi::FileSystemFileUtil; |
using fileapi::FileSystemOperation; |
+using fileapi::FileSystemOperationInterface; |
class BrowserFileSystemCallbackDispatcher |
: public FileSystemCallbackDispatcher { |
@@ -186,44 +187,45 @@ void FileSystemDispatcherHost::OnOpen( |
void FileSystemDispatcherHost::OnMove( |
int request_id, const GURL& src_path, const GURL& dest_path) { |
- GetNewOperation(request_id)->Move(src_path, dest_path); |
+ GetNewOperation(src_path, request_id)->Move(src_path, dest_path); |
} |
void FileSystemDispatcherHost::OnCopy( |
int request_id, const GURL& src_path, const GURL& dest_path) { |
- GetNewOperation(request_id)->Copy(src_path, dest_path); |
+ GetNewOperation(src_path, request_id)->Copy(src_path, dest_path); |
} |
void FileSystemDispatcherHost::OnRemove( |
int request_id, const GURL& path, bool recursive) { |
- GetNewOperation(request_id)->Remove(path, recursive); |
+ GetNewOperation(path, request_id)->Remove(path, recursive); |
} |
void FileSystemDispatcherHost::OnReadMetadata( |
int request_id, const GURL& path) { |
- GetNewOperation(request_id)->GetMetadata(path); |
+ GetNewOperation(path, request_id)->GetMetadata(path); |
} |
void FileSystemDispatcherHost::OnCreate( |
int request_id, const GURL& path, bool exclusive, |
bool is_directory, bool recursive) { |
if (is_directory) |
- GetNewOperation(request_id)->CreateDirectory(path, exclusive, recursive); |
+ GetNewOperation(path, request_id)->CreateDirectory( |
+ path, exclusive, recursive); |
else |
- GetNewOperation(request_id)->CreateFile(path, exclusive); |
+ GetNewOperation(path, request_id)->CreateFile(path, exclusive); |
} |
void FileSystemDispatcherHost::OnExists( |
int request_id, const GURL& path, bool is_directory) { |
if (is_directory) |
- GetNewOperation(request_id)->DirectoryExists(path); |
+ GetNewOperation(path, request_id)->DirectoryExists(path); |
else |
- GetNewOperation(request_id)->FileExists(path); |
+ GetNewOperation(path, request_id)->FileExists(path); |
} |
void FileSystemDispatcherHost::OnReadDirectory( |
int request_id, const GURL& path) { |
- GetNewOperation(request_id)->ReadDirectory(path); |
+ GetNewOperation(path, request_id)->ReadDirectory(path); |
} |
void FileSystemDispatcherHost::OnWrite( |
@@ -236,7 +238,7 @@ void FileSystemDispatcherHost::OnWrite( |
NOTREACHED(); |
return; |
} |
- GetNewOperation(request_id)->Write( |
+ GetNewOperation(path, request_id)->Write( |
request_context_, path, blob_url, offset); |
} |
@@ -244,7 +246,7 @@ void FileSystemDispatcherHost::OnTruncate( |
int request_id, |
const GURL& path, |
int64 length) { |
- GetNewOperation(request_id)->Truncate(path, length); |
+ GetNewOperation(path, request_id)->Truncate(path, length); |
} |
void FileSystemDispatcherHost::OnTouchFile( |
@@ -252,14 +254,14 @@ void FileSystemDispatcherHost::OnTouchFile( |
const GURL& path, |
const base::Time& last_access_time, |
const base::Time& last_modified_time) { |
- GetNewOperation(request_id)->TouchFile( |
+ GetNewOperation(path, request_id)->TouchFile( |
path, last_access_time, last_modified_time); |
} |
void FileSystemDispatcherHost::OnCancel( |
int request_id, |
int request_id_to_cancel) { |
- FileSystemOperation* write = operations_.Lookup( |
+ FileSystemOperationInterface* write = operations_.Lookup( |
request_id_to_cancel); |
if (write) { |
// The cancel will eventually send both the write failure and the cancel |
@@ -275,7 +277,7 @@ void FileSystemDispatcherHost::OnCancel( |
void FileSystemDispatcherHost::OnOpenFile( |
int request_id, const GURL& path, int file_flags) { |
- GetNewOperation(request_id)->OpenFile(path, file_flags, peer_handle()); |
+ GetNewOperation(path, request_id)->OpenFile(path, file_flags, peer_handle()); |
} |
void FileSystemDispatcherHost::OnWillUpdate(const GURL& path) { |
@@ -308,20 +310,37 @@ void FileSystemDispatcherHost::OnSyncGetPlatformPath( |
DCHECK(platform_path); |
*platform_path = FilePath(); |
- FileSystemOperation* operation = new FileSystemOperation( |
- scoped_ptr<FileSystemCallbackDispatcher>(NULL), |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE), |
- context_); |
+ GURL origin_url; |
+ fileapi::FileSystemType file_system_type = fileapi::kFileSystemTypeUnknown; |
+ FilePath file_path; |
+ if (!fileapi::CrackFileSystemURL( |
+ path, &origin_url, &file_system_type, &file_path)) { |
+ return; |
+ } |
+ // This is called only by pepper plugin as of writing to get the |
+ // underlying platform path to upload a file in the sandboxed filesystem |
+ // (e.g. TEMPORARY or PERSISTENT). |
+ // TODO(kinuko): this hack should go away once appropriate upload-stream |
+ // handling based on element types is supported. |
+ FileSystemOperation* operation = |
+ context_->CreateFileSystemOperation( |
+ path, scoped_ptr<FileSystemCallbackDispatcher>(NULL), |
+ BrowserThread::GetMessageLoopProxyForThread( |
+ BrowserThread::FILE))->AsFileSystemOperation(); |
+ DCHECK(operation); |
operation->SyncGetPlatformPath(path, platform_path); |
} |
-FileSystemOperation* FileSystemDispatcherHost::GetNewOperation( |
+FileSystemOperationInterface* FileSystemDispatcherHost::GetNewOperation( |
+ const GURL& target_path, |
int request_id) { |
- FileSystemOperation* operation = new FileSystemOperation( |
- BrowserFileSystemCallbackDispatcher::Create(this, request_id), |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE), |
- context_); |
+ FileSystemOperationInterface* operation = |
+ context_->CreateFileSystemOperation( |
+ target_path, |
+ BrowserFileSystemCallbackDispatcher::Create(this, request_id), |
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
+ DCHECK(operation); |
operations_.AddWithID(operation, request_id); |
return operation; |
} |