| Index: mojo/bindings/js/handle.h
|
| diff --git a/mojo/bindings/js/handle.h b/mojo/bindings/js/handle.h
|
| index 3cd4cf572f9585475dc30e64937216b34a00330a..ad03f87501a5a8a7bab1e6fd3ba219fbf1b3b021 100644
|
| --- a/mojo/bindings/js/handle.h
|
| +++ b/mojo/bindings/js/handle.h
|
| @@ -6,10 +6,37 @@
|
| #define MOJO_BINDINGS_JS_HANDLE_H_
|
|
|
| #include "gin/converter.h"
|
| +#include "gin/handle.h"
|
| +#include "gin/wrappable.h"
|
| #include "mojo/public/cpp/system/core.h"
|
|
|
| namespace gin {
|
|
|
| +// Wrapper for mojo Handles exposed to JavaScript. This ensures the Handle
|
| +// is Closed when its JS object is garbage collected.
|
| +class HandleWrapper : public gin::Wrappable<HandleWrapper> {
|
| + public:
|
| + static gin::WrapperInfo kWrapperInfo;
|
| +
|
| + static gin::Handle<HandleWrapper> Create(v8::Isolate* isolate,
|
| + MojoHandle handle) {
|
| + return gin::CreateHandle(isolate, new HandleWrapper(handle));
|
| + }
|
| +
|
| + mojo::Handle get() const { return handle_.get(); }
|
| + mojo::Handle release() { return handle_.release(); }
|
| + void Close() { handle_.reset(); }
|
| +
|
| + protected:
|
| + HandleWrapper(MojoHandle handle);
|
| + virtual ~HandleWrapper();
|
| + mojo::ScopedHandle handle_;
|
| +};
|
| +
|
| +// Note: It's important to use this converter rather than the one for
|
| +// MojoHandle, since that will do a simple int32 conversion. It's unfortunate
|
| +// there's no way to prevent against accidental use.
|
| +// TODO(mpcomplete): define converters for all Handle subtypes.
|
| template<>
|
| struct Converter<mojo::Handle> {
|
| static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
|
|
|