From fb0a8f6763692a25081fd590eef1ea0850ad434a Mon Sep 17 00:00:00 2001 From: andycall <dongtiangche@outlook.com> Date: Tue, 5 Mar 2024 16:34:59 +0800 Subject: [PATCH] feat: add default event to turn on the JavaScript GC. --- bridge/core/dom/events/event_target.cc | 2 +- bridge/core/events/event_type_names.json5 | 3 ++- webf/lib/src/dom/window.dart | 1 + webf/lib/src/launcher/controller.dart | 5 +++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bridge/core/dom/events/event_target.cc b/bridge/core/dom/events/event_target.cc index aabb6b440e..985f2195dd 100644 --- a/bridge/core/dom/events/event_target.cc +++ b/bridge/core/dom/events/event_target.cc @@ -373,7 +373,7 @@ NativeValue EventTarget::HandleDispatchEventFromDart(int32_t argc, const NativeV assert(event->currentTarget() != nullptr); auto* window = DynamicTo<Window>(event->target()); - if (window != nullptr && event->type() == event_type_names::kload) { + if (window != nullptr && (event->type() == event_type_names::kload || event->type() == event_type_names::kgcopen)) { window->OnLoadEventFired(); } diff --git a/bridge/core/events/event_type_names.json5 b/bridge/core/events/event_type_names.json5 index 57ec82797c..4185ec5f53 100644 --- a/bridge/core/events/event_type_names.json5 +++ b/bridge/core/events/event_type_names.json5 @@ -223,6 +223,7 @@ "webglcontextrestored", "wheel", "zoom", - "intersectionchange" + "intersectionchange", + "gcopen" ] } diff --git a/webf/lib/src/dom/window.dart b/webf/lib/src/dom/window.dart index 03d06dbb21..f86f92b32f 100644 --- a/webf/lib/src/dom/window.dart +++ b/webf/lib/src/dom/window.dart @@ -21,6 +21,7 @@ class Window extends EventTarget { : screen = Screen(context!.contextId, document.controller.ownerFlutterView, document.controller.view), super(context) { BindingBridge.listenEvent(this, 'load'); + BindingBridge.listenEvent(this, 'gcopen'); } @override diff --git a/webf/lib/src/launcher/controller.dart b/webf/lib/src/launcher/controller.dart index 6f811f68b4..bace909504 100644 --- a/webf/lib/src/launcher/controller.dart +++ b/webf/lib/src/launcher/controller.dart @@ -325,6 +325,11 @@ class WebFViewController implements WidgetsBindingObserver { window = Window(BindingContext(view, _contextId, pointer), document); _registerPlatformBrightnessChange(); + // 3 seconds should be enough for page loading, make sure the JavaScript GC was opened. + Timer(Duration(seconds: 3), () { + window.dispatchEvent(Event('gcopen')); + }); + // Blur input element when new input focused. window.addEventListener(EVENT_CLICK, (event) async { if (event.target is Element) {