<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<head>
  <title>Test for SharedWorker in 3rd Party Iframes</title>
  <script src="/tests/SimpleTest/SimpleTest.js"> </script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
</head>
<body>
  <script class="testbody">

  function testThirdPartyFrame(name) {
    return new Promise(resolve => {
      // Let's use a window, loading the same origin, in order to have the new
      // cookie-policy applied.
      let w = window.open("sharedWorker_thirdparty_window.html?name=" + name);
      window.addEventListener('message', function messageListener(evt) {
        if (evt.data.name !== name) {
          return;
        }
        w.close();
        window.removeEventListener('message', messageListener);
        resolve(evt.data.result);
      });
    });
  }

  const COOKIE_BEHAVIOR_ACCEPT        = 0;
  const COOKIE_BEHAVIOR_REJECTFOREIGN = 1;

  add_task(async function allowed() {
    await SpecialPowers.pushPrefEnv({ set: [
      ["network.cookie.cookieBehavior", COOKIE_BEHAVIOR_ACCEPT]
    ]});
    let result = await testThirdPartyFrame('allowed');
    ok(result === 'allowed',
       'SharedWorker should be allowed when 3rd party iframes can access storage');
  });

  add_task(async function blocked() {
    await SpecialPowers.pushPrefEnv({ set: [
      ["network.cookie.cookieBehavior", COOKIE_BEHAVIOR_REJECTFOREIGN]
    ]});
    let result = await testThirdPartyFrame('blocked');
    ok(result === 'blocked',
       'SharedWorker should not be allowed when 3rd party iframes are denied storage');
  });

  </script>
</body>
</html>
