mirror of
https://github.com/servo/servo.git
synced 2025-08-27 16:18:21 +01:00
Update web-platform-tests to revision 8a2ceb5f18911302b7a5c1cd2791f4ab50ad4326
This commit is contained in:
parent
462c272380
commit
1f531f66ea
5377 changed files with 174916 additions and 84369 deletions
|
@ -0,0 +1,93 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Dispatching idle callbacks should be able to be suspended and then resumed</title>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
function withEventListener(target, event, handler) {
|
||||
handler = handler || (e => e);
|
||||
return new Promise(resolve => {
|
||||
let wrapper = function(e) {
|
||||
let result = handler(e);
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
resolve(result);
|
||||
}
|
||||
target.addEventListener(event, wrapper, { once: true });
|
||||
});
|
||||
}
|
||||
|
||||
function makePostBackUrl(name) {
|
||||
return new URL('resources/post_name_on_load.html?name=' + name,
|
||||
window.location).href;
|
||||
}
|
||||
|
||||
function waitForMessage(message, handler) {
|
||||
return withEventListener(window, 'message', e => (e.data === message) && handler(e));;
|
||||
}
|
||||
|
||||
function withWindow(name) {
|
||||
let win = window.open(makePostBackUrl(name))
|
||||
return waitForMessage(name, _ => win);
|
||||
}
|
||||
|
||||
function navigateWindow(win, name) {
|
||||
win.location = makePostBackUrl(name);
|
||||
return waitForMessage(name, _ => win);
|
||||
}
|
||||
|
||||
function waitDuration(delay) {
|
||||
return new Promise(resolve => {
|
||||
step_timeout(resolve, delay);
|
||||
})
|
||||
}
|
||||
|
||||
function goBack(win) {
|
||||
var p = withEventListener(win, 'pagehide');
|
||||
win.history.back();
|
||||
return p;
|
||||
}
|
||||
|
||||
promise_test(t => {
|
||||
let idleCalled = false;
|
||||
let running = true;
|
||||
return withWindow('foo')
|
||||
.then(win => {
|
||||
let callback = function(d) {
|
||||
idleCalled = true;
|
||||
if (running) {
|
||||
win.requestIdleCallback(callback);
|
||||
}
|
||||
};
|
||||
|
||||
win.requestIdleCallback(callback);
|
||||
|
||||
return navigateWindow(win, 'bar')
|
||||
.then(_ => idleCalled = false)
|
||||
.then(_ => waitDuration(2000))
|
||||
.then(_ => {
|
||||
assert_false(idleCalled, "idle callback shouldn't have been called yet");
|
||||
return goBack(win);
|
||||
})
|
||||
.then(_ => Promise.race([
|
||||
// At this point it's a matter of having bfcache ...
|
||||
waitDuration(2000)
|
||||
.then(_ => {
|
||||
assert_true(idleCalled, "idle callback should've been called by now");
|
||||
running = false;
|
||||
}),
|
||||
// ... or not. If not, we expect a load event.
|
||||
waitForMessage("foo", _ => win)
|
||||
]))
|
||||
.then(_ => win.close())
|
||||
.catch(e => {
|
||||
win.close();
|
||||
throw e;
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue