Skip to content

Commit e571ded

Browse files
committed
webview tests updated, linux webview fix
1 parent f4df5d4 commit e571ded

3 files changed

Lines changed: 456 additions & 0 deletions

File tree

lang/libs/webview/posix/linux.ch

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ const WEBVIEW_BRIDGE_JS : *char = """(function(){'use strict';function generateI
7070
@extern public func gtk_init(argc : *mut int, argv : *mut *mut *char) : int
7171
@extern public func gtk_main()
7272
@extern public func gtk_main_quit()
73+
@extern public func gtk_main_iteration() : int
74+
@extern public func gtk_events_pending() : int
7375
@extern public func gtk_widget_show_all(widget : *mut GtkWidget)
7476
@extern public func gtk_widget_destroy(widget : *mut GtkWidget)
7577
@extern public func gtk_widget_set_size_request(widget : *mut GtkWidget, width : int, height : int)
@@ -437,16 +439,19 @@ func linux_json_escape(sv : std::string_view) : string {
437439
// params}, calls the bound handler, and sends the result back via
438440
// window.__webview__.onReply(id, 0, result).
439441
func linux_on_message(wv : *mut WebView, msg : *char) {
442+
fprintf(stderr, "[WV-BRIDGE] message received\n")
440443
var msg_view = std::string_view::make_no_len(msg)
441444

442445
var id_str = linux_json_value(msg_view, "\"id\":")
443446
var method = linux_json_value(msg_view, "\"method\":")
444447
var params_str = linux_json_value(msg_view, "\"params\":")
445448

446449
if(method.size() == 0) {
450+
fprintf(stderr, "[WV-BRIDGE] empty method\n")
447451
return
448452
}
449453

454+
fprintf(stderr, "[WV-BRIDGE] method=%s\n", method.data())
450455
var method_view = std::string_view::make_view(&method)
451456
var params_view = std::string_view::make_view(&params_str)
452457
var result = wv.bind_ctx.handler(method_view, params_view)
@@ -677,6 +682,15 @@ public func webview_load_html(wv : *mut WebView, html : *char) {
677682
public func webview_evaluate_js(wv : *mut WebView, script : *char) {
678683
if(wv.web_view != null) {
679684
webkit_web_view_run_javascript(wv.web_view as *mut WebKitWebView, script, null, null, null)
685+
// Pump the GLib main loop until no more events are pending so the queued
686+
// JS (e.g. onReply) actually executes. A single iteration may pick up an
687+
// unrelated event (e.g. download-thread I/O) and leave the JS evaluation
688+
// callback still queued; the Promise would then never resolve.
689+
var safety = 0
690+
while(gtk_events_pending() != 0 && safety < 20) {
691+
gtk_main_iteration()
692+
safety = safety + 1
693+
}
680694
}
681695
}
682696

lang/tests/webview/chemical.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ application webview_tests
33
source "src"
44
import cstd
55
import std
6+
import json
67
import test
78
import test_env
89
import webview

0 commit comments

Comments
 (0)