AttachAsUserData now can assume the existence of wrapper

This commit is contained in:
Cheng Zhao 2016-08-02 15:28:32 +09:00
parent 1505a46ed0
commit 846ec5ba49
3 changed files with 6 additions and 15 deletions

View file

@ -29,7 +29,7 @@ class IDUserData : public base::SupportsUserData::Data {
} // namespace } // namespace
TrackableObjectBase::TrackableObjectBase() TrackableObjectBase::TrackableObjectBase()
: weak_map_id_(0), wrapped_(nullptr), weak_factory_(this) { : weak_map_id_(0), weak_factory_(this) {
cleanup_ = RegisterDestructionCallback(GetDestroyClosure()); cleanup_ = RegisterDestructionCallback(GetDestroyClosure());
} }
@ -46,14 +46,7 @@ void TrackableObjectBase::Destroy() {
} }
void TrackableObjectBase::AttachAsUserData(base::SupportsUserData* wrapped) { void TrackableObjectBase::AttachAsUserData(base::SupportsUserData* wrapped) {
if (weak_map_id_ != 0) { wrapped->SetUserData(kTrackedObjectKey, new IDUserData(weak_map_id_));
wrapped->SetUserData(kTrackedObjectKey, new IDUserData(weak_map_id_));
wrapped_ = nullptr;
} else {
// If the TrackableObjectBase is not ready yet then delay SetUserData until
// AfterInit is called.
wrapped_ = wrapped;
}
} }
// static // static

View file

@ -44,7 +44,6 @@ class TrackableObjectBase {
static base::Closure RegisterDestructionCallback(const base::Closure& c); static base::Closure RegisterDestructionCallback(const base::Closure& c);
int32_t weak_map_id_; int32_t weak_map_id_;
base::SupportsUserData* wrapped_;
private: private:
void Destroy(); void Destroy();
@ -110,14 +109,13 @@ class TrackableObject : public TrackableObjectBase,
RemoveFromWeakMap(); RemoveFromWeakMap();
} }
void AfterInit(v8::Isolate* isolate) override { void InitWith(v8::Isolate* isolate, v8::Local<v8::Object> wrapper) override {
WrappableBase::InitWith(isolate, wrapper);
if (!weak_map_) { if (!weak_map_) {
weak_map_ = new atom::KeyWeakMap<int32_t>; weak_map_ = new atom::KeyWeakMap<int32_t>;
} }
weak_map_id_ = ++next_id_; weak_map_id_ = ++next_id_;
weak_map_->Set(isolate, weak_map_id_, Wrappable<T>::GetWrapper()); weak_map_->Set(isolate, weak_map_id_, wrapper);
if (wrapped_)
AttachAsUserData(wrapped_);
} }
private: private:

2
vendor/native_mate vendored

@ -1 +1 @@
Subproject commit bd20bde1a257b1b740dfeafc220c331ead3b66ab Subproject commit ab62755a886d424727f4959f4339555865490ae8