summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage/domstorage/sessionstorage
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/storage/domstorage/sessionstorage')
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/delete-removal-expected.txt13
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/delete-removal.html51
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/enumerate-storage-expected.txt9
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/enumerate-storage.html47
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key-expected.txt9
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key.html47
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/index-get-and-set-expected.txt32
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/index-get-and-set.html79
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt7
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage.html50
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/resources/clearSessionStorage.js12
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/resources/iframe-events-second.html24
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/resources/window-open-second.html36
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/simple-usage-expected.txt13
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/simple-usage.html49
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt15
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/string-conversion.html54
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/window-open-expected.txt8
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/window-open.html39
19 files changed, 594 insertions, 0 deletions
diff --git a/LayoutTests/storage/domstorage/sessionstorage/delete-removal-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/delete-removal-expected.txt
new file mode 100644
index 0000000..ce04017
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/delete-removal-expected.txt
@@ -0,0 +1,13 @@
+This test makes sure that using the syntax `delete sessionStorage.keyName` works as an alias to `sessionStorage.removeItem(keyName).`
+foo (before anything) is: undefined
+foo (after a named property setter set) is: bar
+foo (after a delete) is: undefined
+foo (after an indexed setter set) is: bar
+foo (after deleting FOO (not foo)) is : bar
+foo (after a delete) is: undefined
+foo (after calling setItem) is: bar
+foo (after a delete) is: undefined
+foo (after a redundant delete) is: undefined
+foo (after a named property setter set) is: bar
+foo (after an indexed delete) is: undefined
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/delete-removal.html b/LayoutTests/storage/domstorage/sessionstorage/delete-removal.html
new file mode 100644
index 0000000..7a4b8d2
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/delete-removal.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById('logger').appendChild(document.createTextNode(a));
+ document.getElementById('logger').appendChild(document.createElement("br"));
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ log("foo (before anything) is: " + sessionStorage.foo);
+ sessionStorage.foo = "bar";
+ log("foo (after a named property setter set) is: " + sessionStorage.foo);
+ delete sessionStorage.foo;
+ log("foo (after a delete) is: " + sessionStorage.foo);
+ sessionStorage["foo"] = "bar";
+ log("foo (after an indexed setter set) is: " + sessionStorage.foo);
+ delete sessionStorage.FOO;
+ log("foo (after deleting FOO (not foo)) is : " + sessionStorage.foo);
+ delete sessionStorage.foo;
+ log("foo (after a delete) is: " + sessionStorage.foo);
+ sessionStorage.setItem("foo", "bar");
+ log("foo (after calling setItem) is: " + sessionStorage.foo);
+ delete sessionStorage.foo;
+ log("foo (after a delete) is: " + sessionStorage.foo);
+ delete sessionStorage.foo;
+ log("foo (after a redundant delete) is: " + sessionStorage.foo);
+ sessionStorage.foo = "bar";
+ log("foo (after a named property setter set) is: " + sessionStorage.foo);
+ delete sessionStorage["foo"];
+ log("foo (after an indexed delete) is: " + sessionStorage.foo);
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This test makes sure that using the syntax `delete sessionStorage.keyName` works as an alias to `sessionStorage.removeItem(keyName).`<br><hr>
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage-expected.txt
new file mode 100644
index 0000000..7c87325
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage-expected.txt
@@ -0,0 +1,9 @@
+This test checks to see that you can enumber a Storage object and get only the keys as a result. The built-in properties of the Storage object should be ignored. The test operates on the SessionStorage object.
+alpha
+bar
+batman
+foo
+fu
+prototypeTestKey
+zeta
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage.html b/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage.html
new file mode 100644
index 0000000..7321f9a
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/enumerate-storage.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function startTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ Storage.prototype.prototypeTestKey = "prototypeTestValue";
+ sessionStorage.foo = "bar";
+ sessionStorage.fu = "baz";
+ sessionStorage.batman = "bin suparman";
+ sessionStorage.bar = "foo";
+ sessionStorage.alpha = "beta";
+ sessionStorage.zeta = "gamma";
+
+ // Enumerate sessionStorage, appending each key onto an array
+ var enumeratedArray = new Array();
+ for (var n in sessionStorage)
+ enumeratedArray.push(n);
+
+ // Sort the array, since the storage order isn't guaranteed
+ enumeratedArray.sort();
+
+ for (var n in enumeratedArray)
+ log(enumeratedArray[n]);
+}
+
+</script>
+</head>
+<body onload="startTest();">
+This test checks to see that you can enumber a Storage object and get only the keys as a result. The built-in properties of the Storage object should be ignored. The test operates on the SessionStorage object.<br>
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key-expected.txt
new file mode 100644
index 0000000..f879759
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key-expected.txt
@@ -0,0 +1,9 @@
+This test attempts to enumerate all the keys in sessionStorage with .length + .key(). The built-in properties of the Storage object should be ignored. The test operates on the sessionStorage object.
+alpha
+bar
+batman
+foo
+fu
+prototypeTestKey
+zeta
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key.html b/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key.html
new file mode 100644
index 0000000..27266f1
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/enumerate-with-length-and-key.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function startTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ Storage.prototype.prototypeTestKey = "prototypeTestValue";
+ sessionStorage.foo = "bar";
+ sessionStorage.fu = "baz";
+ sessionStorage.batman = "bin suparman";
+ sessionStorage.bar = "foo";
+ sessionStorage.alpha = "beta";
+ sessionStorage.zeta = "gamma";
+
+ // Enumerate sessionStorage, appending each key onto an array
+ var enumeratedArray = new Array();
+ for (var n in sessionStorage)
+ enumeratedArray.push(n);
+
+ // Sort the array, since the storage order isn't guaranteed
+ enumeratedArray.sort();
+
+ for (var n in enumeratedArray)
+ log(enumeratedArray[n]);
+}
+
+</script>
+</head>
+<body onload="startTest();">
+This test attempts to enumerate all the keys in sessionStorage with .length + .key(). The built-in properties of the Storage object should be ignored. The test operates on the sessionStorage object.<br>
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set-expected.txt
new file mode 100644
index 0000000..ff66bdc
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set-expected.txt
@@ -0,0 +1,32 @@
+This is a test to make sure you can get and set values in SessionStorage by index.
+Setting FOO using the index setter.
+Reading FOO:
+BAR
+BAR
+BAR
+
+Setting FOO again, using setItem.
+Reading FOO:
+BAZ
+BAZ
+BAZ
+
+Setting FOO again, using the index setter.
+Reading FOO:
+BAT
+BAT
+BAT
+
+Setting FOO again, using property-slot syntax
+Reading FOO:
+BATMAN
+BATMAN
+BATMAN
+
+Removing FOO, then trying to read it
+Reading FOO:
+undefined
+undefined
+null
+
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set.html b/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set.html
new file mode 100644
index 0000000..7922d0b
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/index-get-and-set.html
@@ -0,0 +1,79 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function finish()
+{
+ if (window.layoutTestController)
+ layoutTestController.notifyDone()
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ finish();
+ return;
+ }
+
+ log("Setting FOO using the index setter.");
+ sessionStorage["FOO"] = "BAR";
+ log("Reading FOO:");
+ log(sessionStorage.FOO);
+ log(sessionStorage["FOO"]);
+ log(sessionStorage.getItem("FOO"));
+ log("");
+
+ log("Setting FOO again, using setItem.");
+ sessionStorage.setItem("FOO", "BAZ");
+ log("Reading FOO:");
+ log(sessionStorage.FOO);
+ log(sessionStorage["FOO"]);
+ log(sessionStorage.getItem("FOO"));
+ log("");
+
+ log("Setting FOO again, using the index setter.");
+ sessionStorage["FOO"] = "BAT";
+ log("Reading FOO:");
+ log(sessionStorage.FOO);
+ log(sessionStorage["FOO"]);
+ log(sessionStorage.getItem("FOO"));
+ log("");
+
+ log("Setting FOO again, using property-slot syntax");
+ sessionStorage.FOO = "BATMAN";
+ log("Reading FOO:");
+ log(sessionStorage.FOO);
+ log(sessionStorage["FOO"]);
+ log(sessionStorage.getItem("FOO"));
+ log("");
+
+ log("Removing FOO, then trying to read it");
+ sessionStorage.removeItem("FOO");
+ log("Reading FOO:");
+ log(sessionStorage.FOO);
+ log(sessionStorage["FOO"]);
+ log(sessionStorage.getItem("FOO"));
+ log("");
+
+ finish();
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This is a test to make sure you can get and set values in SessionStorage by index.<br>
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt
new file mode 100644
index 0000000..ed2017a
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt
@@ -0,0 +1,7 @@
+This is a test to make sure that when private browsing is on any attempt to change the sessionStorage area fail.
+Initial value of testItem is: InitialValue
+Caught exception trying to change item: Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
+After change attempt, testItem is: InitialValue
+After remove attempt, testItem is: InitialValue
+After clear attempt, testItem is: InitialValue
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage.html b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage.html
new file mode 100644
index 0000000..8dd7a6a
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage.html
@@ -0,0 +1,50 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+ if (!window.layoutTestController) {
+ log("Test only designed to be run under DumpRenderTree");
+ return;
+ }
+
+ sessionStorage.setItem("testItem", "InitialValue");
+ layoutTestController.setPrivateBrowsingEnabled(true);
+ log("Initial value of testItem is: " + sessionStorage.getItem("testItem"));
+
+ try {
+ sessionStorage.setItem("testItem", "ChangedValue");
+ } catch(e) {
+ log("Caught exception trying to change item: " + e);
+ }
+
+ log("After change attempt, testItem is: " + sessionStorage.getItem("testItem"));
+
+ sessionStorage.removeItem("testItem");
+ log("After remove attempt, testItem is: " + sessionStorage.getItem("testItem"));
+
+ sessionStorage.clear();
+ log("After clear attempt, testItem is: " + sessionStorage.getItem("testItem"));
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This is a test to make sure that when private browsing is on any attempt to change the sessionStorage area fail.
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/resources/clearSessionStorage.js b/LayoutTests/storage/domstorage/sessionstorage/resources/clearSessionStorage.js
new file mode 100644
index 0000000..489ef2a
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/resources/clearSessionStorage.js
@@ -0,0 +1,12 @@
+function clearSessionStorage()
+{
+ var keys = new Array();
+ for (key in sessionStorage)
+ keys.push(key);
+
+ for (key in keys)
+ sessionStorage.removeItem(keys[key]);
+}
+
+if (window.sessionStorage)
+ clearSessionStorage();
diff --git a/LayoutTests/storage/domstorage/sessionstorage/resources/iframe-events-second.html b/LayoutTests/storage/domstorage/sessionstorage/resources/iframe-events-second.html
new file mode 100644
index 0000000..2d7b004
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/resources/iframe-events-second.html
@@ -0,0 +1,24 @@
+<html>
+<head>
+<script>
+function handleStorageEvent(e)
+{
+ parent.log("Subframe received storage event:");
+ parent.log("Key - " + e.key);
+ parent.log("New Value - " + e.newValue);
+ parent.log("Old Value - " + e.oldValue);
+ parent.log("URI - " + parent.normalizeURL(e.uri));
+ parent.log("Storage Area - " + ((e.storageArea == window.sessionStorage) ? "This window's window.sessionStorage" : "Another window's window.sessionStorage"));
+ parent.log("");
+
+ if (e.key != "Subframe") {
+ parent.log("Subframe about to change sessionStorage...");
+ sessionStorage.setItem("Subframe", "SET");
+ }
+}
+</script>
+</head>
+<body onload="window.addEventListener('storage', handleStorageEvent, false);">
+This is the subframe which exists to make sure that both frames of a same security origin receive the event for that origin's sessionStorage object mutating
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/resources/window-open-second.html b/LayoutTests/storage/domstorage/sessionstorage/resources/window-open-second.html
new file mode 100644
index 0000000..b8dede6
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/resources/window-open-second.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+<script>
+
+var secondWindowLog = "Logging from second window:<br>";
+
+function log(a)
+{
+ secondWindowLog += a + "<br>";
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+ window.sessionStorage.setItem("FOO", "BAR-NEWWINDOW");
+ log("Value for FOO after changing my own copy is " + window.sessionStorage.getItem("FOO"));
+
+ log("Value for FOO in my opening window is " + window.opener.sessionStorage.getItem("FOO"));
+
+ window.opener.log(secondWindowLog);
+
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This is a new window to make sure there is a copy of the previous window's sessionStorage, and that they diverge after a change<br>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/simple-usage-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/simple-usage-expected.txt
new file mode 100644
index 0000000..399fd08
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/simple-usage-expected.txt
@@ -0,0 +1,13 @@
+This test trys simple operations on SessionStorage
+Length is 0
+Value for FOO is null
+Length is 1
+Value for FOO is BAR
+Key for index 0 is FOO
+Key for index 1 is null
+Key for index -1 is null
+Length is 1
+Value for FOO is BAZ
+Length is 0
+Value for FOO is null
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/simple-usage.html b/LayoutTests/storage/domstorage/sessionstorage/simple-usage.html
new file mode 100644
index 0000000..8e45521
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/simple-usage.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ log("Length is " + window.sessionStorage.length);
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+
+ window.sessionStorage.setItem("FOO", "BAR");
+
+ log("Length is " + window.sessionStorage.length);
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+ log("Key for index 0 is " + window.sessionStorage.key(0));
+ log("Key for index 1 is " + window.sessionStorage.key(1));
+ log("Key for index -1 is " + window.sessionStorage.key(-1));
+
+ window.sessionStorage.setItem("FOO", "BAZ");
+
+ log("Length is " + window.sessionStorage.length);
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+
+ window.sessionStorage.removeItem("FOO");
+
+ log("Length is " + window.sessionStorage.length);
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This test trys simple operations on SessionStorage<br>
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt
new file mode 100644
index 0000000..65dcb2c
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt
@@ -0,0 +1,15 @@
+This test case verifies that session storage only stores strings.
+Length is 0
+Testing implicit setters
+Type/value for null is string/null
+Type/value for 0 is string/0
+Type/value for function(){} is string/function () {}
+Testing explicit setters
+Type/value for null is string/null
+Type/value for 0 is string/0
+Type/value for function(){} is string/function () {}
+Testing index setters
+Type/value for null is string/null
+Type/value for 0 is string/0
+Type/value for function(){} is string/function () {}
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/string-conversion.html b/LayoutTests/storage/domstorage/sessionstorage/string-conversion.html
new file mode 100644
index 0000000..64a4e14
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/string-conversion.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ log("Length is " + sessionStorage.length);
+
+ log("Testing implicit setters");
+ sessionStorage.a = null;
+ log("Type/value for null is " + typeof sessionStorage.a + "/" + sessionStorage.a);
+ sessionStorage.b = 0;
+ log("Type/value for 0 is " + typeof sessionStorage.b + "/" + sessionStorage.b);
+ sessionStorage.c = function(){};
+ log("Type/value for function(){} is " + typeof sessionStorage.c + "/" + sessionStorage.c);
+
+ log("Testing explicit setters");
+ sessionStorage.setItem('d', null);
+ log("Type/value for null is " + typeof sessionStorage.d + "/" + sessionStorage.d);
+ sessionStorage.setItem('e', 0);
+ log("Type/value for 0 is " + typeof sessionStorage.e + "/" + sessionStorage.e);
+ sessionStorage.setItem('f', function(){});
+ log("Type/value for function(){} is " + typeof sessionStorage.f + "/" + sessionStorage.f);
+
+ log("Testing index setters");
+ sessionStorage['g'] = null;
+ log("Type/value for null is " + typeof sessionStorage.g + "/" + sessionStorage.g);
+ sessionStorage['h'] = 0;
+ log("Type/value for 0 is " + typeof sessionStorage.h + "/" + sessionStorage.h);
+ sessionStorage['i'] = function(){};
+ log("Type/value for function(){} is " + typeof sessionStorage.i + "/" + sessionStorage.i);
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This test case verifies that session storage only stores strings.
+<div id="logger"></div>
+</body>
+</html>
diff --git a/LayoutTests/storage/domstorage/sessionstorage/window-open-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/window-open-expected.txt
new file mode 100644
index 0000000..c613414
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/window-open-expected.txt
@@ -0,0 +1,8 @@
+This is a new window to make sure there is a copy of the previous window's sessionStorage, and that they diverge after a change
+Value for FOO is BAR
+Logging from second window:
+Value for FOO is BAR
+Value for FOO after changing my own copy is BAR-NEWWINDOW
+Value for FOO in my opening window is BAR
+
+
diff --git a/LayoutTests/storage/domstorage/sessionstorage/window-open.html b/LayoutTests/storage/domstorage/sessionstorage/window-open.html
new file mode 100644
index 0000000..34f8f39
--- /dev/null
+++ b/LayoutTests/storage/domstorage/sessionstorage/window-open.html
@@ -0,0 +1,39 @@
+<html>
+<head>
+<script src="resources/clearSessionStorage.js"></script>
+<script>
+
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.setCanOpenWindows();
+ layoutTestController.waitUntilDone();
+}
+
+function log(a)
+{
+ document.getElementById("logger").innerHTML += a + "<br>";
+}
+
+function runTest()
+{
+ if (!window.sessionStorage) {
+ log("window.sessionStorage DOES NOT exist");
+ return;
+ }
+
+ window.log = log;
+
+ window.sessionStorage.setItem("FOO", "BAR");
+ log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
+ window.open("resources/window-open-second.html");
+
+
+}
+
+</script>
+</head>
+<body onload="runTest();">
+This is a new window to make sure there is a copy of the previous window's sessionStorage, and that they diverge after a change<br>
+<div id="logger"></div>
+</body>
+</html>