object_life_monitor.cc 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Copyright (c) 2013 GitHub, Inc.
  2. // Copyright (c) 2012 Intel Corp. All rights reserved.
  3. // Use of this source code is governed by the MIT license that can be
  4. // found in the LICENSE file.
  5. #include "atom/common/api/object_life_monitor.h"
  6. #include "base/bind.h"
  7. #include "base/message_loop/message_loop.h"
  8. namespace atom {
  9. ObjectLifeMonitor::ObjectLifeMonitor(v8::Isolate* isolate,
  10. v8::Local<v8::Object> target)
  11. : target_(isolate, target), weak_ptr_factory_(this) {
  12. target_.SetWeak(this, OnObjectGC, v8::WeakCallbackType::kParameter);
  13. }
  14. ObjectLifeMonitor::~ObjectLifeMonitor() {
  15. if (target_.IsEmpty())
  16. return;
  17. target_.ClearWeak();
  18. target_.Reset();
  19. }
  20. // static
  21. void ObjectLifeMonitor::OnObjectGC(
  22. const v8::WeakCallbackInfo<ObjectLifeMonitor>& data) {
  23. ObjectLifeMonitor* self = data.GetParameter();
  24. self->target_.Reset();
  25. self->RunDestructor();
  26. data.SetSecondPassCallback(Free);
  27. }
  28. // static
  29. void ObjectLifeMonitor::Free(
  30. const v8::WeakCallbackInfo<ObjectLifeMonitor>& data) {
  31. delete data.GetParameter();
  32. }
  33. } // namespace atom