/**
* 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",
},
},
};
Messung V0.5 C=84 H=94 G=88
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland