use webcontents id to identify callbacks

This commit is contained in:
Robo 2015-10-30 08:34:40 +05:30
parent 3a154ab8ea
commit 2c59f4567e
6 changed files with 25 additions and 21 deletions

View file

@ -12,11 +12,11 @@ namespace atom {
namespace api {
IDWeakMap::IDWeakMap() {
id_weak_map_.reset(new atom::IDWeakMap);
IDWeakMap::IDWeakMap() : id_weak_map_(new atom::IDWeakMap) {
}
IDWeakMap::~IDWeakMap() {
id_weak_map_ = nullptr;
}
void IDWeakMap::Set(v8::Isolate* isolate,

View file

@ -22,7 +22,7 @@ class IDWeakMap : public mate::Wrappable {
protected:
IDWeakMap();
virtual ~IDWeakMap();
~IDWeakMap();
// mate::Wrappable:
bool IsDestroyed() const override;
@ -34,7 +34,7 @@ class IDWeakMap : public mate::Wrappable {
bool Has(int32_t id);
void Remove(int32_t id);
scoped_ptr<atom::IDWeakMap> id_weak_map_;
atom::IDWeakMap* id_weak_map_;
DISALLOW_COPY_AND_ASSIGN(IDWeakMap);
};

View file

@ -22,8 +22,6 @@ class CallbacksRegistry
continue if location.indexOf('(native)') isnt -1
continue if location.indexOf('atom.asar') isnt -1
[x, filenameAndLine] = /([^/^\)]*)\)?$/gi.exec(location)
[x, line, column] = /(\d+):(\d+)/g.exec(filenameAndLine)
id += parseInt(line) + parseInt(column)
break
@callbacks[id] = callback

View file

@ -32,15 +32,6 @@ IDWeakMap::IDWeakMap() : next_id_(0) {
IDWeakMap::~IDWeakMap() {
}
int32_t IDWeakMap::Add(v8::Isolate* isolate, v8::Local<v8::Object> object) {
int32_t id = GetNextID();
auto global = make_linked_ptr(new v8::Global<v8::Object>(isolate, object));
ObjectKey* key = new ObjectKey(id, this);
global->SetWeak(key, OnObjectGC, v8::WeakCallbackType::kParameter);
map_[id] = global;
return id;
}
void IDWeakMap::Set(v8::Isolate* isolate,
int32_t id,
v8::Local<v8::Object> object) {
@ -50,6 +41,12 @@ void IDWeakMap::Set(v8::Isolate* isolate,
map_[id] = global;
}
int32_t IDWeakMap::Add(v8::Isolate* isolate, v8::Local<v8::Object> object) {
int32_t id = GetNextID();
Set(isolate, id, object);
return id;
}
v8::MaybeLocal<v8::Object> IDWeakMap::Get(v8::Isolate* isolate, int32_t id) {
auto iter = map_.find(id);
if (iter == map_.end())

View file

@ -19,12 +19,12 @@ class IDWeakMap {
IDWeakMap();
~IDWeakMap();
// Adds |object| to WeakMap and returns its allocated |id|.
int32_t Add(v8::Isolate* isolate, v8::Local<v8::Object> object);
// Sets the object to WeakMap with the given |id|.
void Set(v8::Isolate* isolate, int32_t id, v8::Local<v8::Object> object);
// Adds |object| to WeakMap and returns its allocated |id|.
int32_t Add(v8::Isolate* isolate, v8::Local<v8::Object> object);
// Gets the object from WeakMap by its |id|.
v8::MaybeLocal<v8::Object> Get(v8::Isolate* isolate, int32_t id);