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

Unified Diff: ppapi/proxy/serialized_var.h

Issue 6334016: Refactor PPAPI proxy resource handling to maintain which host they came from,... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/serialized_structs.cc ('k') | ppapi/proxy/serialized_var.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ppapi/proxy/serialized_structs.cc ('k') | ppapi/proxy/serialized_var.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698