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