summaryrefslogtreecommitdiffstats
path: root/dom/performance/tests/test_performance_server_timing.html
blob: cba11a5fddbb75387f08f3a347995f223bf7d25e (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
<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Test for PerformanceServerTiming</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>
function makeXHR(aUrl) {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("get", aUrl, true);
  xmlhttp.send();
}

// Note that |responseServerTiming| and |trailerServerTiming| SHOULD be synced with
// the ones in serverTiming.sjs.
var responseServerTiming = [{metric:"metric1", duration:"123.4", description:"description1"},
                            {metric:"metric2", duration:"456.78", description:"description2"}];
var trailerServerTiming = [{metric:"metric3", duration:"789.11", description:"description3"},
                           {metric:"metric4", duration:"1112.13", description:"description4"}];

function checkServerTimingContent(serverTiming) {
  var expectedResult = responseServerTiming.concat(trailerServerTiming);
  assert_equals(serverTiming.length, expectedResult.length);

  for (var i = 0; i < expectedResult.length; i++) {
    assert_equals(serverTiming[i].name, expectedResult[i].metric);
    assert_equals(serverTiming[i].description, expectedResult[i].description);
    assert_equals(serverTiming[i].duration, parseFloat(expectedResult[i].duration));
  }
}

promise_test(t => {
  var promise = new Promise(resolve => {
    performance.clearResourceTimings();

    var observer = new PerformanceObserver(list => resolve(list));
    observer.observe({entryTypes: ['resource']});
    t.add_cleanup(() => observer.disconnect());
  });

  makeXHR("serverTiming.sjs");

  return promise.then(list => {
    assert_equals(list.getEntries().length, 1);
    checkServerTimingContent(list.getEntries()[0].serverTiming);
  });
}, "server-timing test");

</script>
</body>