Index: content/browser/renderer_host/pepper/pepper_file_io_host.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
index d9a11b7cc440a3eb2dc011f595e70b53de988957..e350138f8a76d480171a1c400b9fee4d54517e4c 100644 |
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
@@ -78,6 +78,29 @@ bool FileOpenForWrite(int32_t open_flags) { |
return (open_flags & (PP_FILEOPENFLAG_WRITE | PP_FILEOPENFLAG_APPEND)) != 0; |
} |
+void FileCloser(base::File auto_close) { |
+} |
+ |
+void DidCloseFile(const base::Closure& on_close_callback) { |
+ if (!on_close_callback.is_null()) |
+ on_close_callback.Run(); |
+} |
+ |
+void DidOpenFile(base::WeakPtr<PepperFileIOHost> file_host, |
+ fileapi::FileSystemOperation::OpenFileCallback callback, |
+ base::File file, |
+ const base::Closure& on_close_callback) { |
+ if (file_host) { |
+ callback.Run(file.Pass(), on_close_callback); |
+ } else { |
+ BrowserThread::PostTaskAndReply( |
+ BrowserThread::FILE, |
+ FROM_HERE, |
+ base::Bind(&FileCloser, base::Passed(&file)), |
+ base::Bind(&DidCloseFile, on_close_callback)); |
+ } |
+} |
+ |
} // namespace |
PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host, |
@@ -90,8 +113,7 @@ PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host, |
open_flags_(0), |
file_system_type_(PP_FILESYSTEMTYPE_INVALID), |
max_written_offset_(0), |
- check_quota_(false), |
- weak_factory_(this) { |
+ check_quota_(false) { |
int unused; |
if (!host->GetRenderFrameIDsForInstance( |
instance, &render_process_id_, &unused)) { |
@@ -184,7 +206,7 @@ int32_t PepperFileIOHost::OnHostMsgOpen( |
FROM_HERE, |
base::Bind(&GetUIThreadStuffForInternalFileSystems, render_process_id_), |
base::Bind(&PepperFileIOHost::GotUIThreadStuffForInternalFileSystems, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext(), |
platform_file_flags)); |
} else { |
@@ -196,7 +218,7 @@ int32_t PepperFileIOHost::OnHostMsgOpen( |
FROM_HERE, |
base::Bind(&GetResolvedRenderProcessId, render_process_id_), |
base::Bind(&PepperFileIOHost::GotResolvedRenderProcessId, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext(), |
path, |
platform_file_flags)); |
@@ -227,12 +249,15 @@ void PepperFileIOHost::GotUIThreadStuffForInternalFileSystems( |
DCHECK(file_system_host_.get()); |
DCHECK(file_system_host_->GetFileSystemOperationRunner()); |
+ |
file_system_host_->GetFileSystemOperationRunner()->OpenFile( |
file_system_url_, |
platform_file_flags, |
- base::Bind(&PepperFileIOHost::DidOpenInternalFile, |
- weak_factory_.GetWeakPtr(), |
- reply_context)); |
+ base::Bind(&DidOpenFile, |
+ AsWeakPtr(), |
+ base::Bind(&PepperFileIOHost::DidOpenInternalFile, |
+ AsWeakPtr(), |
+ reply_context))); |
} |
void PepperFileIOHost::DidOpenInternalFile( |
@@ -248,7 +273,7 @@ void PepperFileIOHost::DidOpenInternalFile( |
this, |
file_system_url_, |
base::Bind(&PepperFileIOHost::DidOpenQuotaFile, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
reply_context, |
base::Passed(&file))); |
return; |
@@ -273,7 +298,7 @@ void PepperFileIOHost::GotResolvedRenderProcessId( |
path, |
file_flags, |
base::Bind(&PepperFileIOHost::OnOpenProxyCallback, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
reply_context)); |
} |
@@ -290,7 +315,7 @@ int32_t PepperFileIOHost::OnHostMsgTouch( |
PPTimeToTime(last_access_time), |
PPTimeToTime(last_modified_time), |
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext()))) { |
return PP_ERROR_FAILED; |
} |
@@ -315,7 +340,7 @@ int32_t PepperFileIOHost::OnHostMsgSetLength( |
if (!file_.SetLength( |
length, |
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext()))) { |
return PP_ERROR_FAILED; |
} |
@@ -333,7 +358,7 @@ int32_t PepperFileIOHost::OnHostMsgFlush( |
if (!file_.Flush( |
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext()))) { |
return PP_ERROR_FAILED; |
} |
@@ -352,7 +377,7 @@ int32_t PepperFileIOHost::OnHostMsgClose( |
if (file_.IsValid()) { |
file_.Close(base::Bind(&PepperFileIOHost::DidCloseFile, |
- weak_factory_.GetWeakPtr())); |
+ AsWeakPtr())); |
} |
return PP_OK; |
} |
@@ -391,7 +416,7 @@ int32_t PepperFileIOHost::OnHostMsgRequestOSFileHandle( |
render_process_id_, |
document_url), |
base::Bind(&PepperFileIOHost::GotPluginAllowedToCallRequestOSFileHandle, |
- weak_factory_.GetWeakPtr(), |
+ AsWeakPtr(), |
context->MakeReplyMessageContext())); |
return PP_OK_COMPLETIONPENDING; |
} |