Source code
Revision control
Copy as Markdown
Other Tools
<html>
<head>
<title></title>
<script type="text/javascript">
// Modified by evil.js
var scriptItem;
var scriptItem1 = "untouched";
var imageItem1 = "untouched";
var frameItem1 = "untouched";
var scriptItem2 = "untouched";
var imageItem2 = "untouched";
var frameItem2 = "untouched";
var xhrItem = "untouched";
var fetchItem = "untouched";
var mediaItem1 = "untouched";
async function checkLoads() {
window.parent.is(scriptItem1, "spoiled", "Should not block tracking js 1");
window.parent.is(scriptItem2, "spoiled", "Should not block tracking js 2");
window.parent.is(imageItem1, "spoiled", "Should not block tracking img 1");
window.parent.is(imageItem2, "spoiled", "Should not block tracking img 2");
window.parent.is(frameItem1, "spoiled", "Should not block tracking iframe 1");
window.parent.is(frameItem2, "spoiled", "Should not block tracking iframe 2");
window.parent.is(mediaItem1, "loaded", "Should not block tracking video");
window.parent.is(xhrItem, "loaded", "Should not block tracking XHR");
window.parent.is(fetchItem, "loaded", "Should not block fetches from tracking domains");
window.parent.is(window.document.blockedNodeByClassifierCount, 0,
"No elements should be blocked");
// End (parent) test.
await window.parent.clearPermissions();
window.parent.SimpleTest.finish();
}
var onloadCalled = false;
var xhrFinished = false;
var fetchFinished = false;
var videoLoaded = false;
function loaded(type) {
if (type === "onload") {
onloadCalled = true;
} else if (type === "xhr") {
xhrFinished = true;
} else if (type === "fetch") {
fetchFinished = true;
} else if (type === "video") {
videoLoaded = true;
}
if (onloadCalled && xhrFinished && fetchFinished && videoLoaded) {
checkLoads();
}
}
</script>
</head>
<body onload="loaded('onload')">
<!-- Try loading from a tracking script URI (1) -->
<script id="badscript1" src="http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/evil.js" onload="scriptItem1 = 'spoiled';"></script>
<!-- Try loading from a tracking image URI (1) -->
<img id="badimage1" src="http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/raptor.jpg" onload="imageItem1 = 'spoiled';"/>
<!-- Try loading from a tracking frame URI (1) -->
<iframe id="badframe1" src="http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/track.html" onload="frameItem1 = 'spoiled';"></iframe>
<!-- Try loading from a tracking video URI -->
<video id="badmedia1" src="http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/vp9.webm"></video>
<script>
var v = document.getElementById("badmedia1");
v.addEventListener("loadedmetadata", function() {
mediaItem1 = "loaded";
loaded("video");
}, true);
v.addEventListener("error", function() {
mediaItem1 = "error";
loaded("video");
}, true);
// Try loading from a tracking script URI (2) - The loader may follow a
// different path depending on whether the resource is loaded from JS or HTML.
var newScript = document.createElement("script");
newScript.id = "badscript2";
newScript.addEventListener("load", function onload() { scriptItem2 = "spoiled"; });
document.body.appendChild(newScript);
// / Try loading from a tracking image URI (2)
var newImage = document.createElement("img");
newImage.id = "badimage2";
newImage.addEventListener("load", function onload() { imageItem2 = "spoiled"; });
document.body.appendChild(newImage);
// Try loading from a tracking iframe URI (2)
var newFrame = document.createElement("iframe");
newFrame.id = "badframe2";
newFrame.addEventListener("load", function onload() { frameItem2 = "spoiled"; });
document.body.appendChild(newFrame);
function reqListener() {
xhrItem = "loaded";
loaded("xhr");
}
function transferFailed() {
xhrItem = "failed";
loaded("xhr");
}
function transferCanceled() {
xhrItem = "canceled";
loaded("xhr");
}
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.addEventListener("error", transferFailed);
oReq.addEventListener("abort", transferCanceled);
oReq.open("GET", "http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/evil.js");
oReq.send();
// Fetch from a tracking domain
fetch("http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/evil.js").then(function(response) {
if (response.ok) {
fetchItem = "loaded";
loaded("fetch");
} else {
fetchItem = "badresponse";
loaded("fetch");
}
}).catch(function() {
fetchItem = "error";
loaded("fetch");
});
</script>
</body>
</html>