Index: ppapi/proxy/plugin_var_serialization_rules.cc |
diff --git a/ppapi/proxy/plugin_var_serialization_rules.cc b/ppapi/proxy/plugin_var_serialization_rules.cc |
index 461676f71f55005b0ee441bf2fe0847008e605bc..33b4564f88bedec99555a5f42a74993f87b51c36 100644 |
--- a/ppapi/proxy/plugin_var_serialization_rules.cc |
+++ b/ppapi/proxy/plugin_var_serialization_rules.cc |
@@ -15,8 +15,10 @@ |
namespace ppapi { |
namespace proxy { |
-PluginVarSerializationRules::PluginVarSerializationRules() |
- : var_tracker_(PluginGlobals::Get()->plugin_var_tracker()) { |
+PluginVarSerializationRules::PluginVarSerializationRules( |
+ const base::WeakPtr<PluginDispatcher>& dispatcher) |
+ : var_tracker_(PluginGlobals::Get()->plugin_var_tracker()), |
+ dispatcher_(dispatcher) { |
} |
PluginVarSerializationRules::~PluginVarSerializationRules() { |
@@ -29,14 +31,13 @@ PP_Var PluginVarSerializationRules::SendCallerOwned(const PP_Var& var) { |
return var; |
} |
-PP_Var PluginVarSerializationRules::BeginReceiveCallerOwned( |
- const PP_Var& var, |
- Dispatcher* dispatcher) { |
+PP_Var PluginVarSerializationRules::BeginReceiveCallerOwned(const PP_Var& var) { |
if (var.type == PP_VARTYPE_OBJECT) { |
- DCHECK(dispatcher->IsPlugin()); |
- return var_tracker_->TrackObjectWithNoReference( |
- var, static_cast<PluginDispatcher*>(dispatcher)); |
+ return dispatcher_ ? |
+ var_tracker_->TrackObjectWithNoReference(var, dispatcher_) : |
+ PP_MakeUndefined(); |
} |
+ |
return var; |
} |
@@ -49,8 +50,7 @@ void PluginVarSerializationRules::EndReceiveCallerOwned(const PP_Var& var) { |
} |
} |
-PP_Var PluginVarSerializationRules::ReceivePassRef(const PP_Var& var, |
- Dispatcher* dispatcher) { |
+PP_Var PluginVarSerializationRules::ReceivePassRef(const PP_Var& var) { |
// Overview of sending an object with "pass ref" from the browser to the |
// plugin: |
// Example 1 Example 2 |
@@ -68,9 +68,9 @@ PP_Var PluginVarSerializationRules::ReceivePassRef(const PP_Var& var, |
// folded in to its set of refs it maintains (with one ref representing all |
// of them in the browser). |
if (var.type == PP_VARTYPE_OBJECT) { |
- DCHECK(dispatcher->IsPlugin()); |
- return var_tracker_->ReceiveObjectPassRef( |
- var, static_cast<PluginDispatcher*>(dispatcher)); |
+ return dispatcher_ ? |
+ var_tracker_->ReceiveObjectPassRef(var, dispatcher_) : |
+ PP_MakeUndefined(); |
} |
// Other types are unchanged. |
@@ -99,15 +99,14 @@ PP_Var PluginVarSerializationRules::BeginSendPassRef(const PP_Var& var) { |
return var; |
} |
-void PluginVarSerializationRules::EndSendPassRef(const PP_Var& var, |
- Dispatcher* dispatcher) { |
+void PluginVarSerializationRules::EndSendPassRef(const PP_Var& var) { |
// See BeginSendPassRef for an example of why we release our ref here. |
// The var we have in our inner class has been converted to a host object |
// by BeginSendPassRef. This means it's not a normal var valid in the plugin, |
// so we need to use the special ReleaseHostObject. |
if (var.type == PP_VARTYPE_OBJECT) { |
- var_tracker_->ReleaseHostObject( |
- static_cast<PluginDispatcher*>(dispatcher), var); |
+ if (dispatcher_) |
+ var_tracker_->ReleaseHostObject(dispatcher_, var); |
} else if (var.type >= PP_VARTYPE_STRING) { |
var_tracker_->ReleaseVar(var); |
} |