Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(810)

Side by Side Diff: ppapi/proxy/ppb_file_ref_proxy.cc

Issue 7629017: Add a unified resource tracker shared between the proxy and the impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/ppb_file_ref_proxy.h" 5 #include "ppapi/proxy/ppb_file_ref_proxy.h"
6 6
7 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/ppb_file_ref.h" 8 #include "ppapi/c/ppb_file_ref.h"
9 #include "ppapi/c/private/ppb_proxy_private.h" 9 #include "ppapi/c/private/ppb_proxy_private.h"
10 #include "ppapi/proxy/enter_proxy.h" 10 #include "ppapi/proxy/enter_proxy.h"
11 #include "ppapi/proxy/host_dispatcher.h" 11 #include "ppapi/proxy/host_dispatcher.h"
12 #include "ppapi/proxy/plugin_dispatcher.h" 12 #include "ppapi/proxy/plugin_dispatcher.h"
13 #include "ppapi/proxy/plugin_resource.h"
14 #include "ppapi/proxy/ppapi_messages.h" 13 #include "ppapi/proxy/ppapi_messages.h"
15 #include "ppapi/proxy/serialized_var.h" 14 #include "ppapi/proxy/serialized_var.h"
16 #include "ppapi/thunk/ppb_file_ref_api.h" 15 #include "ppapi/thunk/ppb_file_ref_api.h"
17 #include "ppapi/thunk/resource_creation_api.h" 16 #include "ppapi/thunk/resource_creation_api.h"
18 #include "ppapi/thunk/thunk.h" 17 #include "ppapi/thunk/thunk.h"
19 18
20 using ppapi::HostResource; 19 using ppapi::HostResource;
20 using ppapi::Resource;
21 using ppapi::thunk::EnterFunctionNoLock; 21 using ppapi::thunk::EnterFunctionNoLock;
22 using ppapi::thunk::EnterResourceNoLock; 22 using ppapi::thunk::EnterResourceNoLock;
23 using ppapi::thunk::PPB_FileRef_API; 23 using ppapi::thunk::PPB_FileRef_API;
24 using ppapi::thunk::ResourceCreationAPI; 24 using ppapi::thunk::ResourceCreationAPI;
25 25
26 namespace pp { 26 namespace pp {
27 namespace proxy { 27 namespace proxy {
28 28
29 namespace { 29 namespace {
30 30
31 InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher, 31 InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher,
32 const void* target_interface) { 32 const void* target_interface) {
33 return new PPB_FileRef_Proxy(dispatcher, target_interface); 33 return new PPB_FileRef_Proxy(dispatcher, target_interface);
34 } 34 }
35 35
36 } // namespace 36 } // namespace
37 37
38 class FileRef : public PluginResource, public PPB_FileRef_API { 38 class FileRef : public Resource, public PPB_FileRef_API {
39 public: 39 public:
40 explicit FileRef(const PPBFileRef_CreateInfo& info); 40 explicit FileRef(const PPBFileRef_CreateInfo& info);
41 virtual ~FileRef(); 41 virtual ~FileRef();
42 42
43 // ResourceObjectBase overrides. 43 // Resource overrides.
44 virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE; 44 virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE;
45 45
46 // PPB_FileRef_API implementation. 46 // PPB_FileRef_API implementation.
47 virtual PP_FileSystemType GetFileSystemType() const OVERRIDE; 47 virtual PP_FileSystemType GetFileSystemType() const OVERRIDE;
48 virtual PP_Var GetName() const OVERRIDE; 48 virtual PP_Var GetName() const OVERRIDE;
49 virtual PP_Var GetPath() const OVERRIDE; 49 virtual PP_Var GetPath() const OVERRIDE;
50 virtual PP_Resource GetParent() OVERRIDE; 50 virtual PP_Resource GetParent() OVERRIDE;
51 virtual int32_t MakeDirectory(PP_Bool make_ancestors, 51 virtual int32_t MakeDirectory(PP_Bool make_ancestors,
52 PP_CompletionCallback callback) OVERRIDE; 52 PP_CompletionCallback callback) OVERRIDE;
53 virtual int32_t Touch(PP_Time last_access_time, 53 virtual int32_t Touch(PP_Time last_access_time,
54 PP_Time last_modified_time, 54 PP_Time last_modified_time,
55 PP_CompletionCallback callback) OVERRIDE; 55 PP_CompletionCallback callback) OVERRIDE;
56 virtual int32_t Delete(PP_CompletionCallback callback) OVERRIDE; 56 virtual int32_t Delete(PP_CompletionCallback callback) OVERRIDE;
57 virtual int32_t Rename(PP_Resource new_file_ref, 57 virtual int32_t Rename(PP_Resource new_file_ref,
58 PP_CompletionCallback callback) OVERRIDE; 58 PP_CompletionCallback callback) OVERRIDE;
59 59
60 private: 60 private:
61 PluginDispatcher* GetDispatcher() const {
62 return PluginDispatcher::GetForResource(this);
63 }
64
61 PP_FileSystemType file_system_type_; 65 PP_FileSystemType file_system_type_;
62 PP_Var path_; 66 PP_Var path_;
63 PP_Var name_; 67 PP_Var name_;
64 68
65 DISALLOW_COPY_AND_ASSIGN(FileRef); 69 DISALLOW_COPY_AND_ASSIGN(FileRef);
66 }; 70 };
67 71
68 FileRef::FileRef(const PPBFileRef_CreateInfo& info) 72 FileRef::FileRef(const PPBFileRef_CreateInfo& info)
69 : PluginResource(info.resource) { 73 : Resource(info.resource) {
70 Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance()); 74 Dispatcher* dispatcher = PluginDispatcher::GetForInstance(pp_instance());
71 75
72 file_system_type_ = static_cast<PP_FileSystemType>(info.file_system_type); 76 file_system_type_ = static_cast<PP_FileSystemType>(info.file_system_type);
73 77
74 name_ = ReceiveSerializedVarReturnValue(info.name).Return(dispatcher); 78 name_ = ReceiveSerializedVarReturnValue(info.name).Return(dispatcher);
75 path_ = ReceiveSerializedVarReturnValue(info.path).Return(dispatcher); 79 path_ = ReceiveSerializedVarReturnValue(info.path).Return(dispatcher);
76 } 80 }
77 81
78 FileRef::~FileRef() { 82 FileRef::~FileRef() {
79 PluginVarTracker& var_tracker = 83 PluginVarTracker& var_tracker =
80 PluginResourceTracker::GetInstance()->var_tracker(); 84 PluginResourceTracker::GetInstance()->var_tracker();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 131
128 int32_t FileRef::Delete(PP_CompletionCallback callback) { 132 int32_t FileRef::Delete(PP_CompletionCallback callback) {
129 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Delete( 133 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Delete(
130 INTERFACE_ID_PPB_FILE_REF, host_resource(), 134 INTERFACE_ID_PPB_FILE_REF, host_resource(),
131 GetDispatcher()->callback_tracker().SendCallback(callback))); 135 GetDispatcher()->callback_tracker().SendCallback(callback)));
132 return PP_OK_COMPLETIONPENDING; 136 return PP_OK_COMPLETIONPENDING;
133 } 137 }
134 138
135 int32_t FileRef::Rename(PP_Resource new_file_ref, 139 int32_t FileRef::Rename(PP_Resource new_file_ref,
136 PP_CompletionCallback callback) { 140 PP_CompletionCallback callback) {
137 PluginResource* new_file_ref_object = 141 Resource* new_file_ref_object =
138 PluginResourceTracker::GetInstance()->GetResourceObject(new_file_ref); 142 PluginResourceTracker::GetInstance()->GetResource(new_file_ref);
139 if (!new_file_ref_object || 143 if (!new_file_ref_object ||
140 new_file_ref_object->host_resource().instance() != instance()) 144 new_file_ref_object->host_resource().instance() != pp_instance())
141 return PP_ERROR_BADRESOURCE; 145 return PP_ERROR_BADRESOURCE;
142 146
143 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Rename( 147 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Rename(
144 INTERFACE_ID_PPB_FILE_REF, host_resource(), 148 INTERFACE_ID_PPB_FILE_REF, host_resource(),
145 new_file_ref_object->host_resource(), 149 new_file_ref_object->host_resource(),
146 GetDispatcher()->callback_tracker().SendCallback(callback))); 150 GetDispatcher()->callback_tracker().SendCallback(callback)));
147 return PP_OK_COMPLETIONPENDING; 151 return PP_OK_COMPLETIONPENDING;
148 } 152 }
149 153
150 PPB_FileRef_Proxy::PPB_FileRef_Proxy(Dispatcher* dispatcher, 154 PPB_FileRef_Proxy::PPB_FileRef_Proxy(Dispatcher* dispatcher,
(...skipping 11 matching lines...) Expand all
162 INTERFACE_ID_PPB_FILE_REF, 166 INTERFACE_ID_PPB_FILE_REF,
163 false, 167 false,
164 &CreateFileRefProxy, 168 &CreateFileRefProxy,
165 }; 169 };
166 return &info; 170 return &info;
167 } 171 }
168 172
169 // static 173 // static
170 PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system, 174 PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system,
171 const char* path) { 175 const char* path) {
172 PluginResource* file_system_object = 176 Resource* file_system_object =
173 PluginResourceTracker::GetInstance()->GetResourceObject(file_system); 177 PluginResourceTracker::GetInstance()->GetResource(file_system);
174 if (!file_system_object) 178 if (!file_system_object)
175 return 0; 179 return 0;
176 180
177 PPBFileRef_CreateInfo create_info; 181 PPBFileRef_CreateInfo create_info;
178 file_system_object->GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Create( 182 PluginDispatcher::GetForResource(file_system_object)->Send(
179 INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(), 183 new PpapiHostMsg_PPBFileRef_Create(
180 path, &create_info)); 184 INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(),
185 path, &create_info));
181 return PPB_FileRef_Proxy::DeserializeFileRef(create_info); 186 return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
182 } 187 }
183 188
184 bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) { 189 bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) {
185 bool handled = true; 190 bool handled = true;
186 IPC_BEGIN_MESSAGE_MAP(PPB_FileRef_Proxy, msg) 191 IPC_BEGIN_MESSAGE_MAP(PPB_FileRef_Proxy, msg)
187 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Create, OnMsgCreate) 192 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Create, OnMsgCreate)
188 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_GetParent, OnMsgGetParent) 193 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_GetParent, OnMsgGetParent)
189 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_MakeDirectory, 194 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_MakeDirectory,
190 OnMsgMakeDirectory) 195 OnMsgMakeDirectory)
(...skipping 30 matching lines...) Expand all
221 enter.object()->GetPath()); 226 enter.object()->GetPath());
222 result->name = SerializedVarReturnValue::Convert(dispatcher(), 227 result->name = SerializedVarReturnValue::Convert(dispatcher(),
223 enter.object()->GetName()); 228 enter.object()->GetName());
224 } 229 }
225 230
226 // static 231 // static
227 PP_Resource PPB_FileRef_Proxy::DeserializeFileRef( 232 PP_Resource PPB_FileRef_Proxy::DeserializeFileRef(
228 const PPBFileRef_CreateInfo& serialized) { 233 const PPBFileRef_CreateInfo& serialized) {
229 if (serialized.resource.is_null()) 234 if (serialized.resource.is_null())
230 return 0; // Resource invalid. 235 return 0; // Resource invalid.
231 236 return (new FileRef(serialized))->GetReference();
232 return PluginResourceTracker::GetInstance()->AddResource(
233 new FileRef(serialized));
234 } 237 }
235 238
236 void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, 239 void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system,
237 const std::string& path, 240 const std::string& path,
238 PPBFileRef_CreateInfo* result) { 241 PPBFileRef_CreateInfo* result) {
239 EnterFunctionNoLock<ResourceCreationAPI> enter(file_system.instance(), true); 242 EnterFunctionNoLock<ResourceCreationAPI> enter(file_system.instance(), true);
240 if (enter.failed()) 243 if (enter.failed())
241 return; 244 return;
242 PP_Resource resource = enter.functions()->CreateFileRef( 245 PP_Resource resource = enter.functions()->CreateFileRef(
243 file_system.host_resource(), path.c_str()); 246 file_system.host_resource(), path.c_str());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return; 300 return;
298 PP_CompletionCallback callback = ReceiveCallback(serialized_callback); 301 PP_CompletionCallback callback = ReceiveCallback(serialized_callback);
299 int32_t result = enter.object()->Rename(new_file_ref.host_resource(), 302 int32_t result = enter.object()->Rename(new_file_ref.host_resource(),
300 callback); 303 callback);
301 if (result != PP_OK_COMPLETIONPENDING) 304 if (result != PP_OK_COMPLETIONPENDING)
302 PP_RunCompletionCallback(&callback, result); 305 PP_RunCompletionCallback(&callback, result);
303 } 306 }
304 307
305 } // namespace proxy 308 } // namespace proxy
306 } // namespace pp 309 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698