diff options
Diffstat (limited to '')
-rw-r--r-- | dom/html/test/test_external_protocol_iframe.html | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/dom/html/test/test_external_protocol_iframe.html b/dom/html/test/test_external_protocol_iframe.html new file mode 100644 index 0000000000..cb99a19e1a --- /dev/null +++ b/dom/html/test/test_external_protocol_iframe.html @@ -0,0 +1,80 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for external protocol URLs blocked for iframes</title> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script 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() { + ok(!SpecialPowers.wrap(document).hasValidTransientUserGestureActivation, "No user interaction 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.lastExternalProtocolIframeAllowed() != 0, "We have 1 iframe loaded"); + } + + next(); +} + +function test_userInteraction() { + let foo = document.getElementById('foo'); + foo.addEventListener('click', _ => { + ok(SpecialPowers.wrap(document).hasValidTransientUserGestureActivation, "User should've interacted"); + + for (let i = 0; i < 10; ++i) { + let ifr = document.createElement('iframe'); + ifr.src = "foo+bar:all_good"; + document.body.appendChild(ifr); + + ok(!SpecialPowers.wrap(document).hasValidTransientUserGestureActivation, "User interaction should've been consumed"); + } + + next(); + + }, {once: true}); + + setTimeout(_ => { + synthesizeMouseAtCenter(foo, {}); + }, 0); +} + +let tests = [ + test_initialize, + test_noUserInteraction, + test_userInteraction, +]; + +function next() { + if (!tests.length) { + SimpleTest.finish(); + return; + } + + let test = tests.shift(); + SimpleTest.executeSoon(test); +} + +SpecialPowers.pushPrefEnv({'set': [ + ['dom.block_external_protocol_in_iframes', true], + ['dom.delay.block_external_protocol_in_iframes.enabled', true], +]}, next); + +SimpleTest.waitForExplicitFinish(); + </script> +</body> +</html> |