| <!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> |