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

Unified Diff: ppapi/proxy/plugin_var_serialization_rules.cc

Issue 9655019: Fix a crash related to PPAPI scripting. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 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/plugin_var_serialization_rules.h ('k') | ppapi/proxy/serialized_var.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « ppapi/proxy/plugin_var_serialization_rules.h ('k') | ppapi/proxy/serialized_var.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698