electron/atom/browser/api/trackable_object.cc

66 строки
1.5 KiB
C++
Исходник Обычный вид История

2015-06-24 09:36:05 +03:00
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/trackable_object.h"
2015-06-24 12:58:12 +03:00
#include "atom/browser/atom_browser_main_parts.h"
#include "base/bind.h"
#include "base/supports_user_data.h"
2015-06-24 09:36:05 +03:00
namespace mate {
namespace {
const char* kTrackedObjectKey = "TrackedObjectKey";
class IDUserData : public base::SupportsUserData::Data {
public:
explicit IDUserData(int32_t id) : id_(id) {}
operator int32_t() const { return id_; }
private:
int32_t id_;
DISALLOW_COPY_AND_ASSIGN(IDUserData);
};
} // namespace
2015-06-24 12:58:12 +03:00
TrackableObjectBase::TrackableObjectBase()
: weak_map_id_(0), weak_factory_(this) {
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(
GetDestroyClosure());
2015-06-24 09:36:05 +03:00
}
2018-04-18 04:55:30 +03:00
TrackableObjectBase::~TrackableObjectBase() {}
2015-06-24 09:36:05 +03:00
base::OnceClosure TrackableObjectBase::GetDestroyClosure() {
return base::BindOnce(&TrackableObjectBase::Destroy,
weak_factory_.GetWeakPtr());
}
void TrackableObjectBase::Destroy() {
delete this;
}
2015-06-24 12:58:12 +03:00
void TrackableObjectBase::AttachAsUserData(base::SupportsUserData* wrapped) {
wrapped->SetUserData(kTrackedObjectKey,
2018-04-18 04:55:30 +03:00
std::make_unique<IDUserData>(weak_map_id_));
}
2015-06-24 12:58:12 +03:00
// static
int32_t TrackableObjectBase::GetIDFromWrappedClass(
base::SupportsUserData* wrapped) {
if (wrapped) {
auto* id = static_cast<IDUserData*>(
wrapped->GetUserData(kTrackedObjectKey));
if (id)
return *id;
}
return 0;
2015-06-24 12:58:12 +03:00
}
2015-06-24 09:36:05 +03:00
} // namespace mate