blob: 8387dcab434b2b4dcfe9283657db910f1e642e01 [file] [log] [blame]
John McCutchan080c33e2015-07-16 12:35:35 -07001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "tonic/dart_persistent_value.h"
6
7#include "tonic/dart_isolate_scope.h"
8#include "tonic/dart_state.h"
9
John McCutchandeace8f2015-07-21 08:01:40 -070010namespace tonic {
John McCutchan080c33e2015-07-16 12:35:35 -070011
12DartPersistentValue::DartPersistentValue() : value_(nullptr) {
13}
14
15DartPersistentValue::DartPersistentValue(DartState* dart_state,
16 Dart_Handle value)
17 : value_(nullptr) {
18 Set(dart_state, value);
19}
20
21DartPersistentValue::~DartPersistentValue() {
22 Clear();
23}
24
25void DartPersistentValue::Set(DartState* dart_state, Dart_Handle value) {
26 DCHECK(is_empty());
27 dart_state_ = dart_state->GetWeakPtr();
28 value_ = Dart_NewPersistentHandle(value);
29}
30
31void DartPersistentValue::Clear() {
32 if (!value_ || !dart_state_.get())
33 return;
34
35 DartIsolateScope scope(dart_state_->isolate());
36 Dart_DeletePersistentHandle(value_);
37 dart_state_ = base::WeakPtr<DartState>();
38 value_ = nullptr;
39}
40
41Dart_Handle DartPersistentValue::Release() {
42 if (!value_)
43 return nullptr;
44 Dart_Handle local = Dart_HandleFromPersistent(value_);
45 Clear();
46 return local;
47}
48}