343 lines
15 KiB
JavaScript
343 lines
15 KiB
JavaScript
/**
|
|
* Listen for notifications from the child.
|
|
* These are sent in case of error, or when the loads we await have completed.
|
|
*/
|
|
window.addEventListener("message", function (event) {
|
|
if (event.data == "childLoadComplete") {
|
|
// all loads happen, continue the test.
|
|
advance();
|
|
} else if (event.data == "childOverload") {
|
|
// too many loads happened in a test frame, abort.
|
|
ok(false, "Too many load handlers called in test.");
|
|
SimpleTest.finish();
|
|
} else if (event.data.indexOf("fail-") == 0) {
|
|
// something else failed in the test frame, abort.
|
|
ok(false, "Child failed the test with error " + event.data.substr(5));
|
|
SimpleTest.finish();
|
|
}
|
|
});
|
|
|
|
/**
|
|
* helper to perform an XHR.
|
|
*/
|
|
function doXHR(url, onSuccess, onFail) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.onload = function () {
|
|
if (xhr.status == 200) {
|
|
onSuccess(xhr);
|
|
} else {
|
|
onFail(xhr);
|
|
}
|
|
};
|
|
xhr.open("GET", url, true);
|
|
xhr.send(null);
|
|
}
|
|
|
|
/**
|
|
* This triggers state-resetting on the counter server.
|
|
*/
|
|
function resetCounter() {
|
|
doXHR(
|
|
"/tests/dom/base/test/bug704320_counter.sjs?reset",
|
|
advance,
|
|
function (xhr) {
|
|
ok(false, "Need to be able to reset the request counter");
|
|
SimpleTest.finish();
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Grabs the results via XHR and passes to checker.
|
|
*/
|
|
function checkIndividualResults(testname, expected) {
|
|
doXHR(
|
|
"/tests/dom/base/test/bug704320_counter.sjs?results",
|
|
function (xhr) {
|
|
var results = JSON.parse(xhr.responseText);
|
|
info(xhr.responseText);
|
|
|
|
ok(
|
|
"img" in results,
|
|
testname + " test: some image loads required in results object."
|
|
);
|
|
is(
|
|
results.img.count,
|
|
2,
|
|
testname + " Test: Expected 2 loads for image requests."
|
|
);
|
|
|
|
expected.forEach(function (ref) {
|
|
ok(
|
|
results.img.referrers.includes(ref),
|
|
testname +
|
|
" Test: Expected " +
|
|
ref +
|
|
" referrer policy in test, results were " +
|
|
JSON.stringify(results.img.referrers) +
|
|
"."
|
|
);
|
|
});
|
|
advance();
|
|
},
|
|
function (xhr) {
|
|
ok(false, "Can't get results from the counter server.");
|
|
SimpleTest.finish();
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Grabs the results via XHR and checks them
|
|
*/
|
|
function checkExpectedGlobalResults(testName) {
|
|
var url = "bug704320.sjs?action=get-test-results";
|
|
doXHR(
|
|
url,
|
|
function (xhr) {
|
|
var response = JSON.parse(xhr.response);
|
|
|
|
for (type in response) {
|
|
for (scheme in response[type]) {
|
|
for (policy in response[type][scheme]) {
|
|
var expectedResult =
|
|
EXPECTED_RESULTS[type] === undefined
|
|
? EXPECTED_RESULTS.default[scheme][policy]
|
|
: EXPECTED_RESULTS[type][scheme][policy];
|
|
is(
|
|
response[type][scheme][policy],
|
|
expectedResult,
|
|
type + " " + scheme + " " + policy
|
|
);
|
|
}
|
|
}
|
|
}
|
|
advance(testName);
|
|
},
|
|
function (xhr) {
|
|
ok(false, "Can't get results from the counter server.");
|
|
SimpleTest.finish();
|
|
}
|
|
);
|
|
}
|
|
|
|
var EXPECTED_RESULTS = {
|
|
// From docshell/base/nsDocShell.cpp:
|
|
// "If the document containing the hyperlink being audited was not retrieved
|
|
// over an encrypted connection and its address does not have the same
|
|
// origin as "ping URL", send a referrer."
|
|
"link-ping": {
|
|
// Same-origin
|
|
"http-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url": "",
|
|
origin: "",
|
|
"origin-when-cross-origin": "",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
"http-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin": "http://example.com/",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
|
|
"same-origin": "",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin": "http://example.com/",
|
|
},
|
|
// Encrypted and not same-origin
|
|
"https-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url": "",
|
|
origin: "",
|
|
"origin-when-cross-origin": "",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
// Encrypted
|
|
"https-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url": "",
|
|
origin: "",
|
|
"origin-when-cross-origin": "",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
},
|
|
// form is tested in a 2nd level iframe.
|
|
form: {
|
|
"http-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=form",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=form",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=form",
|
|
"same-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=form",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=form",
|
|
},
|
|
"http-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=form",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin": "http://example.com/",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
|
|
"same-origin": "",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin": "http://example.com/",
|
|
},
|
|
"https-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=form",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin": "https://example.com/",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
"https-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=form",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=form",
|
|
"no-referrer-when-downgrade":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
|
|
"same-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=form",
|
|
"strict-origin": "https://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=form",
|
|
},
|
|
},
|
|
// window.location is tested in a 2nd level iframe.
|
|
"window.location": {
|
|
"http-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=window.location",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=window.location",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=window.location",
|
|
"same-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=window.location",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=window.location",
|
|
},
|
|
"http-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=window.location",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin": "http://example.com/",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
|
|
"same-origin": "",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin": "http://example.com/",
|
|
},
|
|
"https-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=window.location",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin": "https://example.com/",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
"https-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=window.location",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=window.location",
|
|
"no-referrer-when-downgrade":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
|
|
"same-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=window.location",
|
|
"strict-origin": "https://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=window.location",
|
|
},
|
|
},
|
|
default: {
|
|
"http-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade",
|
|
"same-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin",
|
|
},
|
|
"http-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
|
|
origin: "http://example.com/",
|
|
"origin-when-cross-origin": "http://example.com/",
|
|
"no-referrer-when-downgrade":
|
|
"http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
|
|
"same-origin": "",
|
|
"strict-origin": "http://example.com/",
|
|
"strict-origin-when-cross-origin": "http://example.com/",
|
|
},
|
|
"https-to-http": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin": "https://example.com/",
|
|
"no-referrer-when-downgrade": "",
|
|
"same-origin": "",
|
|
"strict-origin": "",
|
|
"strict-origin-when-cross-origin": "",
|
|
},
|
|
"https-to-https": {
|
|
"no-referrer": "",
|
|
"unsafe-url":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url",
|
|
origin: "https://example.com/",
|
|
"origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin",
|
|
"no-referrer-when-downgrade":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade",
|
|
"same-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin",
|
|
"strict-origin": "https://example.com/",
|
|
"strict-origin-when-cross-origin":
|
|
"https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin",
|
|
},
|
|
},
|
|
};
|