diff --git a/atom/common/native_mate_converters/callback.cc b/atom/common/native_mate_converters/callback.cc index 0be90f63e7..dbfa3b4bab 100644 --- a/atom/common/native_mate_converters/callback.cc +++ b/atom/common/native_mate_converters/callback.cc @@ -4,21 +4,22 @@ #include "atom/common/native_mate_converters/callback.h" +#include "native_mate/wrappable.h" + namespace mate { namespace internal { namespace { -struct TranslaterHolder { +struct TranslaterHolder : public Wrappable { Translater translater; }; // Cached JavaScript version of |CallTranslater|. v8::Persistent g_call_translater; -void CallTranslater(v8::Local external, mate::Arguments* args) { - TranslaterHolder* holder = static_cast(external->Value()); +void CallTranslater(TranslaterHolder* holder, mate::Arguments* args) { holder->translater.Run(args); } @@ -54,7 +55,7 @@ v8::Local CreateFunctionFromTranslater( return BindFunctionWith(isolate, isolate->GetCurrentContext(), call_translater->GetFunction(), - v8::External::New(isolate, holder)); + holder->GetWrapper(isolate)); } } // namespace internal diff --git a/atom/common/native_mate_converters/callback.h b/atom/common/native_mate_converters/callback.h index 4349b9997b..228fc0d3bb 100644 --- a/atom/common/native_mate_converters/callback.h +++ b/atom/common/native_mate_converters/callback.h @@ -101,21 +101,16 @@ struct NativeFunctionInvoker { } }; -// Create a static function that accepts generic callback. -template -Translater ConvertToTranslater(const base::Callback& val) { - return base::Bind(&NativeFunctionInvoker::Go, val); -} - } // namespace internal template -struct Converter > { +struct Converter> { static v8::Local ToV8(v8::Isolate* isolate, const base::Callback& val) { // We don't use CreateFunctionTemplate here because it creates a new // FunctionTemplate everytime, which is cached by V8 and causes leaks. - internal::Translater translater = internal::ConvertToTranslater(val); + internal::Translater translater = base::Bind( + &internal::NativeFunctionInvoker::Go, val); return internal::CreateFunctionFromTranslater(isolate, translater); } static bool FromV8(v8::Isolate* isolate,