Index: ppapi/proxy/plugin_var_tracker.cc |
=================================================================== |
--- ppapi/proxy/plugin_var_tracker.cc (revision 74021) |
+++ ppapi/proxy/plugin_var_tracker.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include "base/ref_counted.h" |
#include "base/singleton.h" |
#include "ppapi/c/ppb_var.h" |
+#include "ppapi/proxy/plugin_dispatcher.h" |
#include "ppapi/proxy/ppapi_messages.h" |
#include "ppapi/proxy/interface_id.h" |
@@ -42,15 +43,15 @@ |
} // namespace |
-PluginVarTracker::HostVar::HostVar(Sender* d, VarID i) |
- : channel(d), |
+PluginVarTracker::HostVar::HostVar(PluginDispatcher* d, VarID i) |
+ : dispatcher(d), |
host_object_id(i) { |
} |
bool PluginVarTracker::HostVar::operator<(const HostVar& other) const { |
- if (channel < other.channel) |
+ if (dispatcher < other.dispatcher) |
return true; |
- if (other.channel < channel) |
+ if (other.dispatcher < dispatcher) |
return false; |
return host_object_id < other.host_object_id; |
} |
@@ -149,12 +150,12 @@ |
} |
PP_Var PluginVarTracker::ReceiveObjectPassRef(const PP_Var& var, |
- Sender* channel) { |
+ PluginDispatcher* dispatcher) { |
DCHECK(var.type == PP_VARTYPE_OBJECT); |
// Find the plugin info. |
PluginVarInfoMap::iterator found = |
- FindOrMakePluginVarFromHostVar(var, channel); |
+ FindOrMakePluginVarFromHostVar(var, dispatcher); |
if (found == plugin_var_info_.end()) { |
// The above code should have always made an entry in the map. |
NOTREACHED(); |
@@ -184,12 +185,13 @@ |
return ret; |
} |
-PP_Var PluginVarTracker::TrackObjectWithNoReference(const PP_Var& host_var, |
- Sender* channel) { |
+PP_Var PluginVarTracker::TrackObjectWithNoReference( |
+ const PP_Var& host_var, |
+ PluginDispatcher* dispatcher) { |
DCHECK(host_var.type == PP_VARTYPE_OBJECT); |
PluginVarInfoMap::iterator found = |
- FindOrMakePluginVarFromHostVar(host_var, channel); |
+ FindOrMakePluginVarFromHostVar(host_var, dispatcher); |
if (found == plugin_var_info_.end()) { |
// The above code should have always made an entry in the map. |
NOTREACHED(); |
@@ -232,12 +234,22 @@ |
return ret; |
} |
-void PluginVarTracker::ReleaseHostObject(Sender* sender, |
+PluginDispatcher* PluginVarTracker::DispatcherForPluginObject( |
+ const PP_Var& plugin_object) const { |
+ DCHECK(plugin_object.type == PP_VARTYPE_OBJECT); |
+ PluginVarInfoMap::const_iterator found = plugin_var_info_.find( |
+ plugin_object.value.as_id); |
+ if (found != plugin_var_info_.end()) |
+ return found->second.host_var.dispatcher; |
+ return NULL; |
+} |
+ |
+void PluginVarTracker::ReleaseHostObject(PluginDispatcher* dispatcher, |
const PP_Var& host_object) { |
// Convert the host object to a normal var valid in the plugin. |
DCHECK(host_object.type == PP_VARTYPE_OBJECT); |
HostVarToPluginVarMap::iterator found = host_var_to_plugin_var_.find( |
- HostVar(sender, host_object.value.as_id)); |
+ HostVar(dispatcher, host_object.value.as_id)); |
if (found == host_var_to_plugin_var_.end()) { |
NOTREACHED(); |
return; |
@@ -268,20 +280,20 @@ |
} |
void PluginVarTracker::SendAddRefObjectMsg(const HostVar& host_var) { |
- host_var.channel->Send(new PpapiHostMsg_PPBVar_AddRefObject( |
+ host_var.dispatcher->Send(new PpapiHostMsg_PPBVar_AddRefObject( |
INTERFACE_ID_PPB_VAR_DEPRECATED, host_var.host_object_id)); |
} |
void PluginVarTracker::SendReleaseObjectMsg(const HostVar& host_var) { |
- host_var.channel->Send(new PpapiHostMsg_PPBVar_ReleaseObject( |
+ host_var.dispatcher->Send(new PpapiHostMsg_PPBVar_ReleaseObject( |
INTERFACE_ID_PPB_VAR_DEPRECATED, host_var.host_object_id)); |
} |
PluginVarTracker::PluginVarInfoMap::iterator |
PluginVarTracker::FindOrMakePluginVarFromHostVar(const PP_Var& var, |
- Sender* channel) { |
+ PluginDispatcher* dispatcher) { |
DCHECK(var.type == PP_VARTYPE_OBJECT); |
- HostVar host_var(channel, var.value.as_id); |
+ HostVar host_var(dispatcher, var.value.as_id); |
HostVarToPluginVarMap::iterator found = |
host_var_to_plugin_var_.find(host_var); |