1 // Copyright (c) 2015 GitHub, Inc.
2 // Use of this source code is governed by the MIT license that can be
3 // found in the LICENSE file.
5 #include "atom/browser/api/trackable_object.h"
7 #include "atom/browser/atom_browser_main_parts.h"
9 #include "base/supports_user_data.h"
15 const char* kTrackedObjectKey = "TrackedObjectKey";
17 class IDUserData : public base::SupportsUserData::Data {
19 explicit IDUserData(int32_t id) : id_(id) {}
21 operator int32_t() const { return id_; }
26 DISALLOW_COPY_AND_ASSIGN(IDUserData);
31 TrackableObjectBase::TrackableObjectBase()
32 : weak_map_id_(0), weak_factory_(this) {
33 cleanup_ = RegisterDestructionCallback(GetDestroyClosure());
36 TrackableObjectBase::~TrackableObjectBase() {
40 base::Closure TrackableObjectBase::GetDestroyClosure() {
41 return base::Bind(&TrackableObjectBase::Destroy, weak_factory_.GetWeakPtr());
44 void TrackableObjectBase::Destroy() {
48 void TrackableObjectBase::AttachAsUserData(base::SupportsUserData* wrapped) {
49 wrapped->SetUserData(kTrackedObjectKey, new IDUserData(weak_map_id_));
53 int32_t TrackableObjectBase::GetIDFromWrappedClass(base::SupportsUserData* w) {
54 auto id = static_cast<IDUserData*>(w->GetUserData(kTrackedObjectKey));
62 base::Closure TrackableObjectBase::RegisterDestructionCallback(
63 const base::Closure& c) {
64 return atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(c);