Index: ppapi/proxy/ppb_file_ref_proxy.cc |
diff --git a/ppapi/proxy/ppb_file_ref_proxy.cc b/ppapi/proxy/ppb_file_ref_proxy.cc |
index 9ad0635b331d19701f578b0f1baf8ee8e367b405..0cf26bdbe318aa3b86246b35799b352def2eac79 100644 |
--- a/ppapi/proxy/ppb_file_ref_proxy.cc |
+++ b/ppapi/proxy/ppb_file_ref_proxy.cc |
@@ -12,7 +12,7 @@ |
#include "ppapi/proxy/plugin_dispatcher.h" |
#include "ppapi/proxy/ppapi_messages.h" |
#include "ppapi/proxy/serialized_var.h" |
-#include "ppapi/thunk/ppb_file_ref_api.h" |
+#include "ppapi/shared_impl/file_ref_impl.h" |
#include "ppapi/thunk/resource_creation_api.h" |
#include "ppapi/thunk/thunk.h" |
@@ -33,18 +33,12 @@ InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher, |
} // namespace |
-class FileRef : public Resource, public PPB_FileRef_API { |
+class FileRef : public FileRefImpl { |
public: |
- explicit FileRef(const PPBFileRef_CreateInfo& info); |
+ explicit FileRef(const PPB_FileRef_CreateInfo& info); |
virtual ~FileRef(); |
- // Resource overrides. |
- virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE; |
- |
- // PPB_FileRef_API implementation. |
- virtual PP_FileSystemType GetFileSystemType() const OVERRIDE; |
- virtual PP_Var GetName() const OVERRIDE; |
- virtual PP_Var GetPath() const OVERRIDE; |
+ // PPB_FileRef_API implementation (not provided by FileRefImpl). |
virtual PP_Resource GetParent() OVERRIDE; |
virtual int32_t MakeDirectory(PP_Bool make_ancestors, |
PP_CompletionCallback callback) OVERRIDE; |
@@ -60,50 +54,18 @@ class FileRef : public Resource, public PPB_FileRef_API { |
return PluginDispatcher::GetForResource(this); |
} |
- PP_FileSystemType file_system_type_; |
- PP_Var path_; |
- PP_Var name_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FileRef); |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(FileRef); |
}; |
-FileRef::FileRef(const PPBFileRef_CreateInfo& info) |
- : Resource(info.resource) { |
- Dispatcher* dispatcher = PluginDispatcher::GetForResource(this); |
- |
- file_system_type_ = static_cast<PP_FileSystemType>(info.file_system_type); |
- |
- name_ = ReceiveSerializedVarReturnValue(info.name).Return(dispatcher); |
- path_ = ReceiveSerializedVarReturnValue(info.path).Return(dispatcher); |
+FileRef::FileRef(const PPB_FileRef_CreateInfo& info) |
+ : FileRefImpl(FileRefImpl::InitAsProxy(), info) { |
} |
FileRef::~FileRef() { |
- PluginVarTracker& var_tracker = |
- PluginResourceTracker::GetInstance()->var_tracker(); |
- var_tracker.ReleaseVar(path_); |
- var_tracker.ReleaseVar(name_); |
-} |
- |
-PPB_FileRef_API* FileRef::AsPPB_FileRef_API() { |
- return this; |
-} |
- |
-PP_FileSystemType FileRef::GetFileSystemType() const { |
- return file_system_type_; |
-} |
- |
-PP_Var FileRef::GetName() const { |
- PluginResourceTracker::GetInstance()->var_tracker().AddRefVar(name_); |
- return name_; |
-} |
- |
-PP_Var FileRef::GetPath() const { |
- PluginResourceTracker::GetInstance()->var_tracker().AddRefVar(path_); |
- return path_; |
} |
PP_Resource FileRef::GetParent() { |
- PPBFileRef_CreateInfo create_info; |
+ PPB_FileRef_CreateInfo create_info; |
GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_GetParent( |
INTERFACE_ID_PPB_FILE_REF, host_resource(), &create_info)); |
return PPB_FileRef_Proxy::DeserializeFileRef(create_info); |
@@ -176,7 +138,7 @@ PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system, |
if (!file_system_object) |
return 0; |
- PPBFileRef_CreateInfo create_info; |
+ PPB_FileRef_CreateInfo create_info; |
PluginDispatcher::GetForResource(file_system_object)->Send( |
new PpapiHostMsg_PPBFileRef_Create( |
INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(), |
@@ -200,35 +162,15 @@ bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) { |
} |
void PPB_FileRef_Proxy::SerializeFileRef(PP_Resource file_ref, |
- PPBFileRef_CreateInfo* result) { |
+ PPB_FileRef_CreateInfo* result) { |
EnterResourceNoLock<PPB_FileRef_API> enter(file_ref, false); |
- if (enter.failed()) { |
- NOTREACHED(); |
- return; |
- } |
- |
- // We need the instance out of the resource for serializing back to the |
- // plugin. This code can only run in the host. |
- if (dispatcher()->IsPlugin()) { |
- NOTREACHED(); |
- return; |
- } |
- HostDispatcher* host_dispatcher = static_cast<HostDispatcher*>(dispatcher()); |
- PP_Instance instance = |
- host_dispatcher->ppb_proxy()->GetInstanceForResource(file_ref); |
- |
- result->resource.SetHostResource(instance, file_ref); |
- result->file_system_type = |
- static_cast<int>(enter.object()->GetFileSystemType()); |
- result->path = SerializedVarReturnValue::Convert(dispatcher(), |
- enter.object()->GetPath()); |
- result->name = SerializedVarReturnValue::Convert(dispatcher(), |
- enter.object()->GetName()); |
+ if (enter.succeeded()) |
+ *result = enter.object()->GetCreateInfo(); |
} |
// static |
PP_Resource PPB_FileRef_Proxy::DeserializeFileRef( |
- const PPBFileRef_CreateInfo& serialized) { |
+ const PPB_FileRef_CreateInfo& serialized) { |
if (serialized.resource.is_null()) |
return 0; // Resource invalid. |
return (new FileRef(serialized))->GetReference(); |
@@ -236,7 +178,7 @@ PP_Resource PPB_FileRef_Proxy::DeserializeFileRef( |
void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, |
const std::string& path, |
- PPBFileRef_CreateInfo* result) { |
+ PPB_FileRef_CreateInfo* result) { |
EnterFunctionNoLock<ResourceCreationAPI> enter(file_system.instance(), true); |
if (enter.failed()) |
return; |
@@ -248,7 +190,7 @@ void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, |
} |
void PPB_FileRef_Proxy::OnMsgGetParent(const HostResource& host_resource, |
- PPBFileRef_CreateInfo* result) { |
+ PPB_FileRef_CreateInfo* result) { |
EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource); |
if (enter.succeeded()) |
SerializeFileRef(enter.object()->GetParent(), result); |