Index: webkit/plugins/ppapi/host_var_tracker.cc |
=================================================================== |
--- webkit/plugins/ppapi/host_var_tracker.cc (revision 213561) |
+++ webkit/plugins/ppapi/host_var_tracker.cc (working copy) |
@@ -1,173 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/plugins/ppapi/host_var_tracker.h" |
- |
-#include "base/logging.h" |
-#include "ppapi/c/pp_var.h" |
-#include "webkit/plugins/ppapi/host_array_buffer_var.h" |
-#include "webkit/plugins/ppapi/npobject_var.h" |
-#include "webkit/plugins/ppapi/ppapi_plugin_instance_impl.h" |
- |
-using ppapi::ArrayBufferVar; |
-using ppapi::NPObjectVar; |
- |
-namespace webkit { |
-namespace ppapi { |
- |
-HostVarTracker::HostVarTracker() |
- : VarTracker(SINGLE_THREADED), |
- last_shared_memory_map_id_(0) { |
-} |
- |
-HostVarTracker::~HostVarTracker() { |
-} |
- |
-ArrayBufferVar* HostVarTracker::CreateArrayBuffer(uint32 size_in_bytes) { |
- return new HostArrayBufferVar(size_in_bytes); |
-} |
- |
-ArrayBufferVar* HostVarTracker::CreateShmArrayBuffer( |
- uint32 size_in_bytes, |
- base::SharedMemoryHandle handle) { |
- return new HostArrayBufferVar(size_in_bytes, handle); |
-} |
- |
-void HostVarTracker::AddNPObjectVar(NPObjectVar* object_var) { |
- CheckThreadingPreconditions(); |
- |
- InstanceMap::iterator found_instance = instance_map_.find( |
- object_var->pp_instance()); |
- if (found_instance == instance_map_.end()) { |
- // Lazily create the instance map. |
- DCHECK(object_var->pp_instance() != 0); |
- found_instance = instance_map_.insert(std::make_pair( |
- object_var->pp_instance(), |
- linked_ptr<NPObjectToNPObjectVarMap>(new NPObjectToNPObjectVarMap))). |
- first; |
- } |
- NPObjectToNPObjectVarMap* np_object_map = found_instance->second.get(); |
- |
- DCHECK(np_object_map->find(object_var->np_object()) == |
- np_object_map->end()) << "NPObjectVar already in map"; |
- np_object_map->insert(std::make_pair(object_var->np_object(), object_var)); |
-} |
- |
-void HostVarTracker::RemoveNPObjectVar(NPObjectVar* object_var) { |
- CheckThreadingPreconditions(); |
- |
- InstanceMap::iterator found_instance = instance_map_.find( |
- object_var->pp_instance()); |
- if (found_instance == instance_map_.end()) { |
- NOTREACHED() << "NPObjectVar has invalid instance."; |
- return; |
- } |
- NPObjectToNPObjectVarMap* np_object_map = found_instance->second.get(); |
- |
- NPObjectToNPObjectVarMap::iterator found_object = |
- np_object_map->find(object_var->np_object()); |
- if (found_object == np_object_map->end()) { |
- NOTREACHED() << "NPObjectVar not registered."; |
- return; |
- } |
- if (found_object->second != object_var) { |
- NOTREACHED() << "NPObjectVar doesn't match."; |
- return; |
- } |
- np_object_map->erase(found_object); |
-} |
- |
-NPObjectVar* HostVarTracker::NPObjectVarForNPObject(PP_Instance instance, |
- NPObject* np_object) { |
- CheckThreadingPreconditions(); |
- |
- InstanceMap::iterator found_instance = instance_map_.find(instance); |
- if (found_instance == instance_map_.end()) |
- return NULL; // No such instance. |
- NPObjectToNPObjectVarMap* np_object_map = found_instance->second.get(); |
- |
- NPObjectToNPObjectVarMap::iterator found_object = |
- np_object_map->find(np_object); |
- if (found_object == np_object_map->end()) |
- return NULL; // No such object. |
- return found_object->second; |
-} |
- |
-int HostVarTracker::GetLiveNPObjectVarsForInstance(PP_Instance instance) const { |
- CheckThreadingPreconditions(); |
- |
- InstanceMap::const_iterator found = instance_map_.find(instance); |
- if (found == instance_map_.end()) |
- return 0; |
- return static_cast<int>(found->second->size()); |
-} |
- |
-void HostVarTracker::DidDeleteInstance(PP_Instance instance) { |
- CheckThreadingPreconditions(); |
- |
- InstanceMap::iterator found_instance = instance_map_.find(instance); |
- if (found_instance == instance_map_.end()) |
- return; // Nothing to do. |
- NPObjectToNPObjectVarMap* np_object_map = found_instance->second.get(); |
- |
- // Force delete all var references. ForceReleaseNPObject() will cause |
- // this object, and potentially others it references, to be removed from |
- // |np_object_map|. |
- while (!np_object_map->empty()) { |
- ForceReleaseNPObject(np_object_map->begin()->second); |
- } |
- |
- // Remove the record for this instance since it should be empty. |
- DCHECK(np_object_map->empty()); |
- instance_map_.erase(found_instance); |
-} |
- |
-void HostVarTracker::ForceReleaseNPObject(::ppapi::NPObjectVar* object_var) { |
- object_var->InstanceDeleted(); |
- VarMap::iterator iter = live_vars_.find(object_var->GetExistingVarID()); |
- if (iter == live_vars_.end()) { |
- NOTREACHED(); |
- return; |
- } |
- iter->second.ref_count = 0; |
- DCHECK(iter->second.track_with_no_reference_count == 0); |
- DeleteObjectInfoIfNecessary(iter); |
-} |
- |
-int HostVarTracker::TrackSharedMemoryHandle(PP_Instance instance, |
- base::SharedMemoryHandle handle, |
- uint32 size_in_bytes) { |
- SharedMemoryMapEntry entry; |
- entry.instance = instance; |
- entry.handle = handle; |
- entry.size_in_bytes = size_in_bytes; |
- |
- // Find a free id for our map. |
- while (shared_memory_map_.find(last_shared_memory_map_id_) != |
- shared_memory_map_.end()) { |
- ++last_shared_memory_map_id_; |
- } |
- shared_memory_map_[last_shared_memory_map_id_] = entry; |
- return last_shared_memory_map_id_; |
-} |
- |
-bool HostVarTracker::StopTrackingSharedMemoryHandle( |
- int id, |
- PP_Instance instance, |
- base::SharedMemoryHandle* handle, |
- uint32* size_in_bytes) { |
- SharedMemoryMap::iterator it = shared_memory_map_.find(id); |
- if (it == shared_memory_map_.end()) |
- return false; |
- if (it->second.instance != instance) |
- return false; |
- |
- *handle = it->second.handle; |
- *size_in_bytes = it->second.size_in_bytes; |
- shared_memory_map_.erase(it); |
- return true; |
-} |
- |
-} // namespace ppapi |
-} // namespace webkit |