OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MOJO_BINDINGS_JS_HANDLE_H_ | 5 #ifndef MOJO_BINDINGS_JS_HANDLE_H_ |
6 #define MOJO_BINDINGS_JS_HANDLE_H_ | 6 #define MOJO_BINDINGS_JS_HANDLE_H_ |
7 | 7 |
8 #include "gin/converter.h" | 8 #include "gin/converter.h" |
| 9 #include "gin/handle.h" |
| 10 #include "gin/wrappable.h" |
9 #include "mojo/public/cpp/system/core.h" | 11 #include "mojo/public/cpp/system/core.h" |
10 | 12 |
11 namespace gin { | 13 namespace gin { |
12 | 14 |
| 15 // Wrapper for mojo Handles exposed to JavaScript. This ensures the Handle |
| 16 // is Closed when its JS object is garbage collected. |
| 17 class HandleWrapper : public gin::Wrappable<HandleWrapper> { |
| 18 public: |
| 19 static gin::WrapperInfo kWrapperInfo; |
| 20 |
| 21 static gin::Handle<HandleWrapper> Create(v8::Isolate* isolate, |
| 22 MojoHandle handle) { |
| 23 return gin::CreateHandle(isolate, new HandleWrapper(handle)); |
| 24 } |
| 25 |
| 26 mojo::Handle get() const { return handle_.get(); } |
| 27 mojo::Handle release() { return handle_.release(); } |
| 28 void Close() { handle_.reset(); } |
| 29 |
| 30 protected: |
| 31 HandleWrapper(MojoHandle handle); |
| 32 virtual ~HandleWrapper(); |
| 33 mojo::ScopedHandle handle_; |
| 34 }; |
| 35 |
| 36 // Note: It's important to use this converter rather than the one for |
| 37 // MojoHandle, since that will do a simple int32 conversion. It's unfortunate |
| 38 // there's no way to prevent against accidental use. |
| 39 // TODO(mpcomplete): define converters for all Handle subtypes. |
13 template<> | 40 template<> |
14 struct Converter<mojo::Handle> { | 41 struct Converter<mojo::Handle> { |
15 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, | 42 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, |
16 const mojo::Handle& val); | 43 const mojo::Handle& val); |
17 static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, | 44 static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, |
18 mojo::Handle* out); | 45 mojo::Handle* out); |
19 }; | 46 }; |
20 | 47 |
21 } // namespace gin | 48 } // namespace gin |
22 | 49 |
23 #endif // MOJO_BINDINGS_JS_HANDLE_H_ | 50 #endif // MOJO_BINDINGS_JS_HANDLE_H_ |
OLD | NEW |