| <!doctype html> |
| <html> |
| <head> |
| <title>Test that the report-api honors buffer limits on a per-report type basis</title> |
| <link rel="author" title="Brent Fulgham" href="bfulgham@apple.com"> |
| <script src='/resources/testharness.js'></script> |
| <script src='/resources/testharnessreport.js'></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| </head> |
| <body> |
| <script> |
| var t1 = async_test("Test that image does not load"); |
| |
| promise_test(async function() { |
| for (let i = 0; i < 110; ++i) |
| await test_driver.generate_test_report("" + i); |
| }, "Buffer filled"); |
| |
| async_test(function(t2) { |
| window.addEventListener("securitypolicyviolation", t2.step_func(function(e) { |
| assert_equals(e.blockedURI, "{{location[scheme]}}://{{location[host]}}/reporting/support/fail.png"); |
| assert_equals(e.violatedDirective, "img-src"); |
| t2.done(); |
| })); |
| }, "Event is fired"); |
| |
| promise_test(async function(test) { |
| const cspReports = await new Promise(resolve => { |
| let observer = new ReportingObserver(resolve, {types:["csp-violation"], buffered:true}); |
| observer.observe(); |
| }); |
| |
| // WebKit generates two CSP reports for the blocked image load (https://bugs.webkit.org/show_bug.cgi?id=153162) |
| assert_true(cspReports.length > 0 && cspReports.length < 3); |
| |
| // Ensure that the contents of the report are valid. |
| assert_equals(cspReports[0].type, "csp-violation"); |
| }, "CSP Report limits were honored"); |
| |
| promise_test(async function(test) { |
| const testReports = await new Promise(resolve => { |
| let observer = new ReportingObserver(resolve, {types:["test"], buffered:true}); |
| observer.observe(); |
| }); |
| |
| assert_equals(testReports.length, 100); |
| |
| for (let i = 0; i < 100; ++i) { |
| assert_equals(testReports[i].type, "test"); |
| assert_equals(testReports[i].body.message, "" + (i + 10)); |
| } |
| }, "Test Report limits were honored"); |
| |
| promise_test(async function(test) { |
| const allReports = await new Promise(resolve => { |
| let observer = new ReportingObserver(resolve, {buffered:true}); |
| observer.observe(); |
| }); |
| |
| // WebKit generates two CSP reports for the blocked image load (https://bugs.webkit.org/show_bug.cgi?id=153162) |
| // Other browsers produce only one. |
| assert_true(allReports.length >= 101 && allReports.length <= 102); |
| }, "Combined report limits were honored"); |
| </script> |
| <img src='/reporting/support/fail.png' |
| onload='t1.unreached_func("The image should not have loaded");' |
| onerror='t1.done();'> |
| </body> |
| </html> |