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

Unified Diff: ppapi/proxy/serialized_var.cc

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_var.h ('k') | ppapi/proxy/serialized_var_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/serialized_var.cc
===================================================================
--- ppapi/proxy/serialized_var.cc (revision 72840)
+++ ppapi/proxy/serialized_var.cc (working copy)
@@ -19,7 +19,8 @@
SerializedVar::Inner::Inner()
: serialization_rules_(NULL),
var_(PP_MakeUndefined()),
- cleanup_mode_(CLEANUP_NONE) {
+ cleanup_mode_(CLEANUP_NONE),
+ dispatcher_for_end_send_pass_ref_(NULL) {
#ifndef NDEBUG
has_been_serialized_ = false;
has_been_deserialized_ = false;
@@ -29,7 +30,8 @@
SerializedVar::Inner::Inner(VarSerializationRules* serialization_rules)
: serialization_rules_(serialization_rules),
var_(PP_MakeUndefined()),
- cleanup_mode_(CLEANUP_NONE) {
+ cleanup_mode_(CLEANUP_NONE),
+ dispatcher_for_end_send_pass_ref_(NULL) {
#ifndef NDEBUG
has_been_serialized_ = false;
has_been_deserialized_ = false;
@@ -40,7 +42,8 @@
const PP_Var& var)
: serialization_rules_(serialization_rules),
var_(var),
- cleanup_mode_(CLEANUP_NONE) {
+ cleanup_mode_(CLEANUP_NONE),
+ dispatcher_for_end_send_pass_ref_(NULL) {
#ifndef NDEBUG
has_been_serialized_ = false;
has_been_deserialized_ = false;
@@ -50,7 +53,9 @@
SerializedVar::Inner::~Inner() {
switch (cleanup_mode_) {
case END_SEND_PASS_REF:
- serialization_rules_->EndSendPassRef(var_);
+ DCHECK(dispatcher_for_end_send_pass_ref_);
+ serialization_rules_->EndSendPassRef(var_,
+ dispatcher_for_end_send_pass_ref_);
break;
case END_RECEIVE_CALLER_OWNED:
serialization_rules_->EndReceiveCallerOwned(var_);
@@ -204,6 +209,18 @@
return success;
}
+void SerializedVar::Inner::SetCleanupModeToEndSendPassRef(
+ Dispatcher* dispatcher) {
+ DCHECK(dispatcher);
+ DCHECK(!dispatcher_for_end_send_pass_ref_);
+ dispatcher_for_end_send_pass_ref_ = dispatcher;
+ cleanup_mode_ = END_SEND_PASS_REF;
+}
+
+void SerializedVar::Inner::SetCleanupModeToEndReceiveCallerOwned() {
+ cleanup_mode_ = END_RECEIVE_CALLER_OWNED;
+}
+
// SerializedVar ---------------------------------------------------------------
SerializedVar::SerializedVar() : inner_(new Inner) {
@@ -339,7 +356,7 @@
// Ensure that when the serialized var goes out of scope it cleans up the
// stuff we're making in BeginReceiveCallerOwned.
- serialized_.inner_->set_cleanup_mode(SerializedVar::END_RECEIVE_CALLER_OWNED);
+ serialized_.inner_->SetCleanupModeToEndReceiveCallerOwned();
serialized_.inner_->SetVar(
serialized_.inner_->serialization_rules()->BeginReceiveCallerOwned(
@@ -396,7 +413,7 @@
dispatcher->serialization_rules());
// Var must clean up after our BeginSendPassRef call.
- serialized_->inner_->set_cleanup_mode(SerializedVar::END_SEND_PASS_REF);
+ serialized_->inner_->SetCleanupModeToEndSendPassRef(dispatcher);
serialized_->inner_->SetVar(
dispatcher->serialization_rules()->BeginSendPassRef(
@@ -408,7 +425,8 @@
SerializedVarOutParam::SerializedVarOutParam(SerializedVar* serialized)
: serialized_(serialized),
- writable_var_(PP_MakeUndefined()) {
+ writable_var_(PP_MakeUndefined()),
+ dispatcher_(NULL) {
}
SerializedVarOutParam::~SerializedVarOutParam() {
@@ -422,11 +440,12 @@
// Normally the current object will be created on the stack to wrap a
// SerializedVar and won't have a scope around the actual IPC send. So we
// need to tell the SerializedVar to do the begin/end send pass ref calls.
- serialized_->inner_->set_cleanup_mode(SerializedVar::END_SEND_PASS_REF);
+ serialized_->inner_->SetCleanupModeToEndSendPassRef(dispatcher_);
}
}
PP_Var* SerializedVarOutParam::OutParam(Dispatcher* dispatcher) {
+ dispatcher_ = dispatcher;
serialized_->inner_->set_serialization_rules(
dispatcher->serialization_rules());
return &writable_var_;
@@ -468,6 +487,25 @@
return &array_;
}
+SerializedVarTestConstructor::SerializedVarTestConstructor(
+ const PP_Var& pod_var) {
+ DCHECK(pod_var.type != PP_VARTYPE_STRING);
+ inner_->SetVar(pod_var);
+}
+
+SerializedVarTestConstructor::SerializedVarTestConstructor(
+ const std::string& str) {
+ PP_Var string_var;
+ string_var.type = PP_VARTYPE_STRING;
+ string_var.value.as_id = 0;
+ inner_->SetVar(string_var);
+ *inner_->GetStringPtr() = str;
+}
+
+SerializedVarTestReader::SerializedVarTestReader(const SerializedVar& var)
+ : SerializedVar(var) {
+}
+
} // namespace proxy
} // namespace pp
« no previous file with comments | « ppapi/proxy/serialized_var.h ('k') | ppapi/proxy/serialized_var_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698