refactor: allocate gin_helper::internal::Event on cpp heap (#48161)

This commit is contained in:
Robo 2025-08-27 09:30:50 +09:00 committed by GitHub
commit e0db4046b2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 156 additions and 116 deletions

View file

@ -75,10 +75,10 @@ void ElectronApiSWIPCHandlerImpl::Message(bool internal,
if (session && session->Get()) {
v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate();
v8::HandleScope handle_scope(isolate);
auto event = MakeIPCEvent(isolate, session->Get(), internal);
if (event.IsEmpty())
return;
session->Get()->Message(event, channel, std::move(arguments));
auto* event = MakeIPCEvent(isolate, session->Get(), internal);
v8::Local<v8::Object> event_object =
event->GetWrapper(isolate).ToLocalChecked();
session->Get()->Message(event_object, channel, std::move(arguments));
}
}
@ -90,11 +90,11 @@ void ElectronApiSWIPCHandlerImpl::Invoke(bool internal,
if (session && session->Get()) {
v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate();
v8::HandleScope handle_scope(isolate);
auto event =
auto* event =
MakeIPCEvent(isolate, session->Get(), internal, std::move(callback));
if (event.IsEmpty())
return;
session->Get()->Invoke(event, channel, std::move(arguments));
v8::Local<v8::Object> event_object =
event->GetWrapper(isolate).ToLocalChecked();
session->Get()->Invoke(event_object, channel, std::move(arguments));
}
}
@ -105,10 +105,11 @@ void ElectronApiSWIPCHandlerImpl::ReceivePostMessage(
if (session && session->Get()) {
v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate();
v8::HandleScope handle_scope(isolate);
auto event = MakeIPCEvent(isolate, session->Get(), false);
if (event.IsEmpty())
return;
session->Get()->ReceivePostMessage(event, channel, std::move(message));
auto* event = MakeIPCEvent(isolate, session->Get(), false);
v8::Local<v8::Object> event_object =
event->GetWrapper(isolate).ToLocalChecked();
session->Get()->ReceivePostMessage(event_object, channel,
std::move(message));
}
}
@ -120,11 +121,11 @@ void ElectronApiSWIPCHandlerImpl::MessageSync(bool internal,
if (session && session->Get()) {
v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate();
v8::HandleScope handle_scope(isolate);
auto event =
auto* event =
MakeIPCEvent(isolate, session->Get(), internal, std::move(callback));
if (event.IsEmpty())
return;
session->Get()->MessageSync(event, channel, std::move(arguments));
v8::Local<v8::Object> event_object =
event->GetWrapper(isolate).ToLocalChecked();
session->Get()->MessageSync(event_object, channel, std::move(arguments));
}
}
@ -144,8 +145,7 @@ gin::WeakCell<api::Session>* ElectronApiSWIPCHandlerImpl::GetSession() {
return api::Session::FromBrowserContext(GetBrowserContext());
}
gin_helper::Handle<gin_helper::internal::Event>
ElectronApiSWIPCHandlerImpl::MakeIPCEvent(
gin_helper::internal::Event* ElectronApiSWIPCHandlerImpl::MakeIPCEvent(
v8::Isolate* isolate,
api::Session* session,
bool internal,
@ -159,9 +159,10 @@ ElectronApiSWIPCHandlerImpl::MakeIPCEvent(
return {};
}
gin_helper::Handle<gin_helper::internal::Event> event =
gin_helper::internal::Event* event =
gin_helper::internal::Event::New(isolate);
v8::Local<v8::Object> event_object = event.ToV8().As<v8::Object>();
v8::Local<v8::Object> event_object =
event->GetWrapper(isolate).ToLocalChecked();
gin_helper::Dictionary dict(isolate, event_object);
dict.Set("type", "service-worker");