summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/localstorage/test_localStorageReplace.html
blob: b80c35dbc59b2366a50819ccbb1bbb8805f6f1f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<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 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);

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>