<!DOCTYPE html> <html> <head> </head> <body onload="tests.next();"> <script type="text/javascript;version=1.7"> const SJS = "referrer_test_server.sjs?"; const BASE_URL = "https://example.com/tests/dom/workers/test/" + SJS; const GET_RESULT = BASE_URL + 'ACTION=get-test-results'; const RESET_STATE = BASE_URL + 'ACTION=resetState'; function ok(val, message) { val = val ? "true" : "false"; window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message + "');", "*"); } function info(val) { window.parent.postMessage("SimpleTest.info(" + val + ");", "*"); } function is(a, b, message) { ok(a == b, message); } function finish() { // Let window.onerror have a chance to fire setTimeout(function() { setTimeout(function() { tests.close(); window.parent.postMessage("SimpleTest.finish();", "*"); }, 0); }, 0); } var testCases = { 'same-origin': { 'Referrer-Policy' : { 'default' : 'full', 'origin' : 'origin', 'origin-when-cross-origin' : 'full', 'unsafe-url' : 'full', 'same-origin' : 'full', 'strict-origin' : 'origin', 'strict-origin-when-cross-origin' : 'full', 'no-referrer' : 'none', 'unsafe-url, no-referrer' : 'none', 'invalid' : 'full' }}, 'cross-origin': { 'Referrer-Policy' : { 'default' : 'full', 'origin' : 'origin', 'origin-when-cross-origin' : 'origin', 'unsafe-url' : 'full', 'same-origin' : 'none', 'strict-origin' : 'origin', 'strict-origin-when-cross-origin' : 'origin', 'no-referrer' : 'none', 'unsafe-url, no-referrer' : 'none', 'invalid' : 'full' }}, // Downgrading in worker is blocked entirely without unblock option // https://bugzilla.mozilla.org/show_bug.cgi?id=1198078#c17 // Skip the downgrading test /* 'downgrade': { 'Referrer-Policy' : { 'default' : 'full', 'origin' : 'full', 'origin-when-cross-origin"' : 'full', 'unsafe-url' : 'full', 'same-origin' : 'none', 'strict-origin' : 'none', 'strict-origin-when-cross-origin' : 'none', 'no-referrer' : 'full', 'unsafe-url, no-referrer' : 'none', 'invalid' : 'full' }}, */ }; var advance = function() { tests.next(); }; /** * helper to perform an XHR * to do checkIndividualResults and resetState */ function doXHR(aUrl, onSuccess, onFail) { var xhr = new XMLHttpRequest({mozSystem: true}); xhr.responseType = "json"; xhr.onload = function () { onSuccess(xhr); }; xhr.onerror = function () { onFail(xhr); }; xhr.open('GET', aUrl, true); xhr.send(null); } function resetState() { doXHR(RESET_STATE, advance, function(xhr) { ok(false, "error in reset state"); finish(); }); } function checkIndividualResults(aType, aPolicy, aExpected) { var onload = xhr => { var results = xhr.response; dump(JSON.stringify(xhr.response)); // test id equals type + "-" + policy // Ex: same-origin-default var id = aType + "-" + aPolicy; ok(id in results, id + " tests have to be performed."); is(results[id].policy, aExpected, id + ' --- ' + results[id].policy + ' (' + results[id].referrer + ')'); advance(); }; var onerror = xhr => { ok(false, "Can't get results from the counter server."); finish(); }; doXHR(GET_RESULT, onload, onerror); } var tests = (function() { for (var type in testCases) { for (var policy in testCases[type]['Referrer-Policy']) { yield resetState(); var searchParams = new URLSearchParams(); searchParams.append("TYPE", type); searchParams.append("ACTION", "test"); searchParams.append("Referrer-Policy", policy); var worker = new Worker(BASE_URL + searchParams.toString()); worker.onmessage = function () { advance(); }; yield worker.postMessage(42); yield checkIndividualResults(type, policy, escape(testCases[type]['Referrer-Policy'][policy])); } } // complete. Be sure to yield so we don't call this twice. yield finish(); })(); </script> </body> </html>