diff --git a/shell/common/gin_helper/event_emitter.h b/shell/common/gin_helper/event_emitter.h index 74b8c7f379a5..2a9485696dd4 100644 --- a/shell/common/gin_helper/event_emitter.h +++ b/shell/common/gin_helper/event_emitter.h @@ -23,37 +23,30 @@ namespace gin_helper { template class EventEmitter : public gin_helper::Wrappable { public: - using Base = gin_helper::Wrappable; - - // Make the convenient methods visible: - // https://isocpp.org/wiki/faq/templates#nondependent-name-lookup-members - v8::Isolate* isolate() const { return Base::isolate(); } - v8::Local GetWrapper() const { return Base::GetWrapper(); } - v8::MaybeLocal GetWrapper(v8::Isolate* isolate) const { - return Base::GetWrapper(isolate); - } - // this.emit(name, new Event(), args...); template bool Emit(const std::string_view name, Args&&... args) { - v8::HandleScope handle_scope(isolate()); - v8::Local wrapper = GetWrapper(); + v8::Isolate* const isolate = this->isolate(); + v8::HandleScope handle_scope{isolate}; + v8::Local wrapper = this->GetWrapper(); if (wrapper.IsEmpty()) return false; - gin::Handle event = - internal::Event::New(isolate()); - return EmitWithEvent(name, event, std::forward(args)...); + gin::Handle event = internal::Event::New(isolate); + // It's possible that |this| will be deleted by EmitEvent, so save anything + // we need from |this| before calling EmitEvent. + EmitEvent(isolate, wrapper, name, event, std::forward(args)...); + return event->GetDefaultPrevented(); } // this.emit(name, args...); template void EmitWithoutEvent(const std::string_view name, Args&&... args) { - v8::HandleScope handle_scope(isolate()); - v8::Local wrapper = GetWrapper(); + v8::Isolate* const isolate = this->isolate(); + v8::HandleScope handle_scope{isolate}; + v8::Local wrapper = this->GetWrapper(); if (wrapper.IsEmpty()) return; - gin_helper::EmitEvent(isolate(), GetWrapper(), name, - std::forward(args)...); + EmitEvent(isolate, wrapper, name, std::forward(args)...); } // disable copy @@ -62,20 +55,6 @@ class EventEmitter : public gin_helper::Wrappable { protected: EventEmitter() = default; - - private: - // this.emit(name, event, args...); - template - bool EmitWithEvent(const std::string_view name, - gin::Handle event, - Args&&... args) { - // It's possible that |this| will be deleted by EmitEvent, so save anything - // we need from |this| before calling EmitEvent. - auto* isolate = this->isolate(); - gin_helper::EmitEvent(isolate, GetWrapper(), name, event, - std::forward(args)...); - return event->GetDefaultPrevented(); - } }; } // namespace gin_helper