blob: 84d257e4f4527b7ddf199dfbc91b59183651099f [file] [log] [blame]
Yoav Weiss79001b12018-12-12 17:16:561<!DOCTYPE HTML>
2<html>
3<head>
4<meta charset="utf-8">
5<link rel="help" href="https://w3c.github.io/resource-timing/#dom-performance-setresourcetimingbuffersize">
6<title>This test validates that setResourceTimingBufferFull behaves appropriately when set to the current buffer level.</title>
7<script src="/resources/testharness.js"></script>
8<script src="/resources/testharnessreport.js"></script>
9<script src="resources/buffer-full-utilities.js"></script>
10</head>
11<body>
12<script>
13let eventFired = false;
14let loadRandomResource = () => {
Ben Kellyc8de5e12019-07-10 18:52:0315 return fetch(window.location.href + "?" + Math.random()).then(r => r.text());
Yoav Weiss79001b12018-12-12 17:16:5616}
17
18setup(() => {
19 // Get the browser into a consistent state.
20 clearBufferAndSetSize(100);
21});
22
23let loadResourcesToFillFutureBuffer = () => {
24 return new Promise(resolve => {
25 // Gather up 3 Resource Entries to kick off the rest of test behavior.
26 let resources = 0;
27 let observer = new PerformanceObserver(function(list) {
28 resources += list.getEntriesByType("resource").length;
29 if (resources !== 3)
30 return;
31 observer.disconnect();
32 resolve();
33 });
34 observer.observe({entryTypes: ["resource"]});
35 for (let i = 0; i < 3; ++i)
36 loadRandomResource();
37 });
38};
39
40let setBufferFullEventAndBufferSize = () => {
41 performance.setResourceTimingBufferSize(3);
42 performance.onresourcetimingbufferfull = function() {
43 eventFired = true;
44 performance.clearResourceTimings();
45 };
46};
47
48let clearAndAddAnotherEntryToBuffer = () => {
49 return new Promise(resolve => {
50 performance.clearResourceTimings();
51 loadRandomResource().then(resolve);
52 });
53};
54
55let testThatEntryWasAdded = () => {
Will Hawkins636761d2019-04-16 09:24:1056 let tries = 1;
57 let maxTries = 5;
58 return waitUntilConditionIsMet( function() {
59 if (performance.getEntriesByType("resource").length) {
60 return true;
61 } else {
62 if (tries < maxTries) {
63 tries++;
64 return false;
Yoav Weiss79001b12018-12-12 17:16:5665 } else {
Will Hawkins636761d2019-04-16 09:24:1066 return true;
Yoav Weiss79001b12018-12-12 17:16:5667 }
68 }
Will Hawkins636761d2019-04-16 09:24:1069 }).then( () => {
70 assert_true((performance.getEntriesByType("resource").length) === 1);
Yoav Weiss79001b12018-12-12 17:16:5671 });
72};
73
74promise_test(async () => {
75 await loadResourcesToFillFutureBuffer();
76 setBufferFullEventAndBufferSize();
77 // Overflow the buffer.
78 await loadRandomResource();
79 await waitForEventToFire();
80 await clearAndAddAnotherEntryToBuffer();
Yoav Weissa6890052018-12-21 14:08:5781 // Since we have no strict guarantees when an entry will be added to the
82 // buffer, waiting till next task to try to avoid flakiness.
Yoav Weiss79001b12018-12-12 17:16:5683 await testThatEntryWasAdded();
84}, "Test that entry was added to the buffer after a buffer full event");
85</script>