Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 1 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /lifecycle/freeze.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<meta charset="utf-8">
<title>TestDriver freeze method</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var test = async_test('Test freeze callback.');
window.open('resources/window.html', 'Child Window');
var total_steps = 0;
const StepStatus = {
ADDED: 0,
SUCCESS: 1,
FAIL: 2,
};
var steps_map = new Map();
function poll_for_result(request_token, step_name, expect_success) {
test.step(() => {
var iteration = 5;
var checkResult = () => {
fetch("resources/beacon.py?query&token=" + request_token).then(test.step_func((response) => {
var count = response.headers.get("Count");
if (count != '0') {
// If the server received something we can terminate polling.
if (expect_success) {
step_success(step_name);
} else {
step_fail(step_name);
}
} else if (!expect_success && count == '0' && iteration == 0) {
// When we are out of iterations and we aren't expecting success, declare this step complete.
// Should be 125 ms looking to make sure server didn't see the request.
step_success(step_name);
} else {
iteration--;
test.step_timeout(checkResult, 25);
}
}));
};
test.step_timeout(checkResult, 25);
});
}
function add_step(name) {
steps_map[name] = StepStatus.ADDED;
total_steps++;
}
function step_success(name) {
total_steps--;
steps_map[name] = StepStatus.SUCCESS;
if (total_steps == 0)
test.done();
}
function step_fail(name) {
total_steps--;
steps_map[name] = StepStatus.FAIL;
test.step(() => assert_unreached('During onfreeze: ' + name + ' failed to behave as expected.'));
if (total_steps == 0)
test.done();
}
test.step_timeout(() => {
for (var step in steps_map) {
if(steps_map[step] == StepStatus.ADDED)
test.step(() => assert_unreached('During onfreeze: ' + step + ' never finshed.'));
}
}, 1000);
</script>