Commit 859a944e authored by Xudong Zheng's avatar Xudong Zheng Committed by Brad Fitzpatrick

syscall/js: move callback helper code to misc/wasm to avoid using eval()

When using the compiled .wasm with misc/wasm/wasm_exec.js, we get an error message if the site prohibits eval() via the Content-Security-Policy header. This can be resolved by moving the callback helper code from src/syscall/js/callback.go to misc/wasm/wasm_exec.js.

Fixes #26748

Change-Id: I28f271b8a00631f4c66a1ac31305e85f20f9d420
GitHub-Last-Rev: a6a0268f38d36c198ca6b4ceb2e75cc8afec74eb
GitHub-Pull-Request: golang/go#26750
Reviewed-on: https://go-review.googlesource.com/127296Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent c29370c9
...@@ -387,6 +387,28 @@ ...@@ -387,6 +387,28 @@
await callbackPromise; await callbackPromise;
} }
} }
static _makeCallbackHelper(id, pendingCallbacks, go) {
return function() {
pendingCallbacks.push({ id: id, args: arguments });
go._resolveCallbackPromise();
};
}
static _makeEventCallbackHelper(preventDefault, stopPropagation, stopImmediatePropagation, fn) {
return function(event) {
if (preventDefault) {
event.preventDefault();
}
if (stopPropagation) {
event.stopPropagation();
}
if (stopImmediatePropagation) {
event.stopImmediatePropagation();
}
fn(event);
};
}
} }
if (isNodeJS) { if (isNodeJS) {
......
...@@ -8,33 +8,11 @@ package js ...@@ -8,33 +8,11 @@ package js
import "sync" import "sync"
var pendingCallbacks = Global().Get("Array").New() var (
pendingCallbacks = Global().Get("Array").New()
var makeCallbackHelper = Global().Call("eval", ` makeCallbackHelper = Global().Get("Go").Get("_makeCallbackHelper")
(function(id, pendingCallbacks, go) { makeEventCallbackHelper = Global().Get("Go").Get("_makeEventCallbackHelper")
return function() { )
pendingCallbacks.push({ id: id, args: arguments });
go._resolveCallbackPromise();
};
})
`)
var makeEventCallbackHelper = Global().Call("eval", `
(function(preventDefault, stopPropagation, stopImmediatePropagation, fn) {
return function(event) {
if (preventDefault) {
event.preventDefault();
}
if (stopPropagation) {
event.stopPropagation();
}
if (stopImmediatePropagation) {
event.stopImmediatePropagation();
}
fn(event);
};
})
`)
var ( var (
callbacksMu sync.Mutex callbacksMu sync.Mutex
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment