| Index: ppapi/proxy/serialized_var.h | 
| =================================================================== | 
| --- ppapi/proxy/serialized_var.h	(revision 72840) | 
| +++ ppapi/proxy/serialized_var.h	(working copy) | 
| @@ -39,7 +39,7 @@ | 
| // different combinations of reference counting for sending and receiving | 
| // objects and for dealing with strings | 
| // | 
| -// This makes SerializedVar complicate and easy to mess up. To make it | 
| +// This makes SerializedVar complicated and easy to mess up. To make it | 
| // reasonable to use all functions are protected and there are a use-specific | 
| // classes that encapsulate exactly one type of use in a way that typically | 
| // won't compile if you do the wrong thing. | 
| @@ -63,17 +63,6 @@ | 
| // behavior and will enforce that you don't do stupid things. | 
| class SerializedVar { | 
| public: | 
| -  enum CleanupMode { | 
| -    // The serialized var won't do anything special in the destructor (default). | 
| -    CLEANUP_NONE, | 
| - | 
| -    // The serialized var will call EndSendPassRef in the destructor. | 
| -    END_SEND_PASS_REF, | 
| - | 
| -    // The serialized var will call EndReceiveCallerOwned in the destructor. | 
| -    END_RECEIVE_CALLER_OWNED | 
| -  }; | 
| - | 
| SerializedVar(); | 
| ~SerializedVar(); | 
|  | 
| @@ -90,6 +79,7 @@ | 
| friend class SerializedVarReturnValue; | 
| friend class SerializedVarOutParam; | 
| friend class SerializedVarSendInput; | 
| +  friend class SerializedVarTestConstructor; | 
| friend class SerializedVarVectorReceiveInput; | 
|  | 
| class Inner : public base::RefCounted<Inner> { | 
| @@ -106,8 +96,6 @@ | 
| serialization_rules_ = serialization_rules; | 
| } | 
|  | 
| -    void set_cleanup_mode(CleanupMode cm) { cleanup_mode_ = cm; } | 
| - | 
| // See outer class's declarations above. | 
| PP_Var GetVar() const; | 
| PP_Var GetIncompleteVar() const; | 
| @@ -118,7 +106,25 @@ | 
| void WriteToMessage(IPC::Message* m) const; | 
| bool ReadFromMessage(const IPC::Message* m, void** iter); | 
|  | 
| +    // Sets the cleanup mode. See the CleanupMode enum below. These functions | 
| +    // are not just a simple setter in order to require that the appropriate | 
| +    // data is set along with the corresponding mode. | 
| +    void SetCleanupModeToEndSendPassRef(Dispatcher* dispatcher); | 
| +    void SetCleanupModeToEndReceiveCallerOwned(); | 
| + | 
| private: | 
| +    enum CleanupMode { | 
| +      // The serialized var won't do anything special in the destructor | 
| +      // (default). | 
| +      CLEANUP_NONE, | 
| + | 
| +      // The serialized var will call EndSendPassRef in the destructor. | 
| +      END_SEND_PASS_REF, | 
| + | 
| +      // The serialized var will call EndReceiveCallerOwned in the destructor. | 
| +      END_RECEIVE_CALLER_OWNED | 
| +    }; | 
| + | 
| // Rules for serializing and deserializing vars for this process type. | 
| // This may be NULL, but must be set before trying to serialize to IPC when | 
| // sending, or before converting back to a PP_Var when receiving. | 
| @@ -140,6 +146,10 @@ | 
|  | 
| CleanupMode cleanup_mode_; | 
|  | 
| +    // The dispatcher saved for the call to EndSendPassRef for the cleanup. | 
| +    // This is only valid when cleanup_mode == END_SEND_PASS_REF. | 
| +    Dispatcher* dispatcher_for_end_send_pass_ref_; | 
| + | 
| #ifndef NDEBUG | 
| // When being sent or received over IPC, we should only be serialized or | 
| // deserialized once. These flags help us assert this is true. | 
| @@ -378,6 +388,8 @@ | 
| // This is the value actually written by the code and returned by OutParam. | 
| // We'll write this into serialized_ in our destructor. | 
| PP_Var writable_var_; | 
| + | 
| +  Dispatcher* dispatcher_; | 
| }; | 
|  | 
| // For returning an array of PP_Vars to the other side and transferring | 
| @@ -399,6 +411,30 @@ | 
| PP_Var* array_; | 
| }; | 
|  | 
| +// For tests that just want to construct a SerializedVar for giving it to one | 
| +// of the other classes. | 
| +class SerializedVarTestConstructor : public SerializedVar { | 
| + public: | 
| +  // For POD-types and objects. | 
| +  explicit SerializedVarTestConstructor(const PP_Var& pod_var); | 
| + | 
| +  // For strings. | 
| +  explicit SerializedVarTestConstructor(const std::string& str); | 
| +}; | 
| + | 
| +// For tests that want to read what's in a SerializedVar. | 
| +class SerializedVarTestReader : public SerializedVar { | 
| + public: | 
| +  explicit SerializedVarTestReader(const SerializedVar& var); | 
| + | 
| +  // The "incomplete" var is the one sent over the wire. Strings and object | 
| +  // IDs have not yet been converted, so this is the thing that tests will | 
| +  // actually want to check. | 
| +  PP_Var GetIncompleteVar() const { return inner_->GetIncompleteVar(); } | 
| + | 
| +  const std::string& GetString() const { return inner_->GetString(); } | 
| +}; | 
| + | 
| }  // namespace proxy | 
| }  // namespace pp | 
|  | 
|  |