diff options
Diffstat (limited to 'dom/reporting/tests/iframe_delivering.html')
-rw-r--r-- | dom/reporting/tests/iframe_delivering.html | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/dom/reporting/tests/iframe_delivering.html b/dom/reporting/tests/iframe_delivering.html new file mode 100644 index 0000000000..c77ff50b9c --- /dev/null +++ b/dom/reporting/tests/iframe_delivering.html @@ -0,0 +1,92 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for delivering reports</title> +</head> +<body> + +<script type="application/javascript"> + +function ok(a, msg) { + parent.postMessage({type: "test", check: !!a, msg }, "*"); +} + +function is(a, b, msg) { + ok(a === b, msg); +} + +function finish() { + parent.postMessage({type: "finish" }, "*"); +} + +function checkReport() { + return new Promise(resolve => { + let id = setInterval(_ => { + fetch("delivering.sjs?task=check&min=3") + .then(r => r.text()) + .then(text => { + if (text) { + resolve(JSON.parse(text)); + clearInterval(id); + } + }); + }, 1000); + }); +} + +function runTests(extraParams = "") { + // Call a deprecating operation. + for (let i = 0; i < 100; ++i) { + new TestingDeprecatedInterface(); + } + ok(true, "Created a deprecated interface"); + + // Check if the report has been received. + return checkReport() + .then(reports => { + is(reports.length, 3, "We have 1 report"); + + let report = reports[0]; + is(report.contentType, "application/reports+json", "Correct mime-type"); + is(report.origin, "https://example.org", "Origin correctly set"); + is(report.url, "https://example.org/tests/dom/reporting/tests/delivering.sjs" + extraParams, "URL is correctly set"); + ok(!!report.body, "We have a report.body"); + ok(report.body.age > 0, "Age is correctly set"); + is(report.body.url, window.location.href, "URL is correctly set"); + is(report.body.user_agent, navigator.userAgent, "User-agent matches"); + ok(report.body.type, "deprecation", "Type is fine."); + ok(!!report.body.body, "We have the real report.body"); + is(report.body.body.id, "DeprecatedTestingInterface", "Correct report.body.id"); + is(report.body.body.message, "TestingDeprecatedInterface is a testing-only interface and this is its testing deprecation message.", "We have a report.body.message"); + is(report.body.body.sourceFile, "https://example.org/tests/dom/reporting/tests/iframe_delivering.html", "report.body.sourceFile"); + is(report.body.body.lineNumber, 40, "report.body.lineNumber"); + is(report.body.body.columnNumber, 4, "report.body.columnNumber"); + }); +} + +// Let's register a group + endpoint +fetch("delivering.sjs?task=header") +.then(r => r.text()) +.then(text => { + is(text, "OK", "Report-to header sent"); +}) +.then(_ => { + return runTests(); +}) + +// Let's register a group + endpoint from a worker +.then(_ => { + return new Promise(resolve => { + let w = new Worker("worker_delivering.js"); + w.onmessage = e => resolve(); + }); +}) +.then(_ => { + return runTests("&worker=true"); +}) + +.then(finish); + +</script> +</body> +</html> |