diff --git a/shell/common/gin_helper/trackable_object.h b/shell/common/gin_helper/trackable_object.h index 7a7e6350dd99..aa040aec5889 100644 --- a/shell/common/gin_helper/trackable_object.h +++ b/shell/common/gin_helper/trackable_object.h @@ -42,11 +42,12 @@ class TrackableObjectBase : public CleanedUpAtExit { // Returns a closure that can destroy the native class. base::OnceClosure GetDestroyClosure(); - int32_t weak_map_id_ = 0; - private: void Destroy(); + static inline int32_t next_id_ = 0; + const int32_t weak_map_id_ = ++next_id_; + base::WeakPtrFactory weak_factory_{this}; }; @@ -111,26 +112,21 @@ class TrackableObject : public TrackableObjectBase, public EventEmitter { } protected: - TrackableObject() { weak_map_id_ = ++next_id_; } - + TrackableObject() = default; ~TrackableObject() override { RemoveFromWeakMap(); } void InitWith(v8::Isolate* isolate, v8::Local wrapper) override { if (!weak_map_) { weak_map_ = new electron::KeyWeakMap; } - weak_map_->Set(isolate, weak_map_id_, wrapper); + weak_map_->Set(isolate, weak_map_id(), wrapper); gin_helper::WrappableBase::InitWith(isolate, wrapper); } private: - static int32_t next_id_; static electron::KeyWeakMap* weak_map_; // leaked on purpose }; -template -int32_t TrackableObject::next_id_ = 0; - template electron::KeyWeakMap* TrackableObject::weak_map_ = nullptr;