From a2a0db7bc4e7809b542c2dd9a6d83391a4216422 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 2 May 2024 15:25:13 +0200 Subject: [PATCH 1/2] upgrade jsruntime --- vendor/jsruntime-lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/jsruntime-lib b/vendor/jsruntime-lib index 9c46a625..e8b74e19 160000 --- a/vendor/jsruntime-lib +++ b/vendor/jsruntime-lib @@ -1 +1 @@ -Subproject commit 9c46a62535c6a0d02e041773de8ddc0581afcade +Subproject commit e8b74e1983460f0616d878c3018b3688b0488d77 From 8b47d72079e8fe90cc5de0e577dd44303aeaac25 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 11 Apr 2024 16:41:15 +0200 Subject: [PATCH 2/2] event: set this arg on callback --- src/netsurf.zig | 5 +++++ src/xhr/xhr.zig | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/netsurf.zig b/src/netsurf.zig index 65e64d63..37f64c6f 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -622,6 +622,11 @@ pub fn eventTargetAddEventListener( const cbk_ptr = try alloc.create(Callback); cbk_ptr.* = cbk; + // When a function is used as an event handler, its this parameter is bound + // to the DOM element on which the listener is placed. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this#this_in_dom_event_handlers + try cbk_ptr.setThisArg(et); + const ctx = @as(*anyopaque, @ptrCast(cbk_ptr)); var listener: ?*EventListener = undefined; const errLst = c.dom_event_listener_create(event_handler, ctx, &listener); diff --git a/src/xhr/xhr.zig b/src/xhr/xhr.zig index 1fd5fedd..34c365cf 100644 --- a/src/xhr/xhr.zig +++ b/src/xhr/xhr.zig @@ -837,4 +837,16 @@ pub fn testExecFn( .{ .src = "req4.responseText.length > 64", .ex = "true" }, }; try checkCases(js_env, &post); + + var cbk = [_]Case{ + .{ .src = "const req5 = new XMLHttpRequest()", .ex = "undefined" }, + .{ .src = "req5.open('GET', 'http://httpbin.io/json')", .ex = "undefined" }, + .{ .src = "var status = 0; req5.onload = function () { status = this.status };", .ex = "function () { status = this.status }" }, + .{ .src = "req5.send()", .ex = "undefined" }, + + // Each case executed waits for all loop callaback calls. + // So the url has been retrieved. + .{ .src = "status", .ex = "200" }, + }; + try checkCases(js_env, &cbk); }