|  | // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef TONIC_DART_PERSISTENT_VALUE_H_ | 
|  | #define TONIC_DART_PERSISTENT_VALUE_H_ | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "dart/runtime/include/dart_api.h" | 
|  |  | 
|  | namespace tonic { | 
|  | class DartState; | 
|  |  | 
|  | // DartPersistentValue is a bookkeeping class to help pair calls to | 
|  | // Dart_NewPersistentHandle with Dart_DeletePersistentHandle. Consider using | 
|  | // this class instead of holding a Dart_PersistentHandle directly so that you | 
|  | // don't leak the Dart_PersistentHandle. | 
|  | class DartPersistentValue { | 
|  | public: | 
|  | DartPersistentValue(); | 
|  | DartPersistentValue(DartState* dart_state, Dart_Handle value); | 
|  | ~DartPersistentValue(); | 
|  |  | 
|  | Dart_PersistentHandle value() const { return value_; } | 
|  | bool is_empty() const { return !value_; } | 
|  |  | 
|  | void Set(DartState* dart_state, Dart_Handle value); | 
|  | void Clear(); | 
|  | Dart_Handle Release(); | 
|  |  | 
|  | const base::WeakPtr<DartState>& dart_state() const { return dart_state_; } | 
|  |  | 
|  | private: | 
|  | base::WeakPtr<DartState> dart_state_; | 
|  | Dart_PersistentHandle value_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(DartPersistentValue); | 
|  | }; | 
|  |  | 
|  | }  // namespace tonic | 
|  |  | 
|  | #endif  // TONIC_DART_PERSISTENT_VALUE_H_ |