Chromium Code Reviews| Index: content/renderer/pepper/pepper_file_io_host.cc |
| diff --git a/content/renderer/pepper/pepper_file_io_host.cc b/content/renderer/pepper/pepper_file_io_host.cc |
| index 6b9cfc54d947ecd04aa5df2e74b820a361b332d0..d0160ee4e2575c919b57a9a34ac428351d31c5c8 100644 |
| --- a/content/renderer/pepper/pepper_file_io_host.cc |
| +++ b/content/renderer/pepper/pepper_file_io_host.cc |
| @@ -17,9 +17,11 @@ |
| #include "content/public/common/content_client.h" |
| #include "content/public/renderer/content_renderer_client.h" |
| #include "content/renderer/pepper/host_globals.h" |
| +#include "content/renderer/pepper/pepper_file_ref_renderer_host.h" |
| #include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
| -#include "content/renderer/pepper/ppb_file_ref_impl.h" |
| +#include "content/renderer/pepper/plugin_module.h" |
| #include "content/renderer/pepper/quota_file_io.h" |
| +#include "content/renderer/pepper/renderer_ppapi_host_impl.h" |
| #include "content/renderer/render_thread_impl.h" |
| #include "ppapi/c/pp_errors.h" |
| #include "ppapi/c/ppb_file_io.h" |
| @@ -37,7 +39,6 @@ using ppapi::FileIOStateManager; |
| using ppapi::PPTimeToTime; |
| using ppapi::host::ReplyMessageContext; |
| using ppapi::thunk::EnterResourceNoLock; |
| -using ppapi::thunk::PPB_FileRef_API; |
| namespace { |
| @@ -137,6 +138,7 @@ PepperFileIOHost::PepperFileIOHost(RendererPpapiHost* host, |
| PP_Resource resource) |
| : ResourceHost(host->GetPpapiHost(), instance, resource), |
| renderer_ppapi_host_(host), |
| + plugin_instance_(HostGlobals::Get()->GetInstance(instance)), |
| file_(base::kInvalidPlatformFileValue), |
| file_system_type_(PP_FILESYSTEMTYPE_INVALID), |
| quota_policy_(quota::kQuotaLimitTypeUnknown), |
| @@ -229,25 +231,19 @@ int32_t PepperFileIOHost::OnHostMsgOpen( |
| return PP_ERROR_BADARGUMENT; |
| } |
| - EnterResourceNoLock<PPB_FileRef_API> enter(file_ref_resource, true); |
| - if (enter.failed()) |
| + ppapi::host::ResourceHost* resource_host = |
| + renderer_ppapi_host_->GetPpapiHost()->GetResourceHost(file_ref_resource); |
| + if (!resource_host->IsFileRefHost()) |
|
yzshen1
2013/09/04 18:31:49
Please also check NULL.
teravest
2013/09/04 19:28:46
Done.
|
| return PP_ERROR_BADRESOURCE; |
| + PepperFileRefRendererHost* file_ref_host = |
| + static_cast<PepperFileRefRendererHost*>(resource_host); |
| - PPB_FileRef_API* file_ref_api = enter.object(); |
| - PP_FileSystemType type = file_ref_api->GetFileSystemType(); |
| - if (type != PP_FILESYSTEMTYPE_LOCALPERSISTENT && |
| - type != PP_FILESYSTEMTYPE_LOCALTEMPORARY && |
| - type != PP_FILESYSTEMTYPE_EXTERNAL && |
| - type != PP_FILESYSTEMTYPE_ISOLATED) |
| - return PP_ERROR_FAILED; |
| - file_system_type_ = type; |
| - |
| - PPB_FileRef_Impl* file_ref = static_cast<PPB_FileRef_Impl*>(file_ref_api); |
| - if (file_ref->HasValidFileSystem()) { |
| - file_system_url_ = file_ref->GetFileSystemURL(); |
| - |
| + file_system_type_ = file_ref_host->GetFileSystemType(); |
| + if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) { |
| + file_system_url_ = file_ref_host->GetFileSystemURL(); |
| FileSystemDispatcher* file_system_dispatcher = |
| ChildThread::current()->file_system_dispatcher(); |
| + |
| AsyncOpenFileSystemURLCallback callback = base::Bind( |
| &PepperFileIOHost::ExecutePlatformOpenFileSystemURLCallback, |
| weak_factory_.GetWeakPtr(), |
| @@ -257,16 +253,16 @@ int32_t PepperFileIOHost::OnHostMsgOpen( |
| base::Bind(&DidOpenFileSystemURL, callback), |
| base::Bind(&DidFailOpenFileSystemURL, callback)); |
| } else { |
| - if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) |
| - return PP_ERROR_FAILED; |
| int message_id = pending_async_open_files_.Add(new AsyncOpenFileCallback( |
| base::Bind(&PepperFileIOHost::ExecutePlatformOpenFileCallback, |
| weak_factory_.GetWeakPtr(), |
| context->MakeReplyMessageContext()))); |
| RenderThreadImpl::current()->Send(new ViewHostMsg_AsyncOpenPepperFile( |
| - routing_id_, file_ref->GetSystemPath(), open_flags, message_id)); |
| + routing_id_, |
| + file_ref_host->GetExternalFilePath(), |
| + open_flags_, |
| + message_id)); |
| } |
| - |
| state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); |
| return PP_OK_COMPLETIONPENDING; |
| } |