зеркало из https://github.com/mozilla/gecko-dev.git
130 строки
3.3 KiB
JavaScript
130 строки
3.3 KiB
JavaScript
// This helper expects these globals to be defined.
|
|
/* global PARAMS, SJS, testCases */
|
|
|
|
/*
|
|
* common functionality for iframe, anchor, and area referrer attribute tests
|
|
*/
|
|
const GET_RESULT = SJS + "ACTION=get-test-results";
|
|
const RESET_STATE = SJS + "ACTION=resetState";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
var advance = function() {
|
|
tests.next();
|
|
};
|
|
|
|
/**
|
|
* 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();
|
|
}
|
|
});
|
|
|
|
/**
|
|
* helper to perform an XHR
|
|
* to do checkIndividualResults and resetState
|
|
*/
|
|
function doXHR(aUrl, onSuccess, onFail) {
|
|
// The server is at http[s]://example.com so we need cross-origin XHR.
|
|
var xhr = new XMLHttpRequest({ mozSystem: true });
|
|
xhr.responseType = "json";
|
|
xhr.onload = function() {
|
|
onSuccess(xhr);
|
|
};
|
|
xhr.onerror = function() {
|
|
onFail(xhr);
|
|
};
|
|
xhr.open("GET", "http" + aUrl, true);
|
|
xhr.send(null);
|
|
}
|
|
|
|
/**
|
|
* Grabs the results via XHR and passes to checker.
|
|
*/
|
|
function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
|
|
var onload = xhr => {
|
|
var results = xhr.response;
|
|
info(JSON.stringify(xhr.response));
|
|
ok(aName in results, aName + " tests have to be performed.");
|
|
is(
|
|
results[aName].policy,
|
|
aExpectedReferrer,
|
|
aTestname +
|
|
" --- " +
|
|
results[aName].policy +
|
|
" (" +
|
|
results[aName].referrer +
|
|
")"
|
|
);
|
|
advance();
|
|
};
|
|
var onerror = xhr => {
|
|
ok(false, "Can't get results from the counter server.");
|
|
SimpleTest.finish();
|
|
};
|
|
doXHR(GET_RESULT, onload, onerror);
|
|
}
|
|
|
|
function resetState() {
|
|
doXHR(RESET_STATE, advance, function(xhr) {
|
|
ok(false, "error in reset state");
|
|
SimpleTest.finish();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* testing if referrer header is sent correctly
|
|
*/
|
|
var tests = (function*() {
|
|
yield SpecialPowers.pushPrefEnv(
|
|
{ set: [["network.preload", true]] },
|
|
advance
|
|
);
|
|
yield SpecialPowers.pushPrefEnv(
|
|
{ set: [["security.mixed_content.block_active_content", false]] },
|
|
advance
|
|
);
|
|
yield SpecialPowers.pushPermissions(
|
|
[{ type: "systemXHR", allow: true, context: document }],
|
|
advance
|
|
);
|
|
|
|
var iframe = document.getElementById("testframe");
|
|
|
|
for (var j = 0; j < testCases.length; j++) {
|
|
if (testCases[j].PREFS) {
|
|
yield SpecialPowers.pushPrefEnv({ set: testCases[j].PREFS }, advance);
|
|
}
|
|
|
|
var actions = testCases[j].ACTION;
|
|
var subTests = testCases[j].TESTS;
|
|
for (var k = 0; k < actions.length; k++) {
|
|
var actionString = actions[k];
|
|
for (var i = 0; i < subTests.length; i++) {
|
|
yield resetState();
|
|
var searchParams = new URLSearchParams();
|
|
searchParams.append("ACTION", actionString);
|
|
searchParams.append("NAME", subTests[i].NAME);
|
|
for (var l of PARAMS) {
|
|
if (subTests[i][l]) {
|
|
searchParams.append(l, subTests[i][l]);
|
|
}
|
|
}
|
|
var schemeFrom = subTests[i].SCHEME_FROM || "http";
|
|
yield (iframe.src = schemeFrom + SJS + searchParams.toString());
|
|
yield checkIndividualResults(
|
|
subTests[i].DESC,
|
|
subTests[i].RESULT,
|
|
subTests[i].NAME
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// complete.
|
|
SimpleTest.finish();
|
|
})();
|