summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/localstorage/frameQuotaSessionOnly.html
blob: a6f69b17625813465573db5391d9bc7e72ab6c63 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>slave for sessionStorage test</title>

<script type="text/javascript" src="interOriginFrame.js"></script>
<script type="text/javascript">

const DOM_QUOTA_REACHED = 2152924150;

function checkException(func, exc)
{
  var exceptionThrew = false;
  try {
    func();
  }
  catch (ex) {
    exceptionThrew = true;
    is(ex.result, exc, "Expected "+exc+" exception");
  }
  ok(exceptionThrew, "Exception "+exc+" threw at "+location);
}

function doStep()
{
  var query = location.search.substring(1);
  var queries = query.split("&");

  var operation = queries[0];
  var keyName = queries[1];
  var result = queries[2];

  switch (result)
  {
    case "success":
      switch (operation)
      {
        case "add":
          // Store 500 bytes long string must succeed
          localStorage.setItem(keyName, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          is(localStorage.getItem(keyName), "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "500 bytes key "+keyName+" stored");
          break;

        case "remove":
          localStorage.removeItem(keyName);
          is(localStorage.getItem(keyName), null, "Key "+keyName+" removed");
          break;

        case "checkclean":
          is(localStorage.getItem(keyName), null, "Key "+keyName+" not present");
          break;

        case "checknotclean":
          is(localStorage.getItem(keyName), "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "Key "+keyName+" is present");
          break;
      }

      break;

    case "failure":
      switch (operation)
      {
        case "add":
          // Attempt to store 500 bytes long string that doens't
          // fit the quota, have to throw DOM_QUOTA_REACHED exception
          checkException(function() {
            localStorage.setItem(keyName, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          }, DOM_QUOTA_REACHED);
          is(localStorage.getItem(keyName), null, "500 bytes key "+keyName+" is NOT stored");
          break;

        case "add2":
          // Attempt to change a key value to reach the DOM quota and
          // check it fails and the old key value is still present.
          checkException(function() {
            localStorage.setItem(keyName, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          }, DOM_QUOTA_REACHED);
          is(localStorage.getItem(keyName), "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "Key "+keyName+" left unchanged");
          break;
      }

      break;

    case "":
    default:
      switch (operation)
      {
        case "clear":
          localStorage.clear();
          break;
      }

      break;
  }

  // Just inform the master we are finished now
  postMsg("done");
  return false;
}

function startTest() {
  SpecialPowers.pushPermissions([{'type': 'cookie', 'allow': SpecialPowers.Ci.nsICookiePermission.ACCESS_SESSION, 'context': document}], function() {
    postMsg('frame loaded');
  });
}
</script>

</head>

<body onload="startTest();">
</body>
</html>