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