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

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

Issue 1548813002: Switch to standard integer types in ppapi/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixes Created 5 years 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
« no previous file with comments | « ppapi/proxy/ppp_class_proxy.h ('k') | ppapi/proxy/ppp_content_decryptor_private_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ppp_class_proxy.h" 5 #include "ppapi/proxy/ppp_class_proxy.h"
6 6
7 #include "ppapi/c/dev/ppb_var_deprecated.h" 7 #include "ppapi/c/dev/ppb_var_deprecated.h"
8 #include "ppapi/c/dev/ppp_class_deprecated.h" 8 #include "ppapi/c/dev/ppp_class_deprecated.h"
9 #include "ppapi/c/pp_var.h" 9 #include "ppapi/c/pp_var.h"
10 #include "ppapi/proxy/dispatcher.h" 10 #include "ppapi/proxy/dispatcher.h"
11 #include "ppapi/proxy/plugin_globals.h" 11 #include "ppapi/proxy/plugin_globals.h"
12 #include "ppapi/proxy/ppapi_messages.h" 12 #include "ppapi/proxy/ppapi_messages.h"
13 #include "ppapi/proxy/serialized_var.h" 13 #include "ppapi/proxy/serialized_var.h"
14 #include "ppapi/shared_impl/api_id.h"
14 #include "ppapi/shared_impl/proxy_lock.h" 15 #include "ppapi/shared_impl/proxy_lock.h"
15 #include "ppapi/shared_impl/api_id.h"
16 16
17 namespace ppapi { 17 namespace ppapi {
18 namespace proxy { 18 namespace proxy {
19 19
20 namespace { 20 namespace {
21 21
22 // PPP_Class in the browser implementation ------------------------------------- 22 // PPP_Class in the browser implementation -------------------------------------
23 23
24 // Represents a plugin-implemented class in the browser process. This just 24 // Represents a plugin-implemented class in the browser process. This just
25 // stores the data necessary to call back the plugin. 25 // stores the data necessary to call back the plugin.
26 struct ObjectProxy { 26 struct ObjectProxy {
27 ObjectProxy(Dispatcher* d, int64 p, int64 ud) 27 ObjectProxy(Dispatcher* d, int64_t p, int64_t ud)
28 : dispatcher(d), 28 : dispatcher(d), ppp_class(p), user_data(ud) {}
29 ppp_class(p),
30 user_data(ud) {
31 }
32 29
33 Dispatcher* dispatcher; 30 Dispatcher* dispatcher;
34 int64 ppp_class; 31 int64_t ppp_class;
35 int64 user_data; 32 int64_t user_data;
36 }; 33 };
37 34
38 ObjectProxy* ToObjectProxy(void* data) { 35 ObjectProxy* ToObjectProxy(void* data) {
39 ObjectProxy* obj = reinterpret_cast<ObjectProxy*>(data); 36 ObjectProxy* obj = reinterpret_cast<ObjectProxy*>(data);
40 if (!obj || !obj->dispatcher) 37 if (!obj || !obj->dispatcher)
41 return NULL; 38 return NULL;
42 if (!obj->dispatcher->permissions().HasPermission(PERMISSION_DEV)) 39 if (!obj->dispatcher->permissions().HasPermission(PERMISSION_DEV))
43 return NULL; 40 return NULL;
44 return obj; 41 return obj;
45 } 42 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 &GetAllPropertyNames, 177 &GetAllPropertyNames,
181 &SetProperty, 178 &SetProperty,
182 &RemoveProperty, 179 &RemoveProperty,
183 &Call, 180 &Call,
184 &Construct, 181 &Construct,
185 &Deallocate 182 &Deallocate
186 }; 183 };
187 184
188 // Plugin helper functions ----------------------------------------------------- 185 // Plugin helper functions -----------------------------------------------------
189 186
190 // Converts an int64 object from IPC to a PPP_Class* for calling into the 187 // Converts an int64_t object from IPC to a PPP_Class* for calling into the
191 // plugin's implementation. 188 // plugin's implementation.
192 const PPP_Class_Deprecated* ToPPPClass(int64 value) { 189 const PPP_Class_Deprecated* ToPPPClass(int64_t value) {
193 return reinterpret_cast<const PPP_Class_Deprecated*>( 190 return reinterpret_cast<const PPP_Class_Deprecated*>(
194 static_cast<intptr_t>(value)); 191 static_cast<intptr_t>(value));
195 } 192 }
196 193
197 // Converts an int64 object from IPC to a void* for calling into the plugin's 194 // Converts an int64_t object from IPC to a void* for calling into the plugin's
198 // implementation as the user data. 195 // implementation as the user data.
199 void* ToUserData(int64 value) { 196 void* ToUserData(int64_t value) {
200 return reinterpret_cast<void*>(static_cast<intptr_t>(value)); 197 return reinterpret_cast<void*>(static_cast<intptr_t>(value));
201 } 198 }
202 199
203 } // namespace 200 } // namespace
204 201
205 // PPP_Class_Proxy ------------------------------------------------------------- 202 // PPP_Class_Proxy -------------------------------------------------------------
206 203
207 PPP_Class_Proxy::PPP_Class_Proxy(Dispatcher* dispatcher) 204 PPP_Class_Proxy::PPP_Class_Proxy(Dispatcher* dispatcher)
208 : InterfaceProxy(dispatcher) { 205 : InterfaceProxy(dispatcher) {
209 } 206 }
210 207
211 PPP_Class_Proxy::~PPP_Class_Proxy() { 208 PPP_Class_Proxy::~PPP_Class_Proxy() {
212 } 209 }
213 210
214 // static 211 // static
215 InterfaceProxy* PPP_Class_Proxy::Create(Dispatcher* dispatcher) { 212 InterfaceProxy* PPP_Class_Proxy::Create(Dispatcher* dispatcher) {
216 return new PPP_Class_Proxy(dispatcher); 213 return new PPP_Class_Proxy(dispatcher);
217 } 214 }
218 215
219 // static 216 // static
220 PP_Var PPP_Class_Proxy::CreateProxiedObject(const PPB_Var_Deprecated* var, 217 PP_Var PPP_Class_Proxy::CreateProxiedObject(const PPB_Var_Deprecated* var,
221 Dispatcher* dispatcher, 218 Dispatcher* dispatcher,
222 PP_Instance instance_id, 219 PP_Instance instance_id,
223 int64 ppp_class, 220 int64_t ppp_class,
224 int64 class_data) { 221 int64_t class_data) {
225 ObjectProxy* object_proxy = new ObjectProxy(dispatcher, 222 ObjectProxy* object_proxy = new ObjectProxy(dispatcher,
226 ppp_class, class_data); 223 ppp_class, class_data);
227 return var->CreateObject(instance_id, &class_interface, object_proxy); 224 return var->CreateObject(instance_id, &class_interface, object_proxy);
228 } 225 }
229 226
230 // static 227 // static
231 PP_Bool PPP_Class_Proxy::IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl, 228 PP_Bool PPP_Class_Proxy::IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl,
232 const PP_Var& var, 229 const PP_Var& var,
233 int64 ppp_class, 230 int64_t ppp_class,
234 int64* ppp_class_data) { 231 int64_t* ppp_class_data) {
235 void* proxied_object = NULL; 232 void* proxied_object = NULL;
236 if (ppb_var_impl->IsInstanceOf(var, 233 if (ppb_var_impl->IsInstanceOf(var,
237 &class_interface, 234 &class_interface,
238 &proxied_object)) { 235 &proxied_object)) {
239 if (static_cast<ObjectProxy*>(proxied_object)->ppp_class == ppp_class) { 236 if (static_cast<ObjectProxy*>(proxied_object)->ppp_class == ppp_class) {
240 DCHECK(ppp_class_data); 237 DCHECK(ppp_class_data);
241 *ppp_class_data = static_cast<ObjectProxy*>(proxied_object)->user_data; 238 *ppp_class_data = static_cast<ObjectProxy*>(proxied_object)->user_data;
242 return PP_TRUE; 239 return PP_TRUE;
243 } 240 }
244 } 241 }
(...skipping 20 matching lines...) Expand all
265 OnMsgCall) 262 OnMsgCall)
266 IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Construct, 263 IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Construct,
267 OnMsgConstruct) 264 OnMsgConstruct)
268 IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Deallocate, 265 IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Deallocate,
269 OnMsgDeallocate) 266 OnMsgDeallocate)
270 IPC_MESSAGE_UNHANDLED(handled = false) 267 IPC_MESSAGE_UNHANDLED(handled = false)
271 IPC_END_MESSAGE_MAP() 268 IPC_END_MESSAGE_MAP()
272 return handled; 269 return handled;
273 } 270 }
274 271
275 void PPP_Class_Proxy::OnMsgHasProperty(int64 ppp_class, int64 object, 272 void PPP_Class_Proxy::OnMsgHasProperty(int64_t ppp_class,
273 int64_t object,
276 SerializedVarReceiveInput property, 274 SerializedVarReceiveInput property,
277 SerializedVarOutParam exception, 275 SerializedVarOutParam exception,
278 bool* result) { 276 bool* result) {
279 if (!ValidateUserData(ppp_class, object, &exception)) 277 if (!ValidateUserData(ppp_class, object, &exception))
280 return; 278 return;
281 *result = CallWhileUnlocked(ToPPPClass(ppp_class)->HasProperty, 279 *result = CallWhileUnlocked(ToPPPClass(ppp_class)->HasProperty,
282 ToUserData(object), 280 ToUserData(object),
283 property.Get(dispatcher()), 281 property.Get(dispatcher()),
284 exception.OutParam(dispatcher())); 282 exception.OutParam(dispatcher()));
285 } 283 }
286 284
287 void PPP_Class_Proxy::OnMsgHasMethod(int64 ppp_class, int64 object, 285 void PPP_Class_Proxy::OnMsgHasMethod(int64_t ppp_class,
286 int64_t object,
288 SerializedVarReceiveInput property, 287 SerializedVarReceiveInput property,
289 SerializedVarOutParam exception, 288 SerializedVarOutParam exception,
290 bool* result) { 289 bool* result) {
291 if (!ValidateUserData(ppp_class, object, &exception)) 290 if (!ValidateUserData(ppp_class, object, &exception))
292 return; 291 return;
293 *result = CallWhileUnlocked(ToPPPClass(ppp_class)->HasMethod, 292 *result = CallWhileUnlocked(ToPPPClass(ppp_class)->HasMethod,
294 ToUserData(object), 293 ToUserData(object),
295 property.Get(dispatcher()), 294 property.Get(dispatcher()),
296 exception.OutParam(dispatcher())); 295 exception.OutParam(dispatcher()));
297 } 296 }
298 297
299 void PPP_Class_Proxy::OnMsgGetProperty(int64 ppp_class, int64 object, 298 void PPP_Class_Proxy::OnMsgGetProperty(int64_t ppp_class,
299 int64_t object,
300 SerializedVarReceiveInput property, 300 SerializedVarReceiveInput property,
301 SerializedVarOutParam exception, 301 SerializedVarOutParam exception,
302 SerializedVarReturnValue result) { 302 SerializedVarReturnValue result) {
303 if (!ValidateUserData(ppp_class, object, &exception)) 303 if (!ValidateUserData(ppp_class, object, &exception))
304 return; 304 return;
305 result.Return(dispatcher(), CallWhileUnlocked( 305 result.Return(dispatcher(), CallWhileUnlocked(
306 ToPPPClass(ppp_class)->GetProperty, 306 ToPPPClass(ppp_class)->GetProperty,
307 ToUserData(object), property.Get(dispatcher()), 307 ToUserData(object), property.Get(dispatcher()),
308 exception.OutParam(dispatcher()))); 308 exception.OutParam(dispatcher())));
309 } 309 }
310 310
311 void PPP_Class_Proxy::OnMsgEnumerateProperties( 311 void PPP_Class_Proxy::OnMsgEnumerateProperties(
312 int64 ppp_class, int64 object, 312 int64_t ppp_class,
313 int64_t object,
313 std::vector<SerializedVar>* props, 314 std::vector<SerializedVar>* props,
314 SerializedVarOutParam exception) { 315 SerializedVarOutParam exception) {
315 if (!ValidateUserData(ppp_class, object, &exception)) 316 if (!ValidateUserData(ppp_class, object, &exception))
316 return; 317 return;
317 NOTIMPLEMENTED(); 318 NOTIMPLEMENTED();
318 // TODO(brettw) implement this. 319 // TODO(brettw) implement this.
319 } 320 }
320 321
321 void PPP_Class_Proxy::OnMsgSetProperty(int64 ppp_class, int64 object, 322 void PPP_Class_Proxy::OnMsgSetProperty(int64_t ppp_class,
323 int64_t object,
322 SerializedVarReceiveInput property, 324 SerializedVarReceiveInput property,
323 SerializedVarReceiveInput value, 325 SerializedVarReceiveInput value,
324 SerializedVarOutParam exception) { 326 SerializedVarOutParam exception) {
325 if (!ValidateUserData(ppp_class, object, &exception)) 327 if (!ValidateUserData(ppp_class, object, &exception))
326 return; 328 return;
327 CallWhileUnlocked(ToPPPClass(ppp_class)->SetProperty, 329 CallWhileUnlocked(ToPPPClass(ppp_class)->SetProperty,
328 ToUserData(object), property.Get(dispatcher()), value.Get(dispatcher()), 330 ToUserData(object), property.Get(dispatcher()), value.Get(dispatcher()),
329 exception.OutParam(dispatcher())); 331 exception.OutParam(dispatcher()));
330 } 332 }
331 333
332 void PPP_Class_Proxy::OnMsgRemoveProperty(int64 ppp_class, int64 object, 334 void PPP_Class_Proxy::OnMsgRemoveProperty(int64_t ppp_class,
335 int64_t object,
333 SerializedVarReceiveInput property, 336 SerializedVarReceiveInput property,
334 SerializedVarOutParam exception) { 337 SerializedVarOutParam exception) {
335 if (!ValidateUserData(ppp_class, object, &exception)) 338 if (!ValidateUserData(ppp_class, object, &exception))
336 return; 339 return;
337 CallWhileUnlocked(ToPPPClass(ppp_class)->RemoveProperty, 340 CallWhileUnlocked(ToPPPClass(ppp_class)->RemoveProperty,
338 ToUserData(object), property.Get(dispatcher()), 341 ToUserData(object), property.Get(dispatcher()),
339 exception.OutParam(dispatcher())); 342 exception.OutParam(dispatcher()));
340 } 343 }
341 344
342 void PPP_Class_Proxy::OnMsgCall( 345 void PPP_Class_Proxy::OnMsgCall(int64_t ppp_class,
343 int64 ppp_class, int64 object, 346 int64_t object,
344 SerializedVarReceiveInput method_name, 347 SerializedVarReceiveInput method_name,
345 SerializedVarVectorReceiveInput arg_vector, 348 SerializedVarVectorReceiveInput arg_vector,
346 SerializedVarOutParam exception, 349 SerializedVarOutParam exception,
347 SerializedVarReturnValue result) { 350 SerializedVarReturnValue result) {
348 if (!ValidateUserData(ppp_class, object, &exception)) 351 if (!ValidateUserData(ppp_class, object, &exception))
349 return; 352 return;
350 uint32_t arg_count = 0; 353 uint32_t arg_count = 0;
351 PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); 354 PP_Var* args = arg_vector.Get(dispatcher(), &arg_count);
352 result.Return(dispatcher(), CallWhileUnlocked(ToPPPClass(ppp_class)->Call, 355 result.Return(dispatcher(), CallWhileUnlocked(ToPPPClass(ppp_class)->Call,
353 ToUserData(object), method_name.Get(dispatcher()), 356 ToUserData(object), method_name.Get(dispatcher()),
354 arg_count, args, exception.OutParam(dispatcher()))); 357 arg_count, args, exception.OutParam(dispatcher())));
355 } 358 }
356 359
357 void PPP_Class_Proxy::OnMsgConstruct( 360 void PPP_Class_Proxy::OnMsgConstruct(int64_t ppp_class,
358 int64 ppp_class, int64 object, 361 int64_t object,
359 SerializedVarVectorReceiveInput arg_vector, 362 SerializedVarVectorReceiveInput arg_vector,
360 SerializedVarOutParam exception, 363 SerializedVarOutParam exception,
361 SerializedVarReturnValue result) { 364 SerializedVarReturnValue result) {
362 if (!ValidateUserData(ppp_class, object, &exception)) 365 if (!ValidateUserData(ppp_class, object, &exception))
363 return; 366 return;
364 uint32_t arg_count = 0; 367 uint32_t arg_count = 0;
365 PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); 368 PP_Var* args = arg_vector.Get(dispatcher(), &arg_count);
366 result.Return(dispatcher(), CallWhileUnlocked( 369 result.Return(dispatcher(), CallWhileUnlocked(
367 ToPPPClass(ppp_class)->Construct, 370 ToPPPClass(ppp_class)->Construct,
368 ToUserData(object), arg_count, args, exception.OutParam(dispatcher()))); 371 ToUserData(object), arg_count, args, exception.OutParam(dispatcher())));
369 } 372 }
370 373
371 void PPP_Class_Proxy::OnMsgDeallocate(int64 ppp_class, int64 object) { 374 void PPP_Class_Proxy::OnMsgDeallocate(int64_t ppp_class, int64_t object) {
372 if (!ValidateUserData(ppp_class, object, NULL)) 375 if (!ValidateUserData(ppp_class, object, NULL))
373 return; 376 return;
374 PluginGlobals::Get()->plugin_var_tracker()->PluginImplementedObjectDestroyed( 377 PluginGlobals::Get()->plugin_var_tracker()->PluginImplementedObjectDestroyed(
375 ToUserData(object)); 378 ToUserData(object));
376 CallWhileUnlocked(ToPPPClass(ppp_class)->Deallocate, ToUserData(object)); 379 CallWhileUnlocked(ToPPPClass(ppp_class)->Deallocate, ToUserData(object));
377 } 380 }
378 381
379 bool PPP_Class_Proxy::ValidateUserData(int64 ppp_class, int64 class_data, 382 bool PPP_Class_Proxy::ValidateUserData(int64_t ppp_class,
383 int64_t class_data,
380 SerializedVarOutParam* exception) { 384 SerializedVarOutParam* exception) {
381 if (!PluginGlobals::Get()->plugin_var_tracker()->ValidatePluginObjectCall( 385 if (!PluginGlobals::Get()->plugin_var_tracker()->ValidatePluginObjectCall(
382 ToPPPClass(ppp_class), ToUserData(class_data))) { 386 ToPPPClass(ppp_class), ToUserData(class_data))) {
383 // Set the exception. This is so the caller will know about the error and 387 // Set the exception. This is so the caller will know about the error and
384 // also that we won't assert that somebody forgot to call OutParam on the 388 // also that we won't assert that somebody forgot to call OutParam on the
385 // output parameter. Although this exception of "1" won't be very useful 389 // output parameter. Although this exception of "1" won't be very useful
386 // this shouldn't happen in normal usage, only when the renderer is being 390 // this shouldn't happen in normal usage, only when the renderer is being
387 // malicious. 391 // malicious.
388 if (exception) 392 if (exception)
389 *exception->OutParam(dispatcher()) = PP_MakeInt32(1); 393 *exception->OutParam(dispatcher()) = PP_MakeInt32(1);
390 return false; 394 return false;
391 } 395 }
392 return true; 396 return true;
393 } 397 }
394 398
395 } // namespace proxy 399 } // namespace proxy
396 } // namespace ppapi 400 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/ppp_class_proxy.h ('k') | ppapi/proxy/ppp_content_decryptor_private_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698