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
|
<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_EXCEEDED_ERR = 0x80530016;
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;
}
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_EXCEEDED_ERR exception
checkException(function() {
localStorage.setItem(keyName, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
}, DOM_QUOTA_EXCEEDED_ERR);
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_EXCEEDED_ERR);
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() {
postMsg('frame loaded');
}
</script>
</head>
<body onload="startTest();">
</body>
</html>
|