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

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

Issue 7082036: Convert more interfaces to the new thunk system. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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/dev/ppb_file_ref_dev.h" 7 #include "ppapi/c/dev/ppb_file_ref_dev.h"
8 #include "ppapi/c/pp_errors.h" 8 #include "ppapi/c/pp_errors.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/host_dispatcher.h" 11 #include "ppapi/proxy/host_dispatcher.h"
11 #include "ppapi/proxy/plugin_dispatcher.h" 12 #include "ppapi/proxy/plugin_dispatcher.h"
12 #include "ppapi/proxy/plugin_resource.h" 13 #include "ppapi/proxy/plugin_resource.h"
13 #include "ppapi/proxy/ppapi_messages.h" 14 #include "ppapi/proxy/ppapi_messages.h"
14 #include "ppapi/proxy/serialized_var.h" 15 #include "ppapi/proxy/serialized_var.h"
16 #include "ppapi/thunk/ppb_file_ref_api.h"
17 #include "ppapi/thunk/resource_creation_api.h"
18 #include "ppapi/thunk/thunk.h"
19
20 using ppapi::thunk::EnterFunctionNoLock;
21 using ppapi::thunk::EnterResourceNoLock;
22 using ppapi::thunk::PPB_FileRef_API;
23 using ppapi::thunk::ResourceCreationAPI;
15 24
16 namespace pp { 25 namespace pp {
17 namespace proxy { 26 namespace proxy {
18 27
19 // This object maintains most of the state of the ref in the plugin for fast 28 namespace {
20 // querying. It's all set in the constructor from the "create info" sent from 29
21 // the host. 30 InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher,
22 class FileRef : public PluginResource { 31 const void* target_interface) {
32 return new PPB_FileRef_Proxy(dispatcher, target_interface);
33 }
34
35 } // namespace
36
37 class FileRef : public PluginResource, public PPB_FileRef_API {
23 public: 38 public:
24 FileRef(const PPBFileRef_CreateInfo& info); 39 explicit FileRef(const PPBFileRef_CreateInfo& info);
25 virtual ~FileRef(); 40 virtual ~FileRef();
26 41
27 virtual FileRef* AsFileRef(); 42 // ResourceObjectBase overrides.
43 virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE;
28 44
29 PP_FileSystemType_Dev file_system_type() const { return file_system_type_; } 45 // PPB_FileRef_API implementation.
30 const PP_Var& path() const { return path_; } 46 virtual PP_FileSystemType_Dev GetFileSystemType() const OVERRIDE;
31 const PP_Var& name() const { return name_; } 47 virtual PP_Var GetName() const OVERRIDE;
48 virtual PP_Var GetPath() const OVERRIDE;
49 virtual PP_Resource GetParent() OVERRIDE;
50 virtual int32_t MakeDirectory(PP_Bool make_ancestors,
51 PP_CompletionCallback callback) OVERRIDE;
52 virtual int32_t Touch(PP_Time last_access_time,
53 PP_Time last_modified_time,
54 PP_CompletionCallback callback) OVERRIDE;
55 virtual int32_t Delete(PP_CompletionCallback callback) OVERRIDE;
56 virtual int32_t Rename(PP_Resource new_file_ref,
57 PP_CompletionCallback callback) OVERRIDE;
32 58
33 private: 59 private:
34 PP_FileSystemType_Dev file_system_type_; 60 PP_FileSystemType_Dev file_system_type_;
35 PP_Var path_; 61 PP_Var path_;
36 PP_Var name_; 62 PP_Var name_;
37 63
38 DISALLOW_COPY_AND_ASSIGN(FileRef); 64 DISALLOW_COPY_AND_ASSIGN(FileRef);
39 }; 65 };
40 66
41 FileRef::FileRef(const PPBFileRef_CreateInfo& info) 67 FileRef::FileRef(const PPBFileRef_CreateInfo& info)
42 : PluginResource(info.resource) { 68 : PluginResource(info.resource) {
43 Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance()); 69 Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance());
44 70
45 file_system_type_ = static_cast<PP_FileSystemType_Dev>(info.file_system_type); 71 file_system_type_ = static_cast<PP_FileSystemType_Dev>(info.file_system_type);
46 72
47 name_ = ReceiveSerializedVarReturnValue(info.name).Return(dispatcher); 73 name_ = ReceiveSerializedVarReturnValue(info.name).Return(dispatcher);
48 path_ = ReceiveSerializedVarReturnValue(info.path).Return(dispatcher); 74 path_ = ReceiveSerializedVarReturnValue(info.path).Return(dispatcher);
49 } 75 }
50 76
51 FileRef::~FileRef() { 77 FileRef::~FileRef() {
52 PluginVarTracker::GetInstance()->Release(path_); 78 PluginVarTracker::GetInstance()->Release(path_);
53 PluginVarTracker::GetInstance()->Release(name_); 79 PluginVarTracker::GetInstance()->Release(name_);
54 } 80 }
55 81
56 FileRef* FileRef::AsFileRef() { 82 PPB_FileRef_API* FileRef::AsPPB_FileRef_API() {
57 return this; 83 return this;
58 } 84 }
59 85
60 namespace { 86 PP_FileSystemType_Dev FileRef::GetFileSystemType() const {
61 87 return file_system_type_;
62 bool FileRefAndDispatcherForResource(PP_Resource resource,
63 FileRef** file_ref,
64 Dispatcher** dispatcher) {
65 *file_ref = PluginResource::GetAs<FileRef>(resource);
66 if (!file_ref)
67 return false;
68 *dispatcher = PluginDispatcher::GetForInstance((*file_ref)->instance());
69 return !!(*dispatcher);
70 } 88 }
71 89
72 PP_Resource Create(PP_Resource file_system, const char* path) { 90 PP_Var FileRef::GetName() const {
73 PluginResource* file_system_object = 91 PluginVarTracker::GetInstance()->AddRef(name_);
74 PluginResourceTracker::GetInstance()->GetResourceObject(file_system); 92 return name_;
75 if (!file_system_object) 93 }
76 return 0;
77 94
78 Dispatcher* dispatcher = 95 PP_Var FileRef::GetPath() const {
79 PluginDispatcher::GetForInstance(file_system_object->instance()); 96 PluginVarTracker::GetInstance()->AddRef(path_);
80 if (!dispatcher) 97 return path_;
81 return 0; 98 }
82 99
100 PP_Resource FileRef::GetParent() {
83 PPBFileRef_CreateInfo create_info; 101 PPBFileRef_CreateInfo create_info;
84 dispatcher->Send(new PpapiHostMsg_PPBFileRef_Create( 102 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_GetParent(
85 INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(), 103 INTERFACE_ID_PPB_FILE_REF, host_resource(), &create_info));
86 path, &create_info));
87 return PPB_FileRef_Proxy::DeserializeFileRef(create_info); 104 return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
88 } 105 }
89 106
90 PP_Bool IsFileRef(PP_Resource resource) { 107 int32_t FileRef::MakeDirectory(PP_Bool make_ancestors,
91 FileRef* object = PluginResource::GetAs<FileRef>(resource); 108 PP_CompletionCallback callback) {
92 return BoolToPPBool(!!object); 109 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_MakeDirectory(
93 } 110 INTERFACE_ID_PPB_FILE_REF, host_resource(), make_ancestors,
94 111 GetDispatcher()->callback_tracker().SendCallback(callback)));
95 PP_FileSystemType_Dev GetFileSystemType(PP_Resource file_ref) {
96 FileRef* object = PluginResource::GetAs<FileRef>(file_ref);
97 if (!object)
98 return PP_FILESYSTEMTYPE_EXTERNAL;
99 return object->file_system_type();
100 }
101
102 PP_Var GetName(PP_Resource file_ref) {
103 FileRef* object = PluginResource::GetAs<FileRef>(file_ref);
104 if (!object)
105 return PP_MakeUndefined();
106
107 PluginVarTracker::GetInstance()->AddRef(object->name());
108 return object->name();
109 }
110
111 PP_Var GetPath(PP_Resource file_ref) {
112 FileRef* object = PluginResource::GetAs<FileRef>(file_ref);
113 if (!object)
114 return PP_MakeUndefined();
115
116 PluginVarTracker::GetInstance()->AddRef(object->path());
117 return object->path();
118 }
119
120 PP_Resource GetParent(PP_Resource file_ref) {
121 FileRef* object;
122 Dispatcher* dispatcher;
123 if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher))
124 return 0;
125
126 PPBFileRef_CreateInfo create_info;
127 dispatcher->Send(new PpapiHostMsg_PPBFileRef_GetParent(
128 INTERFACE_ID_PPB_FILE_REF, object->host_resource(), &create_info));
129 return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
130 }
131
132 int32_t MakeDirectory(PP_Resource directory_ref,
133 PP_Bool make_ancestors,
134 struct PP_CompletionCallback callback) {
135 FileRef* object;
136 Dispatcher* dispatcher;
137 if (!FileRefAndDispatcherForResource(directory_ref, &object, &dispatcher))
138 return PP_ERROR_BADRESOURCE;
139
140 dispatcher->Send(new PpapiHostMsg_PPBFileRef_MakeDirectory(
141 INTERFACE_ID_PPB_FILE_REF, object->host_resource(), make_ancestors,
142 dispatcher->callback_tracker().SendCallback(callback)));
143 return PP_OK_COMPLETIONPENDING; 112 return PP_OK_COMPLETIONPENDING;
144 } 113 }
145 114
146 int32_t Touch(PP_Resource file_ref, 115 int32_t FileRef::Touch(PP_Time last_access_time,
147 PP_Time last_access_time, 116 PP_Time last_modified_time,
148 PP_Time last_modified_time, 117 PP_CompletionCallback callback) {
149 struct PP_CompletionCallback callback) { 118 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Touch(
150 FileRef* object; 119 INTERFACE_ID_PPB_FILE_REF, host_resource(),
151 Dispatcher* dispatcher;
152 if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher))
153 return PP_ERROR_BADRESOURCE;
154
155 dispatcher->Send(new PpapiHostMsg_PPBFileRef_Touch(
156 INTERFACE_ID_PPB_FILE_REF, object->host_resource(),
157 last_access_time, last_modified_time, 120 last_access_time, last_modified_time,
158 dispatcher->callback_tracker().SendCallback(callback))); 121 GetDispatcher()->callback_tracker().SendCallback(callback)));
159 return PP_OK_COMPLETIONPENDING; 122 return PP_OK_COMPLETIONPENDING;
160 } 123 }
161 124
162 int32_t Delete(PP_Resource file_ref, 125 int32_t FileRef::Delete(PP_CompletionCallback callback) {
163 struct PP_CompletionCallback callback) { 126 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Delete(
164 FileRef* object; 127 INTERFACE_ID_PPB_FILE_REF, host_resource(),
165 Dispatcher* dispatcher; 128 GetDispatcher()->callback_tracker().SendCallback(callback)));
166 if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher))
167 return PP_ERROR_BADRESOURCE;
168
169 dispatcher->Send(new PpapiHostMsg_PPBFileRef_Delete(
170 INTERFACE_ID_PPB_FILE_REF, object->host_resource(),
171 dispatcher->callback_tracker().SendCallback(callback)));
172 return PP_OK_COMPLETIONPENDING; 129 return PP_OK_COMPLETIONPENDING;
173 } 130 }
174 131
175 int32_t Rename(PP_Resource file_ref, 132 int32_t FileRef::Rename(PP_Resource new_file_ref,
176 PP_Resource new_file_ref, 133 PP_CompletionCallback callback) {
177 struct PP_CompletionCallback callback) { 134 PluginResource* new_file_ref_object =
178 FileRef* obj1; 135 PluginResourceTracker::GetInstance()->GetResourceObject(new_file_ref);
179 Dispatcher* dispatcher1; 136 if (!new_file_ref_object ||
180 if (!FileRefAndDispatcherForResource(file_ref, &obj1, &dispatcher1)) 137 new_file_ref_object->host_resource().instance() != instance())
181 return PP_ERROR_BADRESOURCE; 138 return PP_ERROR_BADRESOURCE;
182 139
183 FileRef* obj2; 140 GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Rename(
184 Dispatcher* dispatcher2; 141 INTERFACE_ID_PPB_FILE_REF, host_resource(),
185 if (!FileRefAndDispatcherForResource(new_file_ref, &obj2, &dispatcher2)) 142 new_file_ref_object->host_resource(),
186 return PP_ERROR_BADRESOURCE; 143 GetDispatcher()->callback_tracker().SendCallback(callback)));
187
188 if (obj1->instance() != obj2->instance())
189 return PP_ERROR_BADRESOURCE;
190
191 dispatcher1->Send(new PpapiHostMsg_PPBFileRef_Rename(
192 INTERFACE_ID_PPB_FILE_REF, obj1->host_resource(),
193 obj2->host_resource(),
194 dispatcher1->callback_tracker().SendCallback(callback)));
195 return PP_OK_COMPLETIONPENDING; 144 return PP_OK_COMPLETIONPENDING;
196 } 145 }
197 146
198 const PPB_FileRef_Dev file_ref_interface = {
199 &Create,
200 &IsFileRef,
201 &GetFileSystemType,
202 &GetName,
203 &GetPath,
204 &GetParent,
205 &MakeDirectory,
206 &Touch,
207 &Delete,
208 &Rename
209 };
210
211 InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher,
212 const void* target_interface) {
213 return new PPB_FileRef_Proxy(dispatcher, target_interface);
214 }
215
216 } // namespace
217
218 PPB_FileRef_Proxy::PPB_FileRef_Proxy(Dispatcher* dispatcher, 147 PPB_FileRef_Proxy::PPB_FileRef_Proxy(Dispatcher* dispatcher,
219 const void* target_interface) 148 const void* target_interface)
220 : InterfaceProxy(dispatcher, target_interface) { 149 : InterfaceProxy(dispatcher, target_interface) {
221 } 150 }
222 151
223 PPB_FileRef_Proxy::~PPB_FileRef_Proxy() { 152 PPB_FileRef_Proxy::~PPB_FileRef_Proxy() {
224 } 153 }
225 154
226 const InterfaceProxy::Info* PPB_FileRef_Proxy::GetInfo() { 155 const InterfaceProxy::Info* PPB_FileRef_Proxy::GetInfo() {
227 static const Info info = { 156 static const Info info = {
228 &file_ref_interface, 157 ::ppapi::thunk::GetPPB_FileRef_Thunk(),
229 PPB_FILEREF_DEV_INTERFACE, 158 PPB_FILEREF_DEV_INTERFACE,
230 INTERFACE_ID_PPB_FILE_REF, 159 INTERFACE_ID_PPB_FILE_REF,
231 false, 160 false,
232 &CreateFileRefProxy, 161 &CreateFileRefProxy,
233 }; 162 };
234 return &info; 163 return &info;
235 } 164 }
236 165
166 // static
167 PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system,
168 const char* path) {
169 PluginResource* file_system_object =
170 PluginResourceTracker::GetInstance()->GetResourceObject(file_system);
171 if (!file_system_object)
172 return 0;
173
174 PPBFileRef_CreateInfo create_info;
175 file_system_object->GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Create(
176 INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(),
177 path, &create_info));
178 return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
179 }
180
237 bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) { 181 bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) {
238 bool handled = true; 182 bool handled = true;
239 IPC_BEGIN_MESSAGE_MAP(PPB_FileRef_Proxy, msg) 183 IPC_BEGIN_MESSAGE_MAP(PPB_FileRef_Proxy, msg)
240 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Create, OnMsgCreate) 184 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Create, OnMsgCreate)
241 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_GetParent, OnMsgGetParent) 185 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_GetParent, OnMsgGetParent)
242 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_MakeDirectory, 186 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_MakeDirectory,
243 OnMsgMakeDirectory) 187 OnMsgMakeDirectory)
244 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Touch, OnMsgTouch) 188 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Touch, OnMsgTouch)
245 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Delete, OnMsgDelete) 189 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Delete, OnMsgDelete)
246 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Rename, OnMsgRename) 190 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFileRef_Rename, OnMsgRename)
247 IPC_MESSAGE_UNHANDLED(handled = false) 191 IPC_MESSAGE_UNHANDLED(handled = false)
248 IPC_END_MESSAGE_MAP() 192 IPC_END_MESSAGE_MAP()
249 return handled; 193 return handled;
250 } 194 }
251 195
252 void PPB_FileRef_Proxy::SerializeFileRef(PP_Resource file_ref, 196 void PPB_FileRef_Proxy::SerializeFileRef(PP_Resource file_ref,
253 PPBFileRef_CreateInfo* result) { 197 PPBFileRef_CreateInfo* result) {
198 EnterResourceNoLock<PPB_FileRef_API> enter(file_ref, false);
199 if (enter.failed()) {
200 NOTREACHED();
201 return;
202 }
203
254 // We need the instance out of the resource for serializing back to the 204 // We need the instance out of the resource for serializing back to the
255 // plugin. This code can only run in the host. 205 // plugin. This code can only run in the host.
256 if (dispatcher()->IsPlugin()) { 206 if (dispatcher()->IsPlugin()) {
257 NOTREACHED(); 207 NOTREACHED();
258 return; 208 return;
259 } 209 }
260 HostDispatcher* host_dispatcher = static_cast<HostDispatcher*>(dispatcher()); 210 HostDispatcher* host_dispatcher = static_cast<HostDispatcher*>(dispatcher());
261 PP_Instance instance = 211 PP_Instance instance =
262 host_dispatcher->ppb_proxy()->GetInstanceForResource(file_ref); 212 host_dispatcher->ppb_proxy()->GetInstanceForResource(file_ref);
263 213
264 result->resource.SetHostResource(instance, file_ref); 214 result->resource.SetHostResource(instance, file_ref);
265 result->file_system_type = 215 result->file_system_type =
266 static_cast<int>(ppb_file_ref_target()->GetFileSystemType(file_ref)); 216 static_cast<int>(enter.object()->GetFileSystemType());
267 result->path = SerializedVarReturnValue::Convert( 217 result->path = SerializedVarReturnValue::Convert(dispatcher(),
268 dispatcher(), 218 enter.object()->GetPath());
269 ppb_file_ref_target()->GetPath(file_ref)); 219 result->name = SerializedVarReturnValue::Convert(dispatcher(),
270 result->name = SerializedVarReturnValue::Convert( 220 enter.object()->GetName());
271 dispatcher(),
272 ppb_file_ref_target()->GetName(file_ref));
273 } 221 }
274 222
275 // static 223 // static
276 PP_Resource PPB_FileRef_Proxy::DeserializeFileRef( 224 PP_Resource PPB_FileRef_Proxy::DeserializeFileRef(
277 const PPBFileRef_CreateInfo& serialized) { 225 const PPBFileRef_CreateInfo& serialized) {
278 if (serialized.resource.is_null()) 226 if (serialized.resource.is_null())
279 return 0; // Resource invalid. 227 return 0; // Resource invalid.
280 228
281 linked_ptr<FileRef> object(new FileRef(serialized)); 229 linked_ptr<FileRef> object(new FileRef(serialized));
282 return PluginResourceTracker::GetInstance()->AddResource(object); 230 return PluginResourceTracker::GetInstance()->AddResource(object);
283 } 231 }
284 232
285 void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, 233 void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system,
286 const std::string& path, 234 const std::string& path,
287 PPBFileRef_CreateInfo* result) { 235 PPBFileRef_CreateInfo* result) {
288 236 EnterFunctionNoLock<ResourceCreationAPI> enter(file_system.instance(), true);
289 PP_Resource resource = ppb_file_ref_target()->Create( 237 if (enter.failed())
238 return;
239 PP_Resource resource = enter.functions()->CreateFileRef(
290 file_system.host_resource(), path.c_str()); 240 file_system.host_resource(), path.c_str());
291 if (!resource) 241 if (!resource)
292 return; // CreateInfo default constructor initializes to 0. 242 return; // CreateInfo default constructor initializes to 0.
293 SerializeFileRef(resource, result); 243 SerializeFileRef(resource, result);
294 } 244 }
295 245
296 void PPB_FileRef_Proxy::OnMsgGetParent(const HostResource& host_resource, 246 void PPB_FileRef_Proxy::OnMsgGetParent(const HostResource& host_resource,
297 PPBFileRef_CreateInfo* result) { 247 PPBFileRef_CreateInfo* result) {
298 PP_Resource resource = ppb_file_ref_target()->GetParent( 248 EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource);
299 host_resource.host_resource()); 249 if (enter.succeeded())
300 SerializeFileRef(resource, result); 250 SerializeFileRef(enter.object()->GetParent(), result);
301 } 251 }
302 252
303 void PPB_FileRef_Proxy::OnMsgMakeDirectory(const HostResource& host_resource, 253 void PPB_FileRef_Proxy::OnMsgMakeDirectory(const HostResource& host_resource,
304 PP_Bool make_ancestors, 254 PP_Bool make_ancestors,
305 uint32_t serialized_callback) { 255 uint32_t serialized_callback) {
256 EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource);
257 if (enter.failed())
258 return;
306 PP_CompletionCallback callback = ReceiveCallback(serialized_callback); 259 PP_CompletionCallback callback = ReceiveCallback(serialized_callback);
307 int32_t result = 260 int32_t result = enter.object()->MakeDirectory(make_ancestors, callback);
308 ppb_file_ref_target()->MakeDirectory(host_resource.host_resource(),
309 make_ancestors, callback);
310 if (result != PP_OK_COMPLETIONPENDING) 261 if (result != PP_OK_COMPLETIONPENDING)
311 PP_RunCompletionCallback(&callback, result); 262 PP_RunCompletionCallback(&callback, result);
312 } 263 }
313 264
314 void PPB_FileRef_Proxy::OnMsgTouch(const HostResource& host_resource, 265 void PPB_FileRef_Proxy::OnMsgTouch(const HostResource& host_resource,
315 PP_Time last_access, 266 PP_Time last_access,
316 PP_Time last_modified, 267 PP_Time last_modified,
317 uint32_t serialized_callback) { 268 uint32_t serialized_callback) {
269 EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource);
270 if (enter.failed())
271 return;
318 PP_CompletionCallback callback = ReceiveCallback(serialized_callback); 272 PP_CompletionCallback callback = ReceiveCallback(serialized_callback);
319 int32_t result = 273 int32_t result = enter.object()->Touch(last_access, last_modified, callback);
320 ppb_file_ref_target()->Touch(host_resource.host_resource(),
321 last_access, last_modified, callback);
322 if (result != PP_OK_COMPLETIONPENDING) 274 if (result != PP_OK_COMPLETIONPENDING)
323 PP_RunCompletionCallback(&callback, result); 275 PP_RunCompletionCallback(&callback, result);
324 } 276 }
325 277
326 void PPB_FileRef_Proxy::OnMsgDelete(const HostResource& host_resource, 278 void PPB_FileRef_Proxy::OnMsgDelete(const HostResource& host_resource,
327 uint32_t serialized_callback) { 279 uint32_t serialized_callback) {
280 EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource);
281 if (enter.failed())
282 return;
328 PP_CompletionCallback callback = ReceiveCallback(serialized_callback); 283 PP_CompletionCallback callback = ReceiveCallback(serialized_callback);
329 int32_t result = 284 int32_t result = enter.object()->Delete(callback);
330 ppb_file_ref_target()->Delete(host_resource.host_resource(), callback);
331 if (result != PP_OK_COMPLETIONPENDING) 285 if (result != PP_OK_COMPLETIONPENDING)
332 PP_RunCompletionCallback(&callback, result); 286 PP_RunCompletionCallback(&callback, result);
333 } 287 }
334 288
335 void PPB_FileRef_Proxy::OnMsgRename(const HostResource& file_ref, 289 void PPB_FileRef_Proxy::OnMsgRename(const HostResource& file_ref,
336 const HostResource& new_file_ref, 290 const HostResource& new_file_ref,
337 uint32_t serialized_callback) { 291 uint32_t serialized_callback) {
292 EnterHostFromHostResource<PPB_FileRef_API> enter(file_ref);
293 if (enter.failed())
294 return;
338 PP_CompletionCallback callback = ReceiveCallback(serialized_callback); 295 PP_CompletionCallback callback = ReceiveCallback(serialized_callback);
339 int32_t result = 296 int32_t result = enter.object()->Rename(new_file_ref.host_resource(),
340 ppb_file_ref_target()->Rename(file_ref.host_resource(), 297 callback);
341 new_file_ref.host_resource(),
342 callback);
343 if (result != PP_OK_COMPLETIONPENDING) 298 if (result != PP_OK_COMPLETIONPENDING)
344 PP_RunCompletionCallback(&callback, result); 299 PP_RunCompletionCallback(&callback, result);
345 } 300 }
346 301
347 } // namespace proxy 302 } // namespace proxy
348 } // namespace pp 303 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698