Index: mojo/bindings/js/handle.h |
diff --git a/mojo/bindings/js/handle.h b/mojo/bindings/js/handle.h |
index ad03f87501a5a8a7bab1e6fd3ba219fbf1b3b021..35202b07ea674240bdc4b81c6702f718f8b9d696 100644 |
--- a/mojo/bindings/js/handle.h |
+++ b/mojo/bindings/js/handle.h |
@@ -45,6 +45,31 @@ struct Converter<mojo::Handle> { |
mojo::Handle* out); |
}; |
+// We need to specialize the normal gin::Handle converter in order to handle |
+// converting |null| to a wrapper for an empty mojo::Handle. |
+template<> |
+struct Converter<gin::Handle<gin::HandleWrapper> > { |
+ static v8::Handle<v8::Value> ToV8( |
+ v8::Isolate* isolate, const gin::Handle<gin::HandleWrapper>& val) { |
+ return val.ToV8(); |
+ } |
+ |
+ static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, |
+ gin::Handle<gin::HandleWrapper>* out) { |
+ if (val->IsNull()) { |
+ *out = HandleWrapper::Create(isolate, MOJO_HANDLE_INVALID); |
+ return true; |
+ } |
+ |
+ gin::HandleWrapper* object = NULL; |
+ if (!Converter<gin::HandleWrapper*>::FromV8(isolate, val, &object)) { |
+ return false; |
+ } |
+ *out = gin::Handle<gin::HandleWrapper>(val, object); |
+ return true; |
+ } |
+}; |
+ |
} // namespace gin |
#endif // MOJO_BINDINGS_JS_HANDLE_H_ |