Index: tonic/dart_persistent_value.h |
diff --git a/tonic/dart_persistent_value.h b/tonic/dart_persistent_value.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c6215c4b077a42f11febc19f94f0846e591118bd |
--- /dev/null |
+++ b/tonic/dart_persistent_value.h |
@@ -0,0 +1,43 @@ |
+// 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 SKY_ENGINE_TONIC_DART_PERSISTENT_VALUE_H_ |
+#define SKY_ENGINE_TONIC_DART_PERSISTENT_VALUE_H_ |
+ |
+#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "dart/runtime/include/dart_api.h" |
+ |
+namespace blink { |
+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 blink |
+ |
+#endif // SKY_ENGINE_TONIC_DART_PERSISTENT_VALUE_H_ |