| 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 1690e2e3d0de4a8b2030214989e89ead61c31ed9..7ed173431ea581aeedcad2c765a7bc9e2adf49ee 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),
|
| @@ -224,25 +226,19 @@ int32_t PepperFileIOHost::OnHostMsgOpen(
|
| if (!ppapi::PepperFileOpenFlagsToPlatformFileFlags(open_flags, NULL))
|
| 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 || !resource_host->IsFileRefHost())
|
| 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(),
|
| @@ -252,16 +248,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;
|
| }
|
|
|