reporting-api-honors-limits.https.sub.html (2709B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>Test that the report-api honors buffer limits on a per-report type basis</title> 5 <link rel="author" title="Brent Fulgham" href="bfulgham@apple.com"> 6 <script src='/resources/testharness.js'></script> 7 <script src='/resources/testharnessreport.js'></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 </head> 11 <body> 12 <script> 13 var t1 = async_test("Test that image does not load"); 14 15 promise_test(async function() { 16 for (let i = 0; i < 110; ++i) 17 await test_driver.generate_test_report("" + i); 18 }, "Buffer filled"); 19 20 async_test(function(t2) { 21 window.addEventListener("securitypolicyviolation", t2.step_func(function(e) { 22 assert_equals(e.blockedURI, "{{location[scheme]}}://{{location[host]}}/reporting/support/fail.png"); 23 assert_equals(e.violatedDirective, "img-src"); 24 t2.done(); 25 })); 26 }, "Event is fired"); 27 28 promise_test(async function(test) { 29 const cspReports = await new Promise(resolve => { 30 let observer = new ReportingObserver(resolve, {types:["csp-violation"], buffered:true}); 31 observer.observe(); 32 }); 33 34 // WebKit generates two CSP reports for the blocked image load (https://bugs.webkit.org/show_bug.cgi?id=153162) 35 assert_true(cspReports.length > 0 && cspReports.length < 3); 36 37 // Ensure that the contents of the report are valid. 38 assert_equals(cspReports[0].type, "csp-violation"); 39 }, "CSP Report limits were honored"); 40 41 promise_test(async function(test) { 42 const testReports = await new Promise(resolve => { 43 let observer = new ReportingObserver(resolve, {types:["test"], buffered:true}); 44 observer.observe(); 45 }); 46 47 assert_equals(testReports.length, 100); 48 49 for (let i = 0; i < 100; ++i) { 50 assert_equals(testReports[i].type, "test"); 51 assert_equals(testReports[i].body.message, "" + (i + 10)); 52 } 53 }, "Test Report limits were honored"); 54 55 promise_test(async function(test) { 56 const allReports = await new Promise(resolve => { 57 let observer = new ReportingObserver(resolve, {buffered:true}); 58 observer.observe(); 59 }); 60 61 // WebKit generates two CSP reports for the blocked image load (https://bugs.webkit.org/show_bug.cgi?id=153162) 62 // Other browsers produce only one. 63 assert_true(allReports.length >= 101 && allReports.length <= 102); 64 }, "Combined report limits were honored"); 65 </script> 66 <img src='/reporting/support/fail.png' 67 onload='t1.unreached_func("The image should not have loaded");' 68 onerror='t1.done();'> 69 </body> 70 </html>