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

Side by Side Diff: ppapi/proxy/serialized_var.h

Issue 7687005: Create ppapi_proxy.dll. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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
« no previous file with comments | « ppapi/proxy/serialized_structs.h ('k') | ppapi/shared_impl/audio_config_impl.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) 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 #ifndef PPAPI_PROXY_SERIALIZED_VAR_H_ 5 #ifndef PPAPI_PROXY_SERIALIZED_VAR_H_
6 #define PPAPI_PROXY_SERIALIZED_VAR_H_ 6 #define PPAPI_PROXY_SERIALIZED_VAR_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "ppapi/c/pp_var.h" 13 #include "ppapi/c/pp_var.h"
14 #include "ppapi/proxy/ppapi_proxy_export.h"
14 15
15 namespace IPC { 16 namespace IPC {
16 class Message; 17 class Message;
17 } 18 }
18 19
19 namespace ppapi { 20 namespace ppapi {
20 namespace proxy { 21 namespace proxy {
21 22
22 class Dispatcher; 23 class Dispatcher;
23 class VarSerializationRules; 24 class VarSerializationRules;
(...skipping 30 matching lines...) Expand all
54 // Constness 55 // Constness
55 // --------- 56 // ---------
56 // SerializedVar basically doesn't support const. Everything is mutable and 57 // SerializedVar basically doesn't support const. Everything is mutable and
57 // most functions are declared const. This unfortunateness is because of the 58 // most functions are declared const. This unfortunateness is because of the
58 // way the IPC system works. When deserializing, it will have a const 59 // way the IPC system works. When deserializing, it will have a const
59 // SerializedVar in a Tuple and this will be given to the function. We kind of 60 // SerializedVar in a Tuple and this will be given to the function. We kind of
60 // want to modify that to convert strings and do refcounting. 61 // want to modify that to convert strings and do refcounting.
61 // 62 //
62 // The helper classes used for accessing the SerializedVar have more reasonable 63 // The helper classes used for accessing the SerializedVar have more reasonable
63 // behavior and will enforce that you don't do stupid things. 64 // behavior and will enforce that you don't do stupid things.
64 class SerializedVar { 65 class PPAPI_PROXY_EXPORT SerializedVar {
65 public: 66 public:
66 SerializedVar(); 67 SerializedVar();
67 ~SerializedVar(); 68 ~SerializedVar();
68 69
69 // Backend implementation for IPC::ParamTraits<SerializedVar>. 70 // Backend implementation for IPC::ParamTraits<SerializedVar>.
70 void WriteToMessage(IPC::Message* m) const { 71 void WriteToMessage(IPC::Message* m) const {
71 inner_->WriteToMessage(m); 72 inner_->WriteToMessage(m);
72 } 73 }
73 bool ReadFromMessage(const IPC::Message* m, void** iter) { 74 bool ReadFromMessage(const IPC::Message* m, void** iter) {
74 return inner_->ReadFromMessage(m, iter); 75 return inner_->ReadFromMessage(m, iter);
75 } 76 }
76 77
77 protected: 78 protected:
78 friend class SerializedVarReceiveInput; 79 friend class SerializedVarReceiveInput;
79 friend class SerializedVarReturnValue; 80 friend class SerializedVarReturnValue;
80 friend class SerializedVarOutParam; 81 friend class SerializedVarOutParam;
81 friend class SerializedVarSendInput; 82 friend class SerializedVarSendInput;
82 friend class SerializedVarTestConstructor; 83 friend class SerializedVarTestConstructor;
83 friend class SerializedVarVectorReceiveInput; 84 friend class SerializedVarVectorReceiveInput;
84 85
85 class Inner : public base::RefCounted<Inner> { 86 class PPAPI_PROXY_EXPORT Inner : public base::RefCounted<Inner> {
86 public: 87 public:
87 Inner(); 88 Inner();
88 Inner(VarSerializationRules* serialization_rules); 89 Inner(VarSerializationRules* serialization_rules);
89 Inner(VarSerializationRules* serialization_rules, const PP_Var& var); 90 Inner(VarSerializationRules* serialization_rules, const PP_Var& var);
90 ~Inner(); 91 ~Inner();
91 92
92 VarSerializationRules* serialization_rules() { 93 VarSerializationRules* serialization_rules() {
93 return serialization_rules_; 94 return serialization_rules_;
94 } 95 }
95 void set_serialization_rules(VarSerializationRules* serialization_rules) { 96 void set_serialization_rules(VarSerializationRules* serialization_rules) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 // Example for API: 206 // Example for API:
206 // PP_Var MyFunction() 207 // PP_Var MyFunction()
207 // IPC message: 208 // IPC message:
208 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); 209 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar);
209 // Message handler would be: 210 // Message handler would be:
210 // PP_Var MyFunctionProxy() { 211 // PP_Var MyFunctionProxy() {
211 // ReceiveSerializedVarReturnValue result; 212 // ReceiveSerializedVarReturnValue result;
212 // Send(new MyFunctionMsg(&result)); 213 // Send(new MyFunctionMsg(&result));
213 // return result.Return(dispatcher()); 214 // return result.Return(dispatcher());
214 // } 215 // }
215 class ReceiveSerializedVarReturnValue : public SerializedVar { 216 class PPAPI_PROXY_EXPORT ReceiveSerializedVarReturnValue
217 : public SerializedVar {
216 public: 218 public:
217 // Note that we can't set the dispatcher in the constructor because the 219 // Note that we can't set the dispatcher in the constructor because the
218 // data will be overridden when the return value is set. This constructor is 220 // data will be overridden when the return value is set. This constructor is
219 // normally used in the pattern above (operator= will be implicitly invoked 221 // normally used in the pattern above (operator= will be implicitly invoked
220 // when the sync message writes the output values). 222 // when the sync message writes the output values).
221 ReceiveSerializedVarReturnValue(); 223 ReceiveSerializedVarReturnValue();
222 224
223 // This constructor can be used when deserializing manually. This is useful 225 // This constructor can be used when deserializing manually. This is useful
224 // when you're getting strings "returned" via a struct and need to manually 226 // when you're getting strings "returned" via a struct and need to manually
225 // get the PP_Vars out. In this case just do: 227 // get the PP_Vars out. In this case just do:
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // For receiving a value from the remote side. 298 // For receiving a value from the remote side.
297 // 299 //
298 // Example for API: 300 // Example for API:
299 // void MyFunction(PP_Var) 301 // void MyFunction(PP_Var)
300 // IPC message: 302 // IPC message:
301 // IPC_MESSAGE_ROUTED1(MyFunction, SerializedVar); 303 // IPC_MESSAGE_ROUTED1(MyFunction, SerializedVar);
302 // Message handler would be: 304 // Message handler would be:
303 // void OnMsgMyFunction(SerializedVarReceiveInput param) { 305 // void OnMsgMyFunction(SerializedVarReceiveInput param) {
304 // MyFunction(param.Get()); 306 // MyFunction(param.Get());
305 // } 307 // }
306 class SerializedVarReceiveInput { 308 class PPAPI_PROXY_EXPORT SerializedVarReceiveInput {
307 public: 309 public:
308 // We rely on the implicit constructor here since the IPC layer will call 310 // We rely on the implicit constructor here since the IPC layer will call
309 // us with a SerializedVar. Pass this object by value, the copy constructor 311 // us with a SerializedVar. Pass this object by value, the copy constructor
310 // will pass along the pointer (as cheap as passing a pointer arg). 312 // will pass along the pointer (as cheap as passing a pointer arg).
311 SerializedVarReceiveInput(const SerializedVar& serialized); 313 SerializedVarReceiveInput(const SerializedVar& serialized);
312 ~SerializedVarReceiveInput(); 314 ~SerializedVarReceiveInput();
313 315
314 PP_Var Get(Dispatcher* dispatcher); 316 PP_Var Get(Dispatcher* dispatcher);
315 317
316 private: 318 private:
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 // ReceiveSerializedVarReturnValue. 354 // ReceiveSerializedVarReturnValue.
353 // 355 //
354 // Example for API: 356 // Example for API:
355 // PP_Var MyFunction() 357 // PP_Var MyFunction()
356 // IPC message: 358 // IPC message:
357 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); 359 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar);
358 // Message handler would be: 360 // Message handler would be:
359 // void OnMsgMyFunction(SerializedVarReturnValue result) { 361 // void OnMsgMyFunction(SerializedVarReturnValue result) {
360 // result.Return(dispatcher(), MyFunction()); 362 // result.Return(dispatcher(), MyFunction());
361 // } 363 // }
362 class SerializedVarReturnValue { 364 class PPAPI_PROXY_EXPORT SerializedVarReturnValue {
363 public: 365 public:
364 // We rely on the implicit constructor here since the IPC layer will call 366 // We rely on the implicit constructor here since the IPC layer will call
365 // us with a SerializedVar*. Pass this object by value, the copy constructor 367 // us with a SerializedVar*. Pass this object by value, the copy constructor
366 // will pass along the pointer (as cheap as passing a pointer arg). 368 // will pass along the pointer (as cheap as passing a pointer arg).
367 SerializedVarReturnValue(SerializedVar* serialized); 369 SerializedVarReturnValue(SerializedVar* serialized);
368 370
369 void Return(Dispatcher* dispatcher, const PP_Var& var); 371 void Return(Dispatcher* dispatcher, const PP_Var& var);
370 372
371 // Helper function for code that doesn't use the pattern above, but gets 373 // Helper function for code that doesn't use the pattern above, but gets
372 // a return value from the remote side via a struct. You can pass in the 374 // a return value from the remote side via a struct. You can pass in the
373 // SerializedVar and a PP_Var will be created with return value semantics. 375 // SerializedVar and a PP_Var will be created with return value semantics.
374 static SerializedVar Convert(Dispatcher* dispatcher, const PP_Var& var); 376 static SerializedVar Convert(Dispatcher* dispatcher, const PP_Var& var);
375 377
376 private: 378 private:
377 SerializedVar* serialized_; 379 SerializedVar* serialized_;
378 }; 380 };
379 381
380 // For writing an out param to the remote side. 382 // For writing an out param to the remote side.
381 // 383 //
382 // Example for API: 384 // Example for API:
383 // "void MyFunction(PP_Var* out);" 385 // "void MyFunction(PP_Var* out);"
384 // IPC message: 386 // IPC message:
385 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); 387 // IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar);
386 // Message handler would be: 388 // Message handler would be:
387 // void OnMsgMyFunction(SerializedVarOutParam out_param) { 389 // void OnMsgMyFunction(SerializedVarOutParam out_param) {
388 // MyFunction(out_param.OutParam(dispatcher())); 390 // MyFunction(out_param.OutParam(dispatcher()));
389 // } 391 // }
390 class SerializedVarOutParam { 392 class PPAPI_PROXY_EXPORT SerializedVarOutParam {
391 public: 393 public:
392 // We rely on the implicit constructor here since the IPC layer will call 394 // We rely on the implicit constructor here since the IPC layer will call
393 // us with a SerializedVar*. Pass this object by value, the copy constructor 395 // us with a SerializedVar*. Pass this object by value, the copy constructor
394 // will pass along the pointer (as cheap as passing a pointer arg). 396 // will pass along the pointer (as cheap as passing a pointer arg).
395 SerializedVarOutParam(SerializedVar* serialized); 397 SerializedVarOutParam(SerializedVar* serialized);
396 ~SerializedVarOutParam(); 398 ~SerializedVarOutParam();
397 399
398 // Call this function only once. The caller should write its result to the 400 // Call this function only once. The caller should write its result to the
399 // returned var pointer before this class goes out of scope. The var's 401 // returned var pointer before this class goes out of scope. The var's
400 // initial value will be VARTYPE_UNDEFINED. 402 // initial value will be VARTYPE_UNDEFINED.
(...skipping 24 matching lines...) Expand all
425 Dispatcher* dispatcher_; 427 Dispatcher* dispatcher_;
426 std::vector<SerializedVar>* serialized_; 428 std::vector<SerializedVar>* serialized_;
427 429
428 uint32_t count_; 430 uint32_t count_;
429 PP_Var* array_; 431 PP_Var* array_;
430 }; 432 };
431 433
432 // For tests that just want to construct a SerializedVar for giving it to one 434 // For tests that just want to construct a SerializedVar for giving it to one
433 // of the other classes. This emulates a SerializedVar just received over the 435 // of the other classes. This emulates a SerializedVar just received over the
434 // wire from another process. 436 // wire from another process.
435 class SerializedVarTestConstructor : public SerializedVar { 437 class PPAPI_PROXY_EXPORT SerializedVarTestConstructor : public SerializedVar {
436 public: 438 public:
437 // For POD-types and objects. 439 // For POD-types and objects.
438 explicit SerializedVarTestConstructor(const PP_Var& pod_var); 440 explicit SerializedVarTestConstructor(const PP_Var& pod_var);
439 441
440 // For strings. 442 // For strings.
441 explicit SerializedVarTestConstructor(const std::string& str); 443 explicit SerializedVarTestConstructor(const std::string& str);
442 }; 444 };
443 445
444 // For tests that want to read what's in a SerializedVar. 446 // For tests that want to read what's in a SerializedVar.
445 class SerializedVarTestReader : public SerializedVar { 447 class PPAPI_PROXY_EXPORT SerializedVarTestReader : public SerializedVar {
446 public: 448 public:
447 explicit SerializedVarTestReader(const SerializedVar& var); 449 explicit SerializedVarTestReader(const SerializedVar& var);
448 450
449 // The "incomplete" var is the one sent over the wire. Strings and object 451 // The "incomplete" var is the one sent over the wire. Strings and object
450 // IDs have not yet been converted, so this is the thing that tests will 452 // IDs have not yet been converted, so this is the thing that tests will
451 // actually want to check. 453 // actually want to check.
452 PP_Var GetIncompleteVar() const { return inner_->GetIncompleteVar(); } 454 PP_Var GetIncompleteVar() const { return inner_->GetIncompleteVar(); }
453 455
454 const std::string& GetString() const { return inner_->GetString(); } 456 const std::string& GetString() const { return inner_->GetString(); }
455 }; 457 };
456 458
457 } // namespace proxy 459 } // namespace proxy
458 } // namespace ppapi 460 } // namespace ppapi
459 461
460 #endif // PPAPI_PROXY_SERIALIZED_VAR_H_ 462 #endif // PPAPI_PROXY_SERIALIZED_VAR_H_
461 463
OLDNEW
« no previous file with comments | « ppapi/proxy/serialized_structs.h ('k') | ppapi/shared_impl/audio_config_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698