Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Unified Diff: content/renderer/pepper/host_var_tracker.cc

Issue 512983004: Revert of Replace NPObject usage in ppapi with gin (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/pepper/host_var_tracker.h ('k') | content/renderer/pepper/host_var_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/pepper/host_var_tracker.cc
diff --git a/content/renderer/pepper/host_var_tracker.cc b/content/renderer/pepper/host_var_tracker.cc
index 494d9b9a1731725b0637b520fdaf2b68ff9cad4e..700fbaf28be3d8246c3d56965e81ba90d73c5c4b 100644
--- a/content/renderer/pepper/host_var_tracker.cc
+++ b/content/renderer/pepper/host_var_tracker.cc
@@ -6,36 +6,15 @@
#include "base/logging.h"
#include "content/renderer/pepper/host_array_buffer_var.h"
-#include "content/renderer/pepper/host_globals.h"
#include "content/renderer/pepper/host_resource_var.h"
+#include "content/renderer/pepper/npobject_var.h"
#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
-#include "content/renderer/pepper/v8object_var.h"
#include "ppapi/c/pp_var.h"
using ppapi::ArrayBufferVar;
-using ppapi::V8ObjectVar;
+using ppapi::NPObjectVar;
namespace content {
-
-HostVarTracker::V8ObjectVarKey::V8ObjectVarKey(V8ObjectVar* object_var)
- : instance(object_var->instance()->pp_instance()) {
- v8::Local<v8::Object> object = object_var->GetHandle();
- hash = object.IsEmpty() ? 0 : object->GetIdentityHash();
-}
-
-HostVarTracker::V8ObjectVarKey::V8ObjectVarKey(PP_Instance instance,
- v8::Handle<v8::Object> object)
- : instance(instance),
- hash(object.IsEmpty() ? 0 : object->GetIdentityHash()) {}
-
-HostVarTracker::V8ObjectVarKey::~V8ObjectVarKey() {}
-
-bool HostVarTracker::V8ObjectVarKey::operator<(
- const V8ObjectVarKey& other) const {
- if (instance == other.instance)
- return hash < other.hash;
- return instance < other.instance;
-}
HostVarTracker::HostVarTracker()
: VarTracker(SINGLE_THREADED), last_shared_memory_map_id_(0) {}
@@ -52,44 +31,74 @@
return new HostArrayBufferVar(size_in_bytes, handle);
}
-void HostVarTracker::AddV8ObjectVar(V8ObjectVar* object_var) {
+void HostVarTracker::AddNPObjectVar(NPObjectVar* object_var) {
CheckThreadingPreconditions();
- v8::HandleScope handle_scope(object_var->instance()->GetIsolate());
- DCHECK(GetForV8Object(object_var->instance()->pp_instance(),
- object_var->GetHandle()) == object_map_.end());
- object_map_.insert(std::make_pair(V8ObjectVarKey(object_var), object_var));
+
+ 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::RemoveV8ObjectVar(V8ObjectVar* object_var) {
+void HostVarTracker::RemoveNPObjectVar(NPObjectVar* object_var) {
CheckThreadingPreconditions();
- v8::HandleScope handle_scope(object_var->instance()->GetIsolate());
- ObjectMap::iterator it = GetForV8Object(
- object_var->instance()->pp_instance(), object_var->GetHandle());
- DCHECK(it != object_map_.end());
- object_map_.erase(it);
+
+ 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);
}
-PP_Var HostVarTracker::V8ObjectVarForV8Object(PP_Instance instance,
- v8::Handle<v8::Object> object) {
+NPObjectVar* HostVarTracker::NPObjectVarForNPObject(PP_Instance instance,
+ NPObject* np_object) {
CheckThreadingPreconditions();
- ObjectMap::const_iterator it = GetForV8Object(instance, object);
- if (it == object_map_.end())
- return (new V8ObjectVar(instance, object))->GetPPVar();
- return it->second->GetPPVar();
+
+ 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::GetLiveV8ObjectVarsForTest(PP_Instance instance) {
+int HostVarTracker::GetLiveNPObjectVarsForInstance(PP_Instance instance) const {
CheckThreadingPreconditions();
- int count = 0;
- // Use a key with an empty handle to find the v8 object var in the map with
- // the given instance and the lowest hash.
- V8ObjectVarKey key(instance, v8::Handle<v8::Object>());
- ObjectMap::const_iterator it = object_map_.lower_bound(key);
- while (it != object_map_.end() && it->first.instance == instance) {
- ++count;
- ++it;
- }
- return count;
+
+ InstanceMap::const_iterator found = instance_map_.find(instance);
+ if (found == instance_map_.end())
+ return 0;
+ return static_cast<int>(found->second->size());
}
PP_Var HostVarTracker::MakeResourcePPVarFromMessage(
@@ -107,27 +116,27 @@
return new HostResourceVar(pp_resource);
}
-void HostVarTracker::DidDeleteInstance(PP_Instance pp_instance) {
+void HostVarTracker::DidDeleteInstance(PP_Instance instance) {
CheckThreadingPreconditions();
- PepperPluginInstanceImpl* instance =
- HostGlobals::Get()->GetInstance(pp_instance);
- v8::HandleScope handle_scope(instance->GetIsolate());
- // Force delete all var references. ForceReleaseV8Object() will cause
+ 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
- // |live_vars_|.
+ // |np_object_map|.
+ while (!np_object_map->empty()) {
+ ForceReleaseNPObject(np_object_map->begin()->second);
+ }
- // Use a key with an empty handle to find the v8 object var in the map with
- // the given instance and the lowest hash.
- V8ObjectVarKey key(pp_instance, v8::Handle<v8::Object>());
- ObjectMap::iterator it = object_map_.lower_bound(key);
- while (it != object_map_.end() && it->first.instance == pp_instance) {
- ForceReleaseV8Object(it->second);
- object_map_.erase(it++);
- }
+ // Remove the record for this instance since it should be empty.
+ DCHECK(np_object_map->empty());
+ instance_map_.erase(found_instance);
}
-void HostVarTracker::ForceReleaseV8Object(ppapi::V8ObjectVar* object_var) {
+void HostVarTracker::ForceReleaseNPObject(ppapi::NPObjectVar* object_var) {
object_var->InstanceDeleted();
VarMap::iterator iter = live_vars_.find(object_var->GetExistingVarID());
if (iter == live_vars_.end()) {
@@ -137,19 +146,6 @@
iter->second.ref_count = 0;
DCHECK(iter->second.track_with_no_reference_count == 0);
DeleteObjectInfoIfNecessary(iter);
-}
-
-HostVarTracker::ObjectMap::iterator HostVarTracker::GetForV8Object(
- PP_Instance instance,
- v8::Handle<v8::Object> object) {
- std::pair<ObjectMap::iterator, ObjectMap::iterator> range =
- object_map_.equal_range(V8ObjectVarKey(instance, object));
-
- for (ObjectMap::iterator it = range.first; it != range.second; ++it) {
- if (object == it->second->GetHandle())
- return it;
- }
- return object_map_.end();
}
int HostVarTracker::TrackSharedMemoryHandle(PP_Instance instance,
« no previous file with comments | « content/renderer/pepper/host_var_tracker.h ('k') | content/renderer/pepper/host_var_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698