summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/lifecycle/freeze.html
blob: a2a9a7d3f147da9069bde019ec5940a213fbae79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!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>