Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix timeout vs. dom manipulation queue race conditions
  • Loading branch information
pshaughn committed Feb 6, 2020
1 parent 5f55cd5 commit 7684afb
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 26 deletions.
4 changes: 2 additions & 2 deletions tests/wpt/metadata/MANIFEST.json
Expand Up @@ -698932,7 +698932,7 @@
"testharness"
],
"html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-onerror.html": [
"b6f6d63e0aa9660909c93e7366f80f4f36c97ecf",
"b6c02d27c9ef67418210e808eb92256606c273c7",
"testharness"
],
"html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.dedicatedworker.html": [
Expand All @@ -698956,7 +698956,7 @@
"support"
],
"html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/support/promise-rejection-events.js": [
"f371bc1da900a596b6e49dbe86b22a7c20ae2cc2",
"036e1784dbb79e07cd533256cd391583191f4aa8",
"support"
],
"html/webappapis/scripting/processing-model-2/window-onerror-parse-error.html": [
Expand Down
Expand Up @@ -27,11 +27,21 @@
};

var p = Promise.reject(e);
setTimeout(function() {
setTimeout(t.step_func(function() {
queueTask(function() {
queueTask(t.step_func(function() {
// This will cause onrejectionhandled
p.catch(function() {});
}), 0);
}, 0);
}));
});
}, 'Throwing inside an unhandledrejection handler invokes the error handler.');

// This function queues a task in "DOM manipulation task source"
function queueTask(f) {
var d = document.createElement("details");
d.ontoggle = function() {
f();
};

d.setAttribute("open", "");
}
</script>
Expand Up @@ -831,30 +831,29 @@ if ('document' in self) {

var p = Promise.reject();

setTimeout(function() {
queueTask(function() {
sequenceOfEvents.push('task before catch');
checkSequence();
});

p.catch(function() {
sequenceOfEvents.push('catch');
checkSequence();
});

queueTask(function() {
sequenceOfEvents.push('task after catch');
checkSequence();
});

sequenceOfEvents.push('after catch');
checkSequence();
}, 10);

function unhandled(ev) {
if (ev.promise === p) {
sequenceOfEvents.push('unhandled');
checkSequence();
setTimeout(function() {
queueTask(function() {
sequenceOfEvents.push('task before catch');
checkSequence();
});

p.catch(function() {
sequenceOfEvents.push('catch');
checkSequence();
});

queueTask(function() {
sequenceOfEvents.push('task after catch');
checkSequence();
});

sequenceOfEvents.push('after catch');
checkSequence();
}, 10);
}
}

Expand Down

0 comments on commit 7684afb

Please sign in to comment.