<!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>
