gecko-dev/dom/html/test/test_external_protocol_iframe.html

84 lines
2.4 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test for external protocol URLs blocked for iframes</title>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
</head>
<body>
<div id='foo'><a href='#'>Click here to test this issue</a></div>
<script>
function test_initialize() {
ChromeUtils.resetLastExternalProtocolIframeAllowed();
next();
}
function test_noUserInteraction() {
is(ChromeUtils.getPopupControlState(), "openAbused", "No user-interaction means: abuse state");
ok(!ChromeUtils.isPopupTokenUnused(), "Popup token has not been used yet");
is(ChromeUtils.lastExternalProtocolIframeAllowed(), 0, "No iframe loaded before this test!");
for (let i = 0; i < 10; ++i) {
let ifr = document.createElement('iframe');
ifr.src = "foo+bar:all_good";
document.body.appendChild(ifr);
is(ChromeUtils.getPopupControlState(), "openAbused", "No user-interaction means: abuse state");
ok(!ChromeUtils.isPopupTokenUnused(), "Popup token has been used!");
ok(ChromeUtils.lastExternalProtocolIframeAllowed() != 0, "We have 1 iframe loaded");
}
next();
}
function test_userInteraction() {
let foo = document.getElementById('foo');
foo.addEventListener('click', _ => {
is(ChromeUtils.getPopupControlState(), "openAllowed", "Click events allow popups");
ok(!ChromeUtils.isPopupTokenUnused(), "Popup token has not been used yet");
for (let i = 0; i < 10; ++i) {
let ifr = document.createElement('iframe');
ifr.src = "foo+bar:all_good";
document.body.appendChild(ifr);
is(ChromeUtils.getPopupControlState(), "openAllowed", "Click events allow popups");
ok(ChromeUtils.isPopupTokenUnused(), "Popup token has been used!");
}
next();
}, {once: true});
setTimeout(_ => {
sendMouseEvent({type:'click'}, 'foo');
}, 0);
}
let tests = [
test_initialize,
test_noUserInteraction,
test_userInteraction,
];
function next() {
if (tests.length == 0) {
SimpleTest.finish();
return;
}
let test = tests.shift();
SimpleTest.executeSoon(test);
}
SpecialPowers.pushPrefEnv({'set': [
['dom.block_external_protocol_in_iframes', true],
]}, next);
SimpleTest.waitForExplicitFinish();
</script>
</body>
</html>