diff options
Diffstat (limited to 'ppapi/proxy/plugin_var_tracker.cc')
-rw-r--r-- | ppapi/proxy/plugin_var_tracker.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/ppapi/proxy/plugin_var_tracker.cc b/ppapi/proxy/plugin_var_tracker.cc index 42370be..c079716 100644 --- a/ppapi/proxy/plugin_var_tracker.cc +++ b/ppapi/proxy/plugin_var_tracker.cc @@ -15,6 +15,9 @@ namespace proxy { namespace { +// When non-NULL, this object overrides the VarTrackerSingleton. +PluginVarTracker* var_tracker_override = NULL; + class RefCountedString : public base::RefCounted<RefCountedString> { public: RefCountedString() { @@ -64,7 +67,15 @@ PluginVarTracker::PluginVarTracker() : last_plugin_object_id_(0) { PluginVarTracker::~PluginVarTracker() { } +// static +void PluginVarTracker::SetInstanceForTest(PluginVarTracker* tracker) { + var_tracker_override = tracker; +} + +// static PluginVarTracker* PluginVarTracker::GetInstance() { + if (var_tracker_override) + return var_tracker_override; return Singleton<PluginVarTracker>::get(); } @@ -221,6 +232,24 @@ PP_Var PluginVarTracker::GetHostObject(const PP_Var& plugin_object) const { return ret; } +void PluginVarTracker::ReleaseHostObject(Sender* sender, + 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)); + if (found == host_var_to_plugin_var_.end()) { + NOTREACHED(); + return; + } + + // Now just release the object like normal. + PP_Var plugin_object; + plugin_object.type = PP_VARTYPE_OBJECT; + plugin_object.value.as_id = found->second; + Release(plugin_object); +} + int PluginVarTracker::GetRefCountForObject(const PP_Var& plugin_object) { PluginVarInfoMap::iterator found = plugin_var_info_.find( plugin_object.value.as_id); |