<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>localStorage replace test</title>

<!--
  This test checks that localStorage object doesn't leak
  in a window that changes its location. We do this by switching
  frame location inside of this window and then by changing location
  of a top level window.
-->

<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />

<script type="text/javascript">

var shell;
var shellType;
var failureRegExp = new RegExp("^FAILURE");

window.addEventListener("message", onMessageReceived, false);

function onMessageReceived(event)
{
  switch (event.data)
  {
    case "init_done":
      // This is frame with different origin in the same browsing context
      // as the first frame adding data to localStorage of the first origin.
      shell.location = "http://example.com:80/tests/dom/tests/mochitest/localstorage/frameReplace.html?check&" + shellType;
      break;

    case "check_done":
      // Clean the localStorage of the first origin.
      shell.location = "http://example.org:80/tests/dom/tests/mochitest/localstorage/frameReplace.html?clean&" + shellType;
      break;

    case "clean_done":
      switch (shellType)
      {
        case "frame":
          // We finished testing in a frame
          // proceed with test in a separate window
          shellType = "window";
          shell = window.open("http://example.org:80/tests/dom/tests/mochitest/localstorage/frameReplace.html?init&" + shellType);
          break;

        case "window":
          shell.close();
          window.setTimeout(function() {SimpleTest.finish();}, 0);
          break;
      }
      break;

    default:
      SimpleTest.ok(!event.data.match(failureRegExp), event.data);
      break;
  }
}

function startTest() {
  SpecialPowers.pushPrefEnv({"set": [["security.mixed_content.block_display_content", false], ["security.mixed_content.block_active_content", false]]}, test1);
}

function test1() {
  shellType = "frame";
  shell = frame;
  shell.location = "http://example.org:80/tests/dom/tests/mochitest/localstorage/frameReplace.html?init&" + shellType;
}

SimpleTest.waitForExplicitFinish();

</script>

</head>

<body onload="startTest();">
  <iframe src="" name="frame"></iframe>
</body>
</html>