summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/plugin_var_tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/plugin_var_tracker.cc')
-rw-r--r--ppapi/proxy/plugin_var_tracker.cc29
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);