d4a1b41129
* fix: microtasks policy in CreateEnvironment Microtasks policy should not be updated for the renderer because `NodeBindings::CreateEnvironment` might be entered with or without `UvRunOnce()` on stack. One of the examples of such calls is `window.open()` which is possible to invoke while `uv_run()` is still running (e.g. with `setImmediate()`). All in all, it doesn't matter that much which policy we use since `v8::MicrotasksScope` has a check for the policy in its destructor and no commits will be made if the policy is `kExplicit`. It is important, however, to not change the policy in the middle of `UvRunOnce()` so we should respect whatever we currently have and move on. Fix: #29463 * Move test to a better place * Update spec-main/fixtures/crash-cases/setimmediate-window-open-crash/index.html Co-authored-by: Jeremy Rose <nornagon@nornagon.net> * Update spec-main/fixtures/crash-cases/setimmediate-window-open-crash/index.html Co-authored-by: Jeremy Rose <nornagon@nornagon.net> * simplify crash-case * comment * fix comment Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Co-authored-by: Jeremy Rose <nornagon@nornagon.net> Co-authored-by: Fedor Indutny <indutny@signal.org>
21 lines
513 B
HTML
21 lines
513 B
HTML
<html>
|
|
<body>
|
|
<script>
|
|
// `setImmediate` schedules a function to be run on the next UV tick, which
|
|
// ensures that `window.open` is run from `UvRunOnce()`.
|
|
setImmediate(async () => {
|
|
if (!location.hash) {
|
|
const p = new Promise(resolve => {
|
|
window.addEventListener('message', resolve, { once: true });
|
|
});
|
|
window.open('#foo', '', 'nodeIntegration=no,show=no');
|
|
const e = await p;
|
|
|
|
window.close();
|
|
} else {
|
|
window.opener.postMessage('foo', '*');
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|