reporting-api-orders-reports-buffered.https.html (2060B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title> 6 Reporting API: buffered observer preserves ordering across report types 7 </title> 8 <script src="/resources/testharness.js"></script> 9 <script src="/resources/testharnessreport.js"></script> 10 <script src="/resources/testdriver.js"></script> 11 <script src="/resources/testdriver-vendor.js"></script> 12 </head> 13 14 <body> 15 <script> 16 promise_test(async t => { 17 assert_true("ReportingObserver" in self); 18 19 function generateTest(i) { 20 test_driver.generate_test_report(`Test report ${i}`); 21 } 22 23 function generateDeprecation(i) { 24 let img = document.createElement("img"); 25 26 img.src = `/some/bunk/file${i}.png`; 27 document.body.appendChild(img); 28 } 29 30 let nonBufferedReports = []; 31 const observeTwoReports = async () => { 32 let { promise, resolve } = Promise.withResolvers(); 33 let count = 0; 34 let reportingObserver = new ReportingObserver(reports => { 35 count += reports.length; 36 nonBufferedReports.push(...reports); 37 if (count >= 2) { 38 resolve(); 39 } 40 }); 41 42 reportingObserver.observe(); 43 return promise.finally(() => reportingObserver.disconnect()); 44 } 45 46 // Generate interleaved reports 47 for (let i = 0; i < 25; i++) { 48 generateTest(i); 49 generateDeprecation(i); 50 await observeTwoReports(); 51 } 52 53 const collected = []; 54 const { promise: collectedAll, resolve } = Promise.withResolvers(); 55 56 const observer = new ReportingObserver( 57 reports => { 58 collected.push(...reports); 59 if (collected.length == nonBufferedReports.length) { 60 resolve(); 61 } 62 }, 63 { buffered: true } 64 ); 65 66 observer.observe(); 67 68 await collectedAll; 69 observer.disconnect(); 70 71 assert_greater_than( 72 collected.length, 73 0, 74 "Some reports must be delivered" 75 ); 76 77 // Verify relative ordering by type 78 const observedTypes = collected.map(r => r.type); 79 80 assert_array_equals(observedTypes, nonBufferedReports.map(r => r.type)); 81 }, "Buffered ReportingObserver preserves report generation order"); 82 </script> 83 </body> 84 </html>