diff options
Diffstat (limited to 'chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc')
-rw-r--r-- | chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc b/chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc index cdc4ab29cde..628f9c9bab7 100644 --- a/chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc +++ b/chromium/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc @@ -7,7 +7,7 @@ #include <string.h> #include "base/files/file_path.h" -#include "base/files/file_util_proxy.h" +#include "base/files/file_util.h" #include "base/task_scheduler/post_task.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/public/browser/browser_thread.h" @@ -20,6 +20,43 @@ namespace content { +namespace { + +struct GetFileInfoResults { + base::File::Error error; + base::File::Info info; +}; + +using GetFileInfoCallback = + base::OnceCallback<void(base::File::Error, const base::File::Info&)>; + +GetFileInfoResults DoGetFileInfo(const base::FilePath& path) { + GetFileInfoResults results; + if (!base::PathExists(path)) { + results.error = base::File::FILE_ERROR_NOT_FOUND; + return results; + } + results.error = base::GetFileInfo(path, &results.info) + ? base::File::FILE_OK + : base::File::FILE_ERROR_FAILED; + return results; +} + +void SendGetFileInfoResults(GetFileInfoCallback callback, + const GetFileInfoResults& results) { + std::move(callback).Run(results.error, results.info); +} + +base::File::Error CallTouchFile(const base::FilePath& path, + PP_Time last_access_time, + PP_Time last_modified_time) { + bool result = base::TouchFile(path, ppapi::PPTimeToTime(last_access_time), + ppapi::PPTimeToTime(last_modified_time)); + return result ? base::File::FILE_OK : base::File::FILE_ERROR_FAILED; +} + +} // namespace + PepperExternalFileRefBackend::PepperExternalFileRefBackend( ppapi::host::PpapiHost* host, int render_process_id, @@ -46,9 +83,9 @@ int32_t PepperExternalFileRefBackend::Touch( PP_Time last_access_time, PP_Time last_modified_time) { IPC::Message reply_msg = PpapiPluginMsg_FileRef_TouchReply(); - base::FileUtilProxy::Touch( - task_runner_.get(), path_, ppapi::PPTimeToTime(last_access_time), - ppapi::PPTimeToTime(last_modified_time), + base::PostTaskAndReplyWithResult( + task_runner_.get(), FROM_HERE, + BindOnce(&CallTouchFile, path_, last_access_time, last_modified_time), base::BindOnce(&PepperExternalFileRefBackend::DidFinish, weak_factory_.GetWeakPtr(), reply_context, reply_msg)); return PP_OK_COMPLETIONPENDING; @@ -69,10 +106,12 @@ int32_t PepperExternalFileRefBackend::Rename( int32_t PepperExternalFileRefBackend::Query( ppapi::host::ReplyMessageContext reply_context) { - bool ok = base::FileUtilProxy::GetFileInfo( - task_runner_.get(), path_, - base::BindOnce(&PepperExternalFileRefBackend::GetMetadataComplete, - weak_factory_.GetWeakPtr(), reply_context)); + bool ok = base::PostTaskAndReplyWithResult( + task_runner_.get(), FROM_HERE, base::BindOnce(&DoGetFileInfo, path_), + base::BindOnce( + &SendGetFileInfoResults, + base::BindOnce(&PepperExternalFileRefBackend::GetMetadataComplete, + weak_factory_.GetWeakPtr(), reply_context))); DCHECK(ok); return PP_OK_COMPLETIONPENDING; } |