From b9b40b1ec1713c8ca5c266b01cfce766f3671097 Mon Sep 17 00:00:00 2001 From: RonniSkansing Date: Sat, 12 Sep 2026 20:17:05 +0200 Subject: [PATCH] fix broken remote browser init Signed-off-by: RonniSkansing --- backend/embedded/remotebrowser_prelude.js | 4 +++- backend/remotebrowser/prelude_test.go | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/backend/embedded/remotebrowser_prelude.js b/backend/embedded/remotebrowser_prelude.js index 3ff51e93..4afc05df 100644 --- a/backend/embedded/remotebrowser_prelude.js +++ b/backend/embedded/remotebrowser_prelude.js @@ -56,7 +56,9 @@ } newSession = function (opts) { - var s = baseNewSession(opts); + // Default to {} so a no-argument newSession() call does not forward + // undefined, which the native binding would reject when it parses options. + var s = baseNewSession(opts || {}); // present is true when the selector matches at least one node. s.present = function (sel) { return s.getNodeCount(sel) > 0; }; diff --git a/backend/remotebrowser/prelude_test.go b/backend/remotebrowser/prelude_test.go index c96cc182..188f773f 100644 --- a/backend/remotebrowser/prelude_test.go +++ b/backend/remotebrowser/prelude_test.go @@ -19,7 +19,16 @@ func TestPreludeStateMachine(t *testing.T) { // 0 password, 1 totp, 2 done. stage := 0 - newSession := func(goja.FunctionCall) goja.Value { + // badArg records the regression where the prelude wrapper forwards undefined + // to the native newSession for a no-argument call. + badArg := false + newSession := func(call goja.FunctionCall) goja.Value { + if len(call.Arguments) > 0 { + a := call.Argument(0) + if goja.IsUndefined(a) || goja.IsNull(a) { + badArg = true + } + } s := vm.NewObject() _ = s.Set("location", func(goja.FunctionCall) goja.Value { if stage >= 2 { @@ -60,7 +69,7 @@ func TestPreludeStateMachine(t *testing.T) { var visited = []; var beforeSeen = []; var afterSeen = []; - var s = newSession({}); + var s = newSession(); if (typeof s.states !== "function") { throw new Error("s.states missing"); } if (typeof s.waitForState !== "function") { throw new Error("s.waitForState missing"); } if (typeof s.present !== "function") { throw new Error("s.present missing"); } @@ -98,6 +107,9 @@ func TestPreludeStateMachine(t *testing.T) { if err != nil { t.Fatalf("script failed: %v", err) } + if badArg { + t.Fatalf("newSession wrapper forwarded undefined/null opts for a no-argument call") + } got := v.String() want := "password,totp,done|password,totp,done|password,totp,done" if got != want {