summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/ppapi/host_resource_tracker.cc
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-20 21:50:11 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-20 21:50:11 +0000
commit0bc2efd12616518e3952be87a078d53ab5adfca5 (patch)
tree5cb3aea9931d3d629a3dcc3d30a6806b4c411bb8 /webkit/plugins/ppapi/host_resource_tracker.cc
parenta0c33d1073c9f10672aef2ab6e2eec4eb712827e (diff)
downloadchromium_src-0bc2efd12616518e3952be87a078d53ab5adfca5.zip
chromium_src-0bc2efd12616518e3952be87a078d53ab5adfca5.tar.gz
chromium_src-0bc2efd12616518e3952be87a078d53ab5adfca5.tar.bz2
Split HostVarTracker out of HostResourceTracker.
For the shared stuff we have a ppapi/shared_impl/VarTracker and a ppapi/shared_impl/ResourceTracker. The host side of the proxy inherits HostResourceTracker from ResourceTracker and then adds a bunch of var tracking stuff to that, which makes no sense. This moves the var tracking stuff out into a separate HostVarTracker so that's all in one object. The host version just adds the NPObject tracking on top of the shared VarTracking. BUG= TEST= Review URL: http://codereview.chromium.org/8322017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106593 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/ppapi/host_resource_tracker.cc')
-rw-r--r--webkit/plugins/ppapi/host_resource_tracker.cc95
1 files changed, 5 insertions, 90 deletions
diff --git a/webkit/plugins/ppapi/host_resource_tracker.cc b/webkit/plugins/ppapi/host_resource_tracker.cc
index 63a37dd..69119e49 100644
--- a/webkit/plugins/ppapi/host_resource_tracker.cc
+++ b/webkit/plugins/ppapi/host_resource_tracker.cc
@@ -29,7 +29,6 @@ using ppapi::CheckIdType;
using ppapi::MakeTypedId;
using ppapi::NPObjectVar;
using ppapi::PPIdType;
-using ppapi::Var;
namespace webkit {
namespace ppapi {
@@ -42,8 +41,6 @@ namespace {
} // namespace
-typedef std::map<NPObject*, NPObjectVar*> NPObjectToNPObjectVarMap;
-
struct HostResourceTracker::InstanceData {
InstanceData() : instance(0) {}
@@ -51,12 +48,6 @@ struct HostResourceTracker::InstanceData {
// destroyed, it will notify us and we'll delete all associated data.
PluginInstance* instance;
- // Tracks all live NPObjectVars used by this module so we can map NPObjects
- // to the corresponding object, and also release these properly if the
- // instance goes away when there are still refs. These are non-owning
- // references.
- NPObjectToNPObjectVarMap np_object_to_object_var;
-
// Lazily allocated function proxies for the different interfaces.
scoped_ptr< ::ppapi::FunctionGroupBase >
function_proxies[::ppapi::proxy::INTERFACE_ID_COUNT];
@@ -70,39 +61,6 @@ HostResourceTracker::HostResourceTracker() {
HostResourceTracker::~HostResourceTracker() {
}
-void HostResourceTracker::CleanupInstanceData(PP_Instance instance,
- bool delete_instance) {
- DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE))
- << instance << " is not a PP_Instance.";
- InstanceMap::iterator found = instance_map_.find(instance);
- if (found == instance_map_.end()) {
- NOTREACHED();
- return;
- }
- InstanceData& data = *found->second;
-
- // Force delete all var references. Need to make a copy so we can iterate over
- // the map while deleting stuff from it.
- NPObjectToNPObjectVarMap np_object_map_copy = data.np_object_to_object_var;
- NPObjectToNPObjectVarMap::iterator cur_var =
- np_object_map_copy.begin();
- while (cur_var != np_object_map_copy.end()) {
- NPObjectToNPObjectVarMap::iterator current = cur_var++;
-
- // Clear the object from the var mapping and the live instance object list.
- int32 var_id = current->second->GetExistingVarID();
- if (var_id)
- live_vars_.erase(var_id);
-
- current->second->InstanceDeleted();
- data.np_object_to_object_var.erase(current->first);
- }
- DCHECK(data.np_object_to_object_var.empty());
-
- if (delete_instance)
- instance_map_.erase(found);
-}
-
::ppapi::FunctionGroupBase* HostResourceTracker::GetFunctionAPI(
PP_Instance pp_instance,
::ppapi::proxy::InterfaceID id) {
@@ -163,52 +121,6 @@ void HostResourceTracker::LastPluginRefWasDeleted(::ppapi::Resource* object) {
}
}
-void HostResourceTracker::AddNPObjectVar(NPObjectVar* object_var) {
- DCHECK(instance_map_.find(object_var->pp_instance()) != instance_map_.end());
- InstanceData& data = *instance_map_[object_var->pp_instance()].get();
-
- DCHECK(data.np_object_to_object_var.find(object_var->np_object()) ==
- data.np_object_to_object_var.end()) << "NPObjectVar already in map";
- data.np_object_to_object_var[object_var->np_object()] = object_var;
-}
-
-void HostResourceTracker::RemoveNPObjectVar(NPObjectVar* object_var) {
- DCHECK(instance_map_.find(object_var->pp_instance()) != instance_map_.end());
- InstanceData& data = *instance_map_[object_var->pp_instance()].get();
-
- NPObjectToNPObjectVarMap::iterator found =
- data.np_object_to_object_var.find(object_var->np_object());
- if (found == data.np_object_to_object_var.end()) {
- NOTREACHED() << "NPObjectVar not registered.";
- return;
- }
- if (found->second != object_var) {
- NOTREACHED() << "NPObjectVar doesn't match.";
- return;
- }
- data.np_object_to_object_var.erase(found);
-}
-
-NPObjectVar* HostResourceTracker::NPObjectVarForNPObject(PP_Instance instance,
- NPObject* np_object) {
- DCHECK(instance_map_.find(instance) != instance_map_.end());
- InstanceData& data = *instance_map_[instance].get();
-
- NPObjectToNPObjectVarMap::iterator found =
- data.np_object_to_object_var.find(np_object);
- if (found == data.np_object_to_object_var.end())
- return NULL;
- return found->second;
-}
-
-int HostResourceTracker::GetLiveNPObjectVarsForInstance(
- PP_Instance instance) const {
- InstanceMap::const_iterator found = instance_map_.find(instance);
- if (found == instance_map_.end())
- return 0;
- return static_cast<int>(found->second->np_object_to_object_var.size());
-}
-
PP_Instance HostResourceTracker::AddInstance(PluginInstance* instance) {
DCHECK(instance_map_.find(instance->pp_instance()) == instance_map_.end());
@@ -233,12 +145,15 @@ PP_Instance HostResourceTracker::AddInstance(PluginInstance* instance) {
void HostResourceTracker::InstanceDeleted(PP_Instance instance) {
DidDeleteInstance(instance);
- CleanupInstanceData(instance, true);
+ HostGlobals::Get()->host_var_tracker()->ForceFreeNPObjectsForInstance(
+ instance);
+ instance_map_.erase(instance);
}
void HostResourceTracker::InstanceCrashed(PP_Instance instance) {
DidDeleteInstance(instance);
- CleanupInstanceData(instance, false);
+ HostGlobals::Get()->host_var_tracker()->ForceFreeNPObjectsForInstance(
+ instance);
}
PluginInstance* HostResourceTracker::GetInstance(PP_Instance instance) {