summaryrefslogtreecommitdiffstats
path: root/LayoutTests
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-10-22 13:02:20 +0100
committerBen Murdoch <benm@google.com>2010-10-26 15:21:41 +0100
commita94275402997c11dd2e778633dacf4b7e630a35d (patch)
treee66f56c67e3b01f22c9c23cd932271ee9ac558ed /LayoutTests
parent09e26c78506587b3f5d930d7bc72a23287ffbec0 (diff)
downloadexternal_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.zip
external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.gz
external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.bz2
Merge WebKit at r70209: Initial merge by Git
Change-Id: Id23a68efa36e9d1126bcce0b137872db00892c8e
Diffstat (limited to 'LayoutTests')
-rw-r--r--LayoutTests/fast/dom/DeviceMotion/no-page-cache-expected.txt14
-rw-r--r--LayoutTests/fast/dom/DeviceMotion/no-page-cache.html12
-rw-r--r--LayoutTests/fast/dom/DeviceMotion/resources/cached-page-1.html11
-rw-r--r--LayoutTests/fast/dom/DeviceMotion/resources/cached-page-2.html8
-rw-r--r--LayoutTests/fast/dom/DeviceMotion/script-tests/no-page-cache.js24
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange-expected.txt16
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange.html13
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/event-after-navigation-expected.txt3
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/event-after-navigation.html12
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/no-page-cache-expected.txt14
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/no-page-cache.html12
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-1.html11
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-2.html8
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/resources/event-after-navigation-new.html15
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/script-tests/create-event-onorientationchange.js18
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/script-tests/event-after-navigation.js12
-rw-r--r--LayoutTests/fast/dom/DeviceOrientation/script-tests/no-page-cache.js24
-rw-r--r--LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-prevents-rebase.js118
-rw-r--r--LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase-expected.txt46
-rw-r--r--LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase.html13
-rw-r--r--LayoutTests/fast/js/resources/fs-test-post.js6
-rw-r--r--LayoutTests/fast/js/resources/js-test-pre.js2
-rw-r--r--LayoutTests/fast/url/query-expected.txt2
-rw-r--r--LayoutTests/fast/url/script-tests/segments-from-data-url.js2
-rw-r--r--LayoutTests/fast/url/script-tests/segments.js2
-rw-r--r--LayoutTests/fast/url/segments-expected.txt2
-rw-r--r--LayoutTests/fast/url/segments-from-data-url-expected.txt2
-rw-r--r--LayoutTests/http/tests/appcache/document-write-html-element-2-expected.txt2
-rw-r--r--LayoutTests/http/tests/appcache/document-write-html-element-2.html19
-rw-r--r--LayoutTests/http/tests/appcache/document-write-html-element-expected.txt1
-rw-r--r--LayoutTests/http/tests/appcache/document-write-html-element.html26
-rw-r--r--LayoutTests/http/tests/appcache/fail-on-update-2-expected.txt1
-rw-r--r--LayoutTests/http/tests/appcache/fail-on-update-2.html64
-rw-r--r--LayoutTests/http/tests/appcache/foreign-fallback-expected.txt6
-rw-r--r--LayoutTests/http/tests/appcache/foreign-fallback.html48
-rw-r--r--LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2-expected.txt1
-rw-r--r--LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2.html30
-rw-r--r--LayoutTests/http/tests/appcache/insert-html-element-with-manifest-expected.txt1
-rw-r--r--LayoutTests/http/tests/appcache/insert-html-element-with-manifest.html31
-rw-r--r--LayoutTests/http/tests/appcache/main-resource-redirect-expected.txt4
-rw-r--r--LayoutTests/http/tests/appcache/main-resource-redirect.html39
-rw-r--r--LayoutTests/http/tests/appcache/resources/document-write-html-element.manifest1
-rw-r--r--LayoutTests/http/tests/appcache/resources/fail-on-update-2.html7
-rw-r--r--LayoutTests/http/tests/appcache/resources/fail-on-update-2.php39
-rw-r--r--LayoutTests/http/tests/appcache/resources/foreign-fallback-fallback.html2
-rw-r--r--LayoutTests/http/tests/appcache/resources/foreign-fallback.manifest4
-rw-r--r--LayoutTests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest1
-rw-r--r--LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame-2.html6
-rw-r--r--LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame.php4
-rw-r--r--LayoutTests/http/tests/appcache/resources/main-resource-redirect.manifest4
-rw-r--r--LayoutTests/storage/indexeddb/basics-expected.txt12
-rw-r--r--LayoutTests/storage/indexeddb/basics.html42
-rw-r--r--LayoutTests/storage/indexeddb/constants-expected.txt52
-rw-r--r--LayoutTests/storage/indexeddb/constants.html60
-rw-r--r--LayoutTests/storage/indexeddb/database-basics-expected.txt42
-rw-r--r--LayoutTests/storage/indexeddb/database-basics.html79
-rw-r--r--LayoutTests/storage/indexeddb/database-quota-expected.txt1115
-rw-r--r--LayoutTests/storage/indexeddb/database-quota.html126
-rw-r--r--LayoutTests/storage/indexeddb/index-basics-expected.txt63
-rw-r--r--LayoutTests/storage/indexeddb/index-basics.html74
-rw-r--r--LayoutTests/storage/indexeddb/index-cursor-expected.txt39
-rw-r--r--LayoutTests/storage/indexeddb/index-cursor.html50
-rw-r--r--LayoutTests/storage/indexeddb/keyrange-expected.txt76
-rw-r--r--LayoutTests/storage/indexeddb/keyrange.html34
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics-expected.txt59
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics.html118
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt20
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-cursor.html46
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt51
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html61
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor-expected.txt12
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor.html33
-rw-r--r--LayoutTests/storage/indexeddb/queued-commands-expected.txt104
-rw-r--r--LayoutTests/storage/indexeddb/queued-commands.html87
-rw-r--r--LayoutTests/storage/indexeddb/resources/shared.js33
-rw-r--r--LayoutTests/storage/indexeddb/transaction-basics-expected.txt144
-rw-r--r--LayoutTests/storage/indexeddb/transaction-basics.html221
77 files changed, 3155 insertions, 461 deletions
diff --git a/LayoutTests/fast/dom/DeviceMotion/no-page-cache-expected.txt b/LayoutTests/fast/dom/DeviceMotion/no-page-cache-expected.txt
new file mode 100644
index 0000000..1dee7cd
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceMotion/no-page-cache-expected.txt
@@ -0,0 +1,14 @@
+Tests that pages that use DeviceMotion are not put in the page cache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Main page opening resources/cached-page-1.html
+resources/cached-page-1.html onload fired, count = 1
+resources/cached-page-1.html about to navigate to resources/cached-page-2.html
+resources/cached-page-2.html about to go back to resources/cached-page-1.html
+resources/cached-page-1.html onload fired, count = 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/DeviceMotion/no-page-cache.html b/LayoutTests/fast/dom/DeviceMotion/no-page-cache.html
new file mode 100644
index 0000000..2e09eac
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceMotion/no-page-cache.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/no-page-cache.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-1.html b/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-1.html
new file mode 100644
index 0000000..759fbf9
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-1.html
@@ -0,0 +1,11 @@
+<script>
+function loadNext() {
+ window.addEventListener('devicemotion', function() {});
+ if (window.opener.reportPageOneOnload() == 1) {
+ window.opener.debug('resources/cached-page-1.html about to navigate to resources/cached-page-2.html')
+ // Location changes need to happen outside the onload handler to generate history entries.
+ setTimeout(function() { location.href = 'cached-page-2.html'; }, 0);
+ }
+}
+</script>
+<body onload="loadNext()"></body>
diff --git a/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-2.html b/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-2.html
new file mode 100644
index 0000000..5478f9c
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceMotion/resources/cached-page-2.html
@@ -0,0 +1,8 @@
+<script>
+function init() {
+ window.opener.pageTwoLoaded = true;
+ window.opener.debug('resources/cached-page-2.html about to go back to resources/cached-page-1.html');
+ history.back();
+}
+</script>
+<body onload="init()"></body>
diff --git a/LayoutTests/fast/dom/DeviceMotion/script-tests/no-page-cache.js b/LayoutTests/fast/dom/DeviceMotion/script-tests/no-page-cache.js
new file mode 100644
index 0000000..67cfcf6
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceMotion/script-tests/no-page-cache.js
@@ -0,0 +1,24 @@
+description('Tests that pages that use DeviceMotion are not put in the page cache.');
+
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.setCanOpenWindows();
+ layoutTestController.overridePreference('WebKitUsesPageCachePreferenceKey', 1);
+} else
+ debug('This test can not be run without the LayoutTestController');
+
+var pageOneOnloadCount = 0;
+function reportPageOneOnload() {
+ ++pageOneOnloadCount;
+ debug('resources/cached-page-1.html onload fired, count = ' + pageOneOnloadCount);
+ if (pageOneOnloadCount == 2) {
+ finishJSTest();
+ }
+ return pageOneOnloadCount;
+}
+
+debug("Main page opening resources/cached-page-1.html");
+window.open("resources/cached-page-1.html");
+
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange-expected.txt b/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange-expected.txt
new file mode 100644
index 0000000..0f0aac6
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange-expected.txt
@@ -0,0 +1,16 @@
+Tests that document.createEvent() works with orientationChange
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+FAIL... orientationChange event doesn't appear to be enabled or implemented.
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+
+
diff --git a/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange.html b/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange.html
new file mode 100644
index 0000000..7a033e0
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/create-event-onorientationchange.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></p>
+<div id="result"></div>
+<script src="script-tests/create-event-onorientationchange.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation-expected.txt b/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation-expected.txt
new file mode 100644
index 0000000..8e6bc39
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation-expected.txt
@@ -0,0 +1,3 @@
+Tests for a crash where an event is fired after the page has been navigated away when the original page is in the page cache.
+
+SUCCESS
diff --git a/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation.html b/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation.html
new file mode 100644
index 0000000..ced3703
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/event-after-navigation.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/event-after-navigation.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/no-page-cache-expected.txt b/LayoutTests/fast/dom/DeviceOrientation/no-page-cache-expected.txt
new file mode 100644
index 0000000..0217208
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/no-page-cache-expected.txt
@@ -0,0 +1,14 @@
+Tests that pages that use DeviceOrientation are not put in the page cache.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Main page opening resources/cached-page-1.html
+resources/cached-page-1.html onload fired, count = 1
+resources/cached-page-1.html about to navigate to resources/cached-page-2.html
+resources/cached-page-2.html about to go back to resources/cached-page-1.html
+resources/cached-page-1.html onload fired, count = 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/DeviceOrientation/no-page-cache.html b/LayoutTests/fast/dom/DeviceOrientation/no-page-cache.html
new file mode 100644
index 0000000..2e09eac
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/no-page-cache.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/no-page-cache.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-1.html b/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-1.html
new file mode 100644
index 0000000..2d76889
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-1.html
@@ -0,0 +1,11 @@
+<script>
+function loadNext() {
+ window.addEventListener('deviceorientation', function() {});
+ if (window.opener.reportPageOneOnload() == 1) {
+ window.opener.debug('resources/cached-page-1.html about to navigate to resources/cached-page-2.html')
+ // Location changes need to happen outside the onload handler to generate history entries.
+ setTimeout(function() { location.href = 'cached-page-2.html'; }, 0);
+ }
+}
+</script>
+<body onload="loadNext()"></body>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-2.html b/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-2.html
new file mode 100644
index 0000000..5478f9c
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/resources/cached-page-2.html
@@ -0,0 +1,8 @@
+<script>
+function init() {
+ window.opener.pageTwoLoaded = true;
+ window.opener.debug('resources/cached-page-2.html about to go back to resources/cached-page-1.html');
+ history.back();
+}
+</script>
+<body onload="init()"></body>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/resources/event-after-navigation-new.html b/LayoutTests/fast/dom/DeviceOrientation/resources/event-after-navigation-new.html
new file mode 100644
index 0000000..157e050
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/resources/event-after-navigation-new.html
@@ -0,0 +1,15 @@
+<html>
+ <head>
+ </head>
+ <body>
+ Tests for a crash where an event is fired after the page has been navigated
+ away when the original page is in the page cache.<br><br>
+ SUCCESS
+ <script>
+ if (window.layoutTestController) {
+ layoutTestController.setMockDeviceOrientation(true, 1.1, true, 2.2, true, 3.3);
+ layoutTestController.notifyDone();
+ }
+ </script>
+ </body>
+</html>
diff --git a/LayoutTests/fast/dom/DeviceOrientation/script-tests/create-event-onorientationchange.js b/LayoutTests/fast/dom/DeviceOrientation/script-tests/create-event-onorientationchange.js
new file mode 100644
index 0000000..a63685b
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/script-tests/create-event-onorientationchange.js
@@ -0,0 +1,18 @@
+description('Tests that document.createEvent() works with orientationChange')
+
+function handleOrientationChange()
+{
+ document.getElementById('result').innerHTML = "PASS";
+}
+
+window.addEventListener('onorientationchange', handleOrientationChange, false);
+
+try {
+ var event = document.createEvent("OrientationEvent");
+ event.initEvent("orientationchange", false, false);
+ window.dispatchEvent(event);
+} catch(e) {
+ document.getElementById('result').innerHTML = "FAIL... orientationChange event doesn't appear to be enabled or implemented.";
+}
+
+window.successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/DeviceOrientation/script-tests/event-after-navigation.js b/LayoutTests/fast/dom/DeviceOrientation/script-tests/event-after-navigation.js
new file mode 100644
index 0000000..2756e55
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/script-tests/event-after-navigation.js
@@ -0,0 +1,12 @@
+description('Tests for a crash where an event is fired after the page has been navigated away when the original page is in the page cache.');
+
+if (window.layoutTestController)
+ layoutTestController.overridePreference('WebKitUsesPageCachePreferenceKey', 1);
+else
+ debug('This test can not be run without the LayoutTestController');
+
+window.addEventListener('deviceorientation', function() { } );
+window.location = "resources/event-after-navigation-new.html";
+
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/DeviceOrientation/script-tests/no-page-cache.js b/LayoutTests/fast/dom/DeviceOrientation/script-tests/no-page-cache.js
new file mode 100644
index 0000000..cbfb501
--- /dev/null
+++ b/LayoutTests/fast/dom/DeviceOrientation/script-tests/no-page-cache.js
@@ -0,0 +1,24 @@
+description('Tests that pages that use DeviceOrientation are not put in the page cache.');
+
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.setCanOpenWindows();
+ layoutTestController.overridePreference('WebKitUsesPageCachePreferenceKey', 1);
+} else
+ debug('This test can not be run without the LayoutTestController');
+
+var pageOneOnloadCount = 0;
+function reportPageOneOnload() {
+ ++pageOneOnloadCount;
+ debug('resources/cached-page-1.html onload fired, count = ' + pageOneOnloadCount);
+ if (pageOneOnloadCount == 2) {
+ finishJSTest();
+ }
+ return pageOneOnloadCount;
+}
+
+debug("Main page opening resources/cached-page-1.html");
+window.open("resources/cached-page-1.html");
+
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-prevents-rebase.js b/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-prevents-rebase.js
new file mode 100644
index 0000000..139a9e5
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-prevents-rebase.js
@@ -0,0 +1,118 @@
+description('Tests that when an href attribute is set, the href is no longer subject to updates to the document base URI.');
+
+var a = document.createElement('a');
+var base = document.createElement('base');
+document.head.appendChild(base);
+
+
+debug("Search attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "?search";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://new_base/?search'");
+
+debug("Search attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "?foo";
+a.search = "search";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://old_base/?search'");
+debug('');
+
+
+debug("Pathname attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "path";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://new_base/path'");
+
+debug("Pathname attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "foo";
+a.pathname = "path";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://old_base/path'");
+debug('');
+
+
+debug("Hash attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "#hash";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://new_base/#hash'");
+
+debug("Pathname attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "#foo";
+a.hash = "hash";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://old_base/#hash'");
+debug('');
+
+
+debug('Note that for the following attributes, updating the document base URI has no effect because we have to use an abosulte URL for the href in order to set an initial value for the attribute we wish to update. They are included for completeness.');
+debug('');
+
+
+debug("Host attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "http://host:0";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host:0/'");
+
+debug("Host attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "http://foo:80";
+a.host = "host:0";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host:0/'");
+debug('');
+
+
+debug("Hostname attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "http://host";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host/'");
+
+debug("Hostname attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "http://foo";
+a.hostname = "host";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host/'");
+debug('');
+
+
+debug("Protocol attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "protocol:";
+base.href = "http://new_base/";
+shouldBe("a.href", "'protocol:'");
+
+debug("Protocol attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "foo:";
+a.protocol = "protocol:";
+base.href = "http://new_base/";
+shouldBe("a.href", "'protocol:'");
+debug('');
+
+
+debug("Port attribute, update document base URI without attribute having been set");
+base.href = "http://old_base/";
+a.href = "http://host:0";
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host:0/'");
+
+debug("Port attribute, update document base URI after attribute has been set");
+base.href = "http://old_base/";
+a.href = "http://host:80";
+a.port = 0;
+base.href = "http://new_base/";
+shouldBe("a.href", "'http://host:0/'");
+debug('');
+
+
+base.href = '';
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase-expected.txt b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase-expected.txt
new file mode 100644
index 0000000..c7de5cb
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase-expected.txt
@@ -0,0 +1,46 @@
+Tests that when an href attribute is set, the href is no longer subject to updates to the document base URI.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Search attribute, update document base URI without attribute having been set
+PASS a.href is 'http://new_base/?search'
+Search attribute, update document base URI after attribute has been set
+PASS a.href is 'http://old_base/?search'
+
+Pathname attribute, update document base URI without attribute having been set
+PASS a.href is 'http://new_base/path'
+Pathname attribute, update document base URI after attribute has been set
+PASS a.href is 'http://old_base/path'
+
+Hash attribute, update document base URI without attribute having been set
+PASS a.href is 'http://new_base/#hash'
+Pathname attribute, update document base URI after attribute has been set
+PASS a.href is 'http://old_base/#hash'
+
+Note that for the following attributes, updating the document base URI has no effect because we have to use an abosulte URL for the href in order to set an initial value for the attribute we wish to update. They are included for completeness.
+
+Host attribute, update document base URI without attribute having been set
+PASS a.href is 'http://host:0/'
+Host attribute, update document base URI after attribute has been set
+PASS a.href is 'http://host:0/'
+
+Hostname attribute, update document base URI without attribute having been set
+PASS a.href is 'http://host/'
+Hostname attribute, update document base URI after attribute has been set
+PASS a.href is 'http://host/'
+
+Protocol attribute, update document base URI without attribute having been set
+PASS a.href is 'protocol:'
+Protocol attribute, update document base URI after attribute has been set
+PASS a.href is 'protocol:'
+
+Port attribute, update document base URI without attribute having been set
+PASS a.href is 'http://host:0/'
+Port attribute, update document base URI after attribute has been set
+PASS a.href is 'http://host:0/'
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase.html b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase.html
new file mode 100644
index 0000000..bfc1c29
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/set-href-attribute-prevents-rebase.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/resources/fs-test-post.js b/LayoutTests/fast/js/resources/fs-test-post.js
new file mode 100644
index 0000000..6d84656
--- /dev/null
+++ b/LayoutTests/fast/js/resources/fs-test-post.js
@@ -0,0 +1,6 @@
+wasPostTestScriptParsed = true;
+
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+if (window.wasFinishJSTestCalled)
+ finishJSTest();
diff --git a/LayoutTests/fast/js/resources/js-test-pre.js b/LayoutTests/fast/js/resources/js-test-pre.js
index 87db5d4..3536a89 100644
--- a/LayoutTests/fast/js/resources/js-test-pre.js
+++ b/LayoutTests/fast/js/resources/js-test-pre.js
@@ -124,7 +124,7 @@ function shouldBeNull(_a) { shouldBe(_a, "null"); }
function shouldBeEqualToString(a, b)
{
- var unevaledString = '"' + b.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"';
+ var unevaledString = '"' + b.replace(/\\/g, "\\\\").replace(/"/g, "\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r") + '"';
shouldBe(a, unevaledString);
}
diff --git a/LayoutTests/fast/url/query-expected.txt b/LayoutTests/fast/url/query-expected.txt
index 9941416..e4816a5 100644
--- a/LayoutTests/fast/url/query-expected.txt
+++ b/LayoutTests/fast/url/query-expected.txt
@@ -5,7 +5,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
PASS canonicalize('http://www.example.com/?foo=bar') is 'http://www.example.com/?foo=bar'
PASS canonicalize('http://www.example.com/?as?df') is 'http://www.example.com/?as?df'
-FAIL canonicalize('http://www.example.com/?\x02hello bye') should be http://www.example.com/?%02hello%7F%20bye. Was http://www.example.com/?hello%7F%20bye.
+PASS canonicalize('http://www.example.com/?\x02hello bye') is 'http://www.example.com/?%02hello%7F%20bye'
PASS canonicalize('http://www.example.com/?%40%41123') is 'http://www.example.com/?%40%41123'
PASS canonicalize('http://www.example.com/?q=你好') is 'http://www.example.com/?q=%26%2320320%3B%26%2322909%3B'
PASS canonicalize('http://www.example.com/?q=\ud800\ud800') is 'http://www.example.com/?q=%26%2355296%3B%26%2355296%3B'
diff --git a/LayoutTests/fast/url/script-tests/segments-from-data-url.js b/LayoutTests/fast/url/script-tests/segments-from-data-url.js
index 8fc3013..5c4ae02 100644
--- a/LayoutTests/fast/url/script-tests/segments-from-data-url.js
+++ b/LayoutTests/fast/url/script-tests/segments-from-data-url.js
@@ -14,7 +14,7 @@ cases = [
["http://f:00000000000000000000080/c", ["http:","f","0","/c","",""]],
["http://f:b/c", [":","","0","","",""]],
["http://f: /c", [":","","0","","",""]],
- ["http://f:\\n/c", ["http:","f","0","/c","",""]],
+ ["http://f:\\n/c", [":","","0","","",""]],
["http://f:fifty-two/c", [":","","0","","",""]],
["http://f:999999/c", [":","","0","","",""]],
["http://f: 21 / b ? d # e ", [":","","0","","",""]],
diff --git a/LayoutTests/fast/url/script-tests/segments.js b/LayoutTests/fast/url/script-tests/segments.js
index c0c6fa1..c621da1 100644
--- a/LayoutTests/fast/url/script-tests/segments.js
+++ b/LayoutTests/fast/url/script-tests/segments.js
@@ -14,7 +14,7 @@ cases = [
["http://f:00000000000000000000080/c", ["http:","f","0","/c","",""]],
["http://f:b/c", [":","","0","","",""]],
["http://f: /c", [":","","0","","",""]],
- ["http://f:\\n/c", ["http:","f","0","/c","",""]],
+ ["http://f:\\n/c", [":","","0","","",""]],
["http://f:fifty-two/c", [":","","0","","",""]],
["http://f:999999/c", [":","","0","","",""]],
["http://f: 21 / b ? d # e ", [":","","0","","",""]],
diff --git a/LayoutTests/fast/url/segments-expected.txt b/LayoutTests/fast/url/segments-expected.txt
index 3833f36..2da6912 100644
--- a/LayoutTests/fast/url/segments-expected.txt
+++ b/LayoutTests/fast/url/segments-expected.txt
@@ -15,7 +15,7 @@ PASS segments('http://f:00000000000000/c') is '["http:","f","0","/c","",""]'
FAIL segments('http://f:00000000000000000000080/c') should be ["http:","f","0","/c","",""]. Was ["http:","f","80","/c","",""].
PASS segments('http://f:b/c') is '[":","","0","","",""]'
PASS segments('http://f: /c') is '[":","","0","","",""]'
-PASS segments('http://f:\n/c') is '["http:","f","0","/c","",""]'
+PASS segments('http://f:\n/c') is '[":","","0","","",""]'
PASS segments('http://f:fifty-two/c') is '[":","","0","","",""]'
FAIL segments('http://f:999999/c') should be [":","","0","","",""]. Was ["http:","f","65535","/c","",""].
PASS segments('http://f: 21 / b ? d # e ') is '[":","","0","","",""]'
diff --git a/LayoutTests/fast/url/segments-from-data-url-expected.txt b/LayoutTests/fast/url/segments-from-data-url-expected.txt
index 5d102ef..6e1853e 100644
--- a/LayoutTests/fast/url/segments-from-data-url-expected.txt
+++ b/LayoutTests/fast/url/segments-from-data-url-expected.txt
@@ -15,7 +15,7 @@ PASS segments('http://f:00000000000000/c') is '["http:","f","0","/c","",""]'
FAIL segments('http://f:00000000000000000000080/c') should be ["http:","f","0","/c","",""]. Was ["http:","f","80","/c","",""].
PASS segments('http://f:b/c') is '[":","","0","","",""]'
PASS segments('http://f: /c') is '[":","","0","","",""]'
-PASS segments('http://f:\n/c') is '["http:","f","0","/c","",""]'
+PASS segments('http://f:\n/c') is '[":","","0","","",""]'
PASS segments('http://f:fifty-two/c') is '[":","","0","","",""]'
FAIL segments('http://f:999999/c') should be [":","","0","","",""]. Was ["http:","f","65535","/c","",""].
PASS segments('http://f: 21 / b ? d # e ') is '[":","","0","","",""]'
diff --git a/LayoutTests/http/tests/appcache/document-write-html-element-2-expected.txt b/LayoutTests/http/tests/appcache/document-write-html-element-2-expected.txt
new file mode 100644
index 0000000..32581f4
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/document-write-html-element-2-expected.txt
@@ -0,0 +1,2 @@
+SUCCESS, no assertion failure
+applicationCache.status == 1
diff --git a/LayoutTests/http/tests/appcache/document-write-html-element-2.html b/LayoutTests/http/tests/appcache/document-write-html-element-2.html
new file mode 100644
index 0000000..bee9fe0
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/document-write-html-element-2.html
@@ -0,0 +1,19 @@
+<html manifest="resources/document-write-html-element.manifest">
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+function test()
+{
+ document.write("SUCCESS, no assertion failure");
+ document.write("<br>applicationCache.status == " + applicationCache.status);
+
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+}
+
+applicationCache.oncached = test;
+applicationCache.onnoupdate = test;
+</script>
diff --git a/LayoutTests/http/tests/appcache/document-write-html-element-expected.txt b/LayoutTests/http/tests/appcache/document-write-html-element-expected.txt
new file mode 100644
index 0000000..08dccd3
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/document-write-html-element-expected.txt
@@ -0,0 +1 @@
+DONE. Passed if there were no alerts displayed.
diff --git a/LayoutTests/http/tests/appcache/document-write-html-element.html b/LayoutTests/http/tests/appcache/document-write-html-element.html
new file mode 100644
index 0000000..83954bb
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/document-write-html-element.html
@@ -0,0 +1,26 @@
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+window.onload = function()
+{
+ document.write("<html manifest='resources/document-write-html-element.manifest'>");
+ applicationCache.oncached = function() {
+ alert("FAIL: appcache cached");
+ }
+ applicationCache.onnoupdate = function() {
+ alert("FAIL: appcache noupdate");
+ }
+ applicationCache.onerror = function() {
+ alert("FAIL: appcache error");
+ }
+
+ setTimeout(function() {
+ document.write("DONE. Passed if there were no alerts displayed.");
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ }, 100);
+}
+</script>
diff --git a/LayoutTests/http/tests/appcache/fail-on-update-2-expected.txt b/LayoutTests/http/tests/appcache/fail-on-update-2-expected.txt
new file mode 100644
index 0000000..cd15247
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/fail-on-update-2-expected.txt
@@ -0,0 +1 @@
+SUCCESS: No crash.
diff --git a/LayoutTests/http/tests/appcache/fail-on-update-2.html b/LayoutTests/http/tests/appcache/fail-on-update-2.html
new file mode 100644
index 0000000..fcbc3dd
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/fail-on-update-2.html
@@ -0,0 +1,64 @@
+<html manifest="resources/fail-on-update-2.php">
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+function setManifestDeleted(state)
+{
+ var req = new XMLHttpRequest;
+ req.open("GET", "resources/fail-on-update.php?command=" + (state ? "delete" : "reset"), false);
+ req.send(null);
+}
+
+function test()
+{
+ clearTimeout(timeoutId);
+
+ setManifestDeleted(true);
+ applicationCache.update();
+
+ // Create two subframes at different times to make hitting the race condition more likely.
+ var ifr = document.createElement("iframe");
+ ifr.setAttribute("src", 'resources/fail-on-update-2.html');
+ document.body.appendChild(ifr);
+
+ setTimeout(function() {
+ var ifr = document.createElement("iframe");
+ ifr.setAttribute("src", 'resources/fail-on-update-2.html');
+ document.body.appendChild(ifr);
+ }, 0);
+}
+
+var subframesLeft = 2;
+function subframeLoaded()
+{
+ if (!--subframesLeft) {
+ document.write('<p>SUCCESS: No crash.</p>');
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ }
+}
+
+function resetManifest()
+{
+ if (applicationCache.status != applicationCache.UNCACHED && applicationCache.status != applicationCache.OBSOLETE) {
+ timeoutId = setTimeout(resetManifest, 100);
+ return;
+ }
+
+ setManifestDeleted(false);
+ location.reload();
+}
+
+applicationCache.addEventListener('noupdate', function() { setTimeout(test, 0) }, false);
+applicationCache.addEventListener('cached', function() { setTimeout(test, 0) }, false);
+
+// If the manifest script happened to be in a wrong state, reset it.
+var timeoutId = setTimeout(resetManifest, 100);
+
+</script>
+<p>Test for a particular incorrect assertion failure.</p>
+
+</html>
diff --git a/LayoutTests/http/tests/appcache/foreign-fallback-expected.txt b/LayoutTests/http/tests/appcache/foreign-fallback-expected.txt
new file mode 100644
index 0000000..dded924
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/foreign-fallback-expected.txt
@@ -0,0 +1,6 @@
+Test for bug 44406: Application Cache crash when a fallback document has a manifest URL.
+
+PASS
+The frame below should display a Not Found error - the fallback entry is foreign, so it shouldn't be used for main resource.
+
+
diff --git a/LayoutTests/http/tests/appcache/foreign-fallback.html b/LayoutTests/http/tests/appcache/foreign-fallback.html
new file mode 100644
index 0000000..7a80046
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/foreign-fallback.html
@@ -0,0 +1,48 @@
+<html manifest="resources/foreign-fallback.manifest">
+<body>
+<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=44406">bug 44406</a>:
+Application Cache crash when a fallback document has a manifest URL.</p>
+<div id="result">Testing...</div>
+<script>
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.dumpAsText();
+}
+
+
+applicationCache.addEventListener('cached', test, false);
+applicationCache.addEventListener('noupdate', test, false);
+
+function test()
+{
+ var ifr = document.createElement("iframe");
+ ifr.setAttribute("src", "resources/foreign-fallback/does-not-exist.html");
+ document.body.appendChild(ifr);
+
+ // I couldn't find any event that would fire on frame loading failure, so let's poll.
+ setTimeout(frameDone, 100);
+}
+
+function frameDone()
+{
+ try {
+ var frameContent = frames[0].document.documentElement.innerHTML;
+ if (frameContent.match("Not Found"))
+ document.getElementById("result").innerHTML = "PASS";
+ else if (frameContent.match("FAIL"))
+ document.getElementById("result").innerHTML = "FAIL";
+ else
+ throw "Try again";
+
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ } catch (ex) {
+ // Not done yet.
+ setTimeout(frameDone, 100);
+ }
+}
+
+</script>
+<p>The frame below should display a Not Found error - the fallback entry is foreign, so it shouldn't be used for main resource.</p>
+</body>
+</html>
diff --git a/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2-expected.txt b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2-expected.txt
new file mode 100644
index 0000000..08dccd3
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2-expected.txt
@@ -0,0 +1 @@
+DONE. Passed if there were no alerts displayed.
diff --git a/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2.html b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2.html
new file mode 100644
index 0000000..539d28b
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-2.html
@@ -0,0 +1,30 @@
+<html>
+<div></div>
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+var div = document.getElementsByTagName("div")[0];
+div.innerHTML = '<html manifest="resources/insert-html-element-with-manifest.manifest">'
+
+window.onload = function()
+{
+ applicationCache.oncached = function() {
+ alert("FAIL: appcache cached");
+ }
+ applicationCache.onnoupdate = function() {
+ alert("FAIL: appcache noupdate");
+ }
+ applicationCache.onerror = function() {
+ alert("FAIL: appcache error");
+ }
+
+ setTimeout(function() {
+ document.write("DONE. Passed if there were no alerts displayed.");
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ }, 100);
+}
+</script>
diff --git a/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-expected.txt b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-expected.txt
new file mode 100644
index 0000000..08dccd3
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest-expected.txt
@@ -0,0 +1 @@
+DONE. Passed if there were no alerts displayed.
diff --git a/LayoutTests/http/tests/appcache/insert-html-element-with-manifest.html b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest.html
new file mode 100644
index 0000000..694392c
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/insert-html-element-with-manifest.html
@@ -0,0 +1,31 @@
+<html>
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+
+document.removeChild(document.documentElement);
+var newHTML = document.createElement("html");
+newHTML.setAttribute("manifest", "resources/insert-html-element-with-manifest.manifest");
+document.appendChild(newHTML);
+
+window.onload = function()
+{
+ applicationCache.oncached = function() {
+ alert("FAIL: appcache cached");
+ }
+ applicationCache.onnoupdate = function() {
+ alert("FAIL: appcache noupdate");
+ }
+ applicationCache.onerror = function() {
+ alert("FAIL: appcache error");
+ }
+
+ setTimeout(function() {
+ document.write("DONE. Passed if there were no alerts displayed.");
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ }, 100);
+}
+</script>
diff --git a/LayoutTests/http/tests/appcache/main-resource-redirect-expected.txt b/LayoutTests/http/tests/appcache/main-resource-redirect-expected.txt
new file mode 100644
index 0000000..0a727f5
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/main-resource-redirect-expected.txt
@@ -0,0 +1,4 @@
+Test that application cache is consulted again after a redirect response.
+
+PASS
+
diff --git a/LayoutTests/http/tests/appcache/main-resource-redirect.html b/LayoutTests/http/tests/appcache/main-resource-redirect.html
new file mode 100644
index 0000000..3ede636
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/main-resource-redirect.html
@@ -0,0 +1,39 @@
+<html manifest="resources/main-resource-redirect.manifest">
+<body>
+<p>Test that application cache is consulted again after a redirect response.</p>
+<div id="result">Testing...</div>
+<script>
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.dumpAsText();
+}
+
+function setNetworkEnabled(state)
+{
+ var req = new XMLHttpRequest;
+ req.open("GET", "/resources/network-simulator.php?command=" + (state ? "connect" : "disconnect"), false);
+ req.send("");
+}
+
+function test()
+{
+ applicationCache.oncached = null;
+ applicationCache.onnoupdate = null;
+ setNetworkEnabled(false);
+ var ifr = document.createElement("iframe");
+ ifr.setAttribute("src", "resources/main-resource-redirect-frame.php");
+ document.body.appendChild(ifr);
+}
+
+function done()
+{
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ setNetworkEnabled(true);
+}
+
+applicationCache.oncached=test;
+applicationCache.onnoupdate=test;
+applicationCache.onerror = function() { setNetworkEnabled(true); window.location.reload(); }
+</script>
+</body>
diff --git a/LayoutTests/http/tests/appcache/resources/document-write-html-element.manifest b/LayoutTests/http/tests/appcache/resources/document-write-html-element.manifest
new file mode 100644
index 0000000..af16a0e
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/document-write-html-element.manifest
@@ -0,0 +1 @@
+CACHE MANIFEST
diff --git a/LayoutTests/http/tests/appcache/resources/fail-on-update-2.html b/LayoutTests/http/tests/appcache/resources/fail-on-update-2.html
new file mode 100644
index 0000000..7e78de7
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/fail-on-update-2.html
@@ -0,0 +1,7 @@
+<html manifest="fail-on-update-2.php">
+<body>
+<script>
+ top.subframeLoaded();
+</script>
+</body>
+</html>
diff --git a/LayoutTests/http/tests/appcache/resources/fail-on-update-2.php b/LayoutTests/http/tests/appcache/resources/fail-on-update-2.php
new file mode 100644
index 0000000..4e11735
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/fail-on-update-2.php
@@ -0,0 +1,39 @@
+<?php
+require_once '../../resources/portabilityLayer.php';
+
+$tmpFile = sys_get_temp_dir() . "/" . "fail_on_update_state";
+
+function setState($newState, $file)
+{
+ file_put_contents($file, $newState);
+}
+
+function getState($file)
+{
+ if (!file_exists($file)) {
+ return "Uninitialized";
+ }
+ return file_get_contents($file);
+}
+
+$command = $_GET['command'];
+$state = getState($tmpFile);
+
+header("Expires: Thu, 01 Dec 2003 16:00:00 GMT");
+header("Cache-Control: no-cache, must-revalidate");
+header("Pragma: no-cache");
+
+if ($command == "reset") {
+ unlink($tmpFile);
+} else if ($command == "delete") {
+ setState("Deleted", $tmpFile);
+} else if ($state == "Uninitialized") {
+ header("Content-Type: text/cache-manifest");
+ print("CACHE MANIFEST\n");
+ print("fail-on-update-2.html\n");
+ print("NETWORK:\n");
+ print("fail-on-update.php?command=\n");
+} else if ($state == "Deleted") {
+ header('HTTP/1.0 404 Not Found');
+}
+?>
diff --git a/LayoutTests/http/tests/appcache/resources/foreign-fallback-fallback.html b/LayoutTests/http/tests/appcache/resources/foreign-fallback-fallback.html
new file mode 100644
index 0000000..9996bf6
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/foreign-fallback-fallback.html
@@ -0,0 +1,2 @@
+<html manifest="foobar.manifest">
+FAIL
diff --git a/LayoutTests/http/tests/appcache/resources/foreign-fallback.manifest b/LayoutTests/http/tests/appcache/resources/foreign-fallback.manifest
new file mode 100644
index 0000000..ddaf602
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/foreign-fallback.manifest
@@ -0,0 +1,4 @@
+CACHE MANIFEST
+
+FALLBACK:
+/appcache/resources/foreign-fallback/ foreign-fallback-fallback.html
diff --git a/LayoutTests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest b/LayoutTests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest
new file mode 100644
index 0000000..af16a0e
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest
@@ -0,0 +1 @@
+CACHE MANIFEST
diff --git a/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame-2.html b/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame-2.html
new file mode 100644
index 0000000..0acc1e2
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame-2.html
@@ -0,0 +1,6 @@
+<html manifest="http://127.0.0.1:8000/appcache/resources/main-resource-redirect.manifest">
+<script>
+parent.document.getElementById("result").innerHTML = (applicationCache.status) > 0 ? "PASS" : "FAIL: child frame status is UNCACHED";
+parent.done();
+
+</script>
diff --git a/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame.php b/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame.php
new file mode 100644
index 0000000..638057b
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/main-resource-redirect-frame.php
@@ -0,0 +1,4 @@
+<?php
+ header('HTTP/1.0 302 Found');
+ header('Location: http://127.0.0.1:8000/resources/network-simulator.php?path=/appcache/resources/main-resource-redirect-frame-2.html');
+?>
diff --git a/LayoutTests/http/tests/appcache/resources/main-resource-redirect.manifest b/LayoutTests/http/tests/appcache/resources/main-resource-redirect.manifest
new file mode 100644
index 0000000..beffe84
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/main-resource-redirect.manifest
@@ -0,0 +1,4 @@
+CACHE MANIFEST
+http://127.0.0.1:8000/resources/network-simulator.php?path=/appcache/resources/main-resource-redirect-frame-2.html
+NETWORK:
+http://127.0.0.1:8000/resources/network-simulator.php?command
diff --git a/LayoutTests/storage/indexeddb/basics-expected.txt b/LayoutTests/storage/indexeddb/basics-expected.txt
index 7632e40..b7b8b94 100644
--- a/LayoutTests/storage/indexeddb/basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/basics-expected.txt
@@ -3,9 +3,9 @@ Test IndexedDB's basics.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'indexedDB' in window is true
-PASS indexedDB == null is false
-indexedDB.open('name', 'description')
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -22,6 +22,12 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+webkitIndexedDB.open('name');
+PASS Exception thrown.
+webkitIndexedDB.open('name', null);
+PASS Exception thrown.
+webkitIndexedDB.open('name', undefined);
+PASS Exception thrown.
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/basics.html b/LayoutTests/storage/indexeddb/basics.html
index 9f5f20f..2e382b2 100644
--- a/LayoutTests/storage/indexeddb/basics.html
+++ b/LayoutTests/storage/indexeddb/basics.html
@@ -14,25 +14,47 @@ description("Test IndexedDB's basics.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
-function openCallback()
-{
- verifySuccessEvent(event);
- done();
-}
-
function test()
{
- shouldBeTrue("'indexedDB' in window");
- shouldBeFalse("indexedDB == null");
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
// FIXME: Verify other IndexedDatabaseRequest constructors, once they're implemented.
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openCallback;
- result.onerror = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openCallback()
+{
+ verifySuccessEvent(event);
+ try {
+ debug("webkitIndexedDB.open('name');");
+ webkitIndexedDB.open('name');
+ testFailed("Calling IDBFactory::open without a description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ try {
+ debug("webkitIndexedDB.open('name', null);");
+ webkitIndexedDB.open('name', null);
+ testFailed("Calling IDBFactory::open with a null description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ try {
+ debug("webkitIndexedDB.open('name', undefined);");
+ webkitIndexedDB.open('name', undefined);
+ testFailed("Calling IDBFactory::open with an undefined description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ done();
}
+
test();
var successfullyParsed = true;
diff --git a/LayoutTests/storage/indexeddb/constants-expected.txt b/LayoutTests/storage/indexeddb/constants-expected.txt
index ff47655..15a2df7 100644
--- a/LayoutTests/storage/indexeddb/constants-expected.txt
+++ b/LayoutTests/storage/indexeddb/constants-expected.txt
@@ -3,32 +3,32 @@ Test IndexedDB's constants.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS IDBKeyRange.SINGLE is 0
-PASS IDBKeyRange.LEFT_OPEN is 1
-PASS IDBKeyRange.RIGHT_OPEN is 2
-PASS IDBKeyRange.LEFT_BOUND is 4
-PASS IDBKeyRange.RIGHT_BOUND is 8
-PASS IDBDatabaseException.UNKNOWN_ERR is 0
-PASS IDBDatabaseException.NON_TRANSIENT_ERR is 1
-PASS IDBDatabaseException.NOT_FOUND_ERR is 2
-PASS IDBDatabaseException.CONSTRAINT_ERR is 3
-PASS IDBDatabaseException.DATA_ERR is 4
-PASS IDBDatabaseException.NOT_ALLOWED_ERR is 5
-PASS IDBDatabaseException.SERIAL_ERR is 11
-PASS IDBDatabaseException.RECOVERABLE_ERR is 21
-PASS IDBDatabaseException.TRANSIENT_ERR is 31
-PASS IDBDatabaseException.TIMEOUT_ERR is 32
-PASS IDBDatabaseException.DEADLOCK_ERR is 33
-PASS IDBRequest.LOADING is 1
-PASS IDBRequest.DONE is 2
-PASS IDBCursor.NEXT is 0
-PASS IDBCursor.NEXT_NO_DUPLICATE is 1
-PASS IDBCursor.PREV is 2
-PASS IDBCursor.PREV_NO_DUPLICATE is 3
-PASS IDBTransaction.READ_WRITE is 0
-PASS IDBTransaction.READ_ONLY is 1
-PASS IDBTransaction.SNAPSHOT_READ is 2
-PASS IDBTransaction.VERSION_CHANGE is 3
+PASS webkitIDBKeyRange.SINGLE is 0
+PASS webkitIDBKeyRange.LEFT_OPEN is 1
+PASS webkitIDBKeyRange.RIGHT_OPEN is 2
+PASS webkitIDBKeyRange.LEFT_BOUND is 4
+PASS webkitIDBKeyRange.RIGHT_BOUND is 8
+PASS webkitIDBDatabaseException.UNKNOWN_ERR is 0
+PASS webkitIDBDatabaseException.NON_TRANSIENT_ERR is 1
+PASS webkitIDBDatabaseException.NOT_FOUND_ERR is 2
+PASS webkitIDBDatabaseException.CONSTRAINT_ERR is 3
+PASS webkitIDBDatabaseException.DATA_ERR is 4
+PASS webkitIDBDatabaseException.NOT_ALLOWED_ERR is 5
+PASS webkitIDBDatabaseException.SERIAL_ERR is 11
+PASS webkitIDBDatabaseException.RECOVERABLE_ERR is 21
+PASS webkitIDBDatabaseException.TRANSIENT_ERR is 31
+PASS webkitIDBDatabaseException.TIMEOUT_ERR is 32
+PASS webkitIDBDatabaseException.DEADLOCK_ERR is 33
+PASS webkitIDBRequest.LOADING is 1
+PASS webkitIDBRequest.DONE is 2
+PASS webkitIDBCursor.NEXT is 0
+PASS webkitIDBCursor.NEXT_NO_DUPLICATE is 1
+PASS webkitIDBCursor.PREV is 2
+PASS webkitIDBCursor.PREV_NO_DUPLICATE is 3
+PASS webkitIDBTransaction.READ_WRITE is 0
+PASS webkitIDBTransaction.READ_ONLY is 1
+PASS webkitIDBTransaction.SNAPSHOT_READ is 2
+PASS webkitIDBTransaction.VERSION_CHANGE is 3
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/constants.html b/LayoutTests/storage/indexeddb/constants.html
index dd24917..813fe7a 100644
--- a/LayoutTests/storage/indexeddb/constants.html
+++ b/LayoutTests/storage/indexeddb/constants.html
@@ -16,36 +16,36 @@ if (window.layoutTestController)
function test()
{
- shouldBe("IDBKeyRange.SINGLE", "0");
- shouldBe("IDBKeyRange.LEFT_OPEN", "1");
- shouldBe("IDBKeyRange.RIGHT_OPEN", "2");
- shouldBe("IDBKeyRange.LEFT_BOUND", "4");
- shouldBe("IDBKeyRange.RIGHT_BOUND", "8");
-
- shouldBe("IDBDatabaseException.UNKNOWN_ERR", "0");
- shouldBe("IDBDatabaseException.NON_TRANSIENT_ERR", "1");
- shouldBe("IDBDatabaseException.NOT_FOUND_ERR", "2");
- shouldBe("IDBDatabaseException.CONSTRAINT_ERR", "3");
- shouldBe("IDBDatabaseException.DATA_ERR", "4");
- shouldBe("IDBDatabaseException.NOT_ALLOWED_ERR", "5");
- shouldBe("IDBDatabaseException.SERIAL_ERR", "11");
- shouldBe("IDBDatabaseException.RECOVERABLE_ERR", "21");
- shouldBe("IDBDatabaseException.TRANSIENT_ERR", "31");
- shouldBe("IDBDatabaseException.TIMEOUT_ERR", "32");
- shouldBe("IDBDatabaseException.DEADLOCK_ERR", "33");
-
- shouldBe("IDBRequest.LOADING", "1");
- shouldBe("IDBRequest.DONE", "2");
-
- shouldBe("IDBCursor.NEXT", "0");
- shouldBe("IDBCursor.NEXT_NO_DUPLICATE", "1");
- shouldBe("IDBCursor.PREV", "2");
- shouldBe("IDBCursor.PREV_NO_DUPLICATE", "3");
-
- shouldBe("IDBTransaction.READ_WRITE", "0");
- shouldBe("IDBTransaction.READ_ONLY", "1");
- shouldBe("IDBTransaction.SNAPSHOT_READ", "2");
- shouldBe("IDBTransaction.VERSION_CHANGE", "3");
+ shouldBe("webkitIDBKeyRange.SINGLE", "0");
+ shouldBe("webkitIDBKeyRange.LEFT_OPEN", "1");
+ shouldBe("webkitIDBKeyRange.RIGHT_OPEN", "2");
+ shouldBe("webkitIDBKeyRange.LEFT_BOUND", "4");
+ shouldBe("webkitIDBKeyRange.RIGHT_BOUND", "8");
+
+ shouldBe("webkitIDBDatabaseException.UNKNOWN_ERR", "0");
+ shouldBe("webkitIDBDatabaseException.NON_TRANSIENT_ERR", "1");
+ shouldBe("webkitIDBDatabaseException.NOT_FOUND_ERR", "2");
+ shouldBe("webkitIDBDatabaseException.CONSTRAINT_ERR", "3");
+ shouldBe("webkitIDBDatabaseException.DATA_ERR", "4");
+ shouldBe("webkitIDBDatabaseException.NOT_ALLOWED_ERR", "5");
+ shouldBe("webkitIDBDatabaseException.SERIAL_ERR", "11");
+ shouldBe("webkitIDBDatabaseException.RECOVERABLE_ERR", "21");
+ shouldBe("webkitIDBDatabaseException.TRANSIENT_ERR", "31");
+ shouldBe("webkitIDBDatabaseException.TIMEOUT_ERR", "32");
+ shouldBe("webkitIDBDatabaseException.DEADLOCK_ERR", "33");
+
+ shouldBe("webkitIDBRequest.LOADING", "1");
+ shouldBe("webkitIDBRequest.DONE", "2");
+
+ shouldBe("webkitIDBCursor.NEXT", "0");
+ shouldBe("webkitIDBCursor.NEXT_NO_DUPLICATE", "1");
+ shouldBe("webkitIDBCursor.PREV", "2");
+ shouldBe("webkitIDBCursor.PREV_NO_DUPLICATE", "3");
+
+ shouldBe("webkitIDBTransaction.READ_WRITE", "0");
+ shouldBe("webkitIDBTransaction.READ_ONLY", "1");
+ shouldBe("webkitIDBTransaction.SNAPSHOT_READ", "2");
+ shouldBe("webkitIDBTransaction.VERSION_CHANGE", "3");
}
test();
diff --git a/LayoutTests/storage/indexeddb/database-basics-expected.txt b/LayoutTests/storage/indexeddb/database-basics-expected.txt
index 42c9879..2a5fa2f 100644
--- a/LayoutTests/storage/indexeddb/database-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/database-basics-expected.txt
@@ -3,7 +3,7 @@ Test the basics of IndexedDB's IDBDatabase.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,6 +21,27 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
Testing setVersion.
db.setVersion("version a")
PASS 'onsuccess' in result is true
@@ -61,7 +82,15 @@ PASS db.name is "name"
PASS db.objectStores is []
PASS db.objectStores.length is 0
PASS db.objectStores.contains('') is false
+PASS db.objectStores[0] is null
+PASS db.objectStores.item(0) is null
db.createObjectStore("test123")
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+db.setVersion("version c")
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -78,6 +107,17 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+PASS db.version is "version c"
+PASS db.name is "name"
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+db.createObjectStore("test456")
+setVersionTrans = event.result
+PASS setVersionTrans !== null is true
+PASS db.version is "version b"
PASS db.objectStores is ['test123']
PASS db.objectStores.length is 1
PASS db.objectStores.contains('') is false
diff --git a/LayoutTests/storage/indexeddb/database-basics.html b/LayoutTests/storage/indexeddb/database-basics.html
index b099a49..31c887b 100644
--- a/LayoutTests/storage/indexeddb/database-basics.html
+++ b/LayoutTests/storage/indexeddb/database-basics.html
@@ -14,23 +14,43 @@ description("Test the basics of IndexedDB's IDBDatabase.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
function openSuccess()
{
verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
- var db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- // We must do something asynchronous before anything synchronous since
- // deleteAllObjectStores only schedules the object stores to be removed.
- // We don't know for sure whether it's happened until an IDBRequest object
- // that was created after the removes fires.
+ deleteAllObjectStores(db, testSetVersion);
+}
+function testSetVersion()
+{
debug("Testing setVersion.");
result = evalAndLog('db.setVersion("version a")');
verifyResult(result);
result.onsuccess = setVersionAgain;
- result.onError = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
}
function setVersionAgain()
@@ -40,7 +60,7 @@ function setVersionAgain()
result = evalAndLog('db.setVersion("version b")');
verifyResult(result);
result.onsuccess = createObjectStore;
- result.onError = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
}
function createObjectStore()
@@ -51,33 +71,58 @@ function createObjectStore()
shouldBe("db.objectStores", "[]");
shouldBe("db.objectStores.length", "0");
shouldBe("db.objectStores.contains('')", "false");
+ shouldBeNull("db.objectStores[0]");
+ shouldBeNull("db.objectStores.item(0)");
- result = evalAndLog('db.createObjectStore("test123")');
- verifyResult(result);
- result.onsuccess = checkObjectStore;
- result.onError = unexpectedErrorCallback;
+ objectStore = evalAndLog('db.createObjectStore("test123")');
+ checkObjectStore();
+ commitAndContinue();
}
function checkObjectStore()
{
- verifySuccessEvent(event);
shouldBe("db.objectStores", "['test123']");
shouldBe("db.objectStores.length", "1");
shouldBe("db.objectStores.contains('')", "false");
shouldBe("db.objectStores.contains('test456')", "false");
shouldBe("db.objectStores.contains('test123')", "true");
+}
- done();
+function commitAndContinue()
+{
+ window.setTimeout(testSetVersionAbort, 0);
}
-function test()
+function testSetVersionAbort()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog('db.setVersion("version c")');
verifyResult(result);
- result.onsuccess = openSuccess;
+ result.onsuccess = createAnotherObjectStore;
result.onerror = unexpectedErrorCallback;
}
+function createAnotherObjectStore()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "version c");
+ shouldBeEqualToString("db.name", "name");
+ checkObjectStore();
+
+ objectStore = evalAndLog('db.createObjectStore("test456")');
+ var setVersionTrans = evalAndLog("setVersionTrans = event.result");
+ shouldBeTrue("setVersionTrans !== null");
+ setVersionTrans.oncomplete = unexpectedCompleteCallback;
+ setVersionTrans.onabort = checkMetadata;
+ setVersionTrans.abort();
+}
+
+function checkMetadata()
+{
+ shouldBeEqualToString("db.version", "version b");
+ checkObjectStore();
+ done();
+}
+
test();
var successfullyParsed = true;
diff --git a/LayoutTests/storage/indexeddb/database-quota-expected.txt b/LayoutTests/storage/indexeddb/database-quota-expected.txt
new file mode 100644
index 0000000..b6ea505
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/database-quota-expected.txt
@@ -0,0 +1,1115 @@
+Tests IndexedDB's quota enforcing mechanism.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name', 'description')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS db.version is "new version"
+PASS db.name is "name"
+PASS db.objectStores is []
+PASS db.objectStores.length is 0
+PASS db.objectStores.contains('') is false
+db.createObjectStore("test123")
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+trans = db.transaction()
+Creating 'data' which contains 64K of data
+PASS data.length is 65536
+store = trans.objectStore('test123')
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Error function called: (0) Error writing data to stable storage.
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS Adding data failed due to quota error. Data added was: 5120 KB
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/database-quota.html b/LayoutTests/storage/indexeddb/database-quota.html
new file mode 100644
index 0000000..45ce709
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/database-quota.html
@@ -0,0 +1,126 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Tests IndexedDB's quota enforcing mechanism.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createNewObjectStore);
+}
+
+function createNewObjectStore()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "new version");
+ shouldBeEqualToString("db.name", "name");
+ shouldBe("db.objectStores", "[]");
+ shouldBe("db.objectStores.length", "0");
+ shouldBe("db.objectStores.contains('')", "false");
+
+ objectStore = evalAndLog('db.createObjectStore("test123")');
+ checkObjectStore();
+ commitAndContinue();
+}
+
+function checkObjectStore()
+{
+ shouldBe("db.objectStores", "['test123']");
+ shouldBe("db.objectStores.length", "1");
+ shouldBe("db.objectStores.contains('')", "false");
+ shouldBe("db.objectStores.contains('test456')", "false");
+ shouldBe("db.objectStores.contains('test123')", "true");
+}
+
+function commitAndContinue()
+{
+ window.setTimeout(checkQuotaEnforcing, 0);
+}
+
+function checkQuotaEnforcing()
+{
+ var trans = evalAndLog("trans = db.transaction()");
+ trans.onabort = testComplete;
+ trans.oncomplete = unexpectedCompleteCallback;
+ debug("Creating 'data' which contains 64K of data");
+ window.data = "X";
+ for (var i = 0; i < 16; i++)
+ data += data;
+ shouldBe("data.length", "65536");
+ window.dataAdded = 0;
+ window.store = evalAndLog("store = trans.objectStore('test123')");
+ addData();
+}
+
+function addData()
+{
+ if (dataAdded < 5 * 1024 * 1024) {
+ if (dataAdded > 0) {
+ verifySuccessEvent(event);
+ store = evalAndLog("store = event.source");
+ }
+ } else {
+ testFailed("added more than quota");
+ done();
+ return;
+ }
+ dataAdded += 65536;
+ result = evalAndLog("store.add({x: data}, dataAdded)");
+ result.onsuccess = addData;
+ result.onerror = logError;
+}
+
+function logError()
+{
+ debug("Error function called: (" + event.code + ") " + event.message);
+ verifyErrorEvent(event);
+}
+
+function testComplete()
+{
+ testPassed("Adding data failed due to quota error. Data added was: " + dataAdded / 1024 + " KB");
+ done();
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/index-basics-expected.txt b/LayoutTests/storage/indexeddb/index-basics-expected.txt
index 564bdc8..0869d95 100644
--- a/LayoutTests/storage/indexeddb/index-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/index-basics-expected.txt
@@ -1,9 +1,9 @@
-Test the basics of IndexedDB's IDBIndex.
+Test the basics of IndexedDB's webkitIDBIndex.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,12 +21,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -38,8 +39,25 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-store = event.result
-event.result.createIndex('indexName', 'x')
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
+store.createIndex('indexName', 'x')
+store.createIndex('indexName2', 'y', false)
+PASS 'name' in indexObject is true
+PASS indexObject.name is "indexName"
+PASS 'storeName' in indexObject is true
+PASS indexObject.storeName is "storeName"
+PASS 'keyPath' in indexObject is true
+PASS indexObject.keyPath is "x"
+PASS 'unique' in indexObject is true
+PASS indexObject.unique is false
+PASS 'openKeyCursor' in indexObject is true
+PASS 'openCursor' in indexObject is true
+PASS 'getKey' in indexObject is true
+PASS 'get' in indexObject is true
+store.add({x: 'value', y: 'zzz'}, 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -56,21 +74,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result === null is false
-indexObject = event.result
-PASS 'name' in indexObject is true
-PASS indexObject.name is "indexName"
-PASS 'storeName' in indexObject is true
-PASS indexObject.storeName is "storeName"
-PASS 'keyPath' in indexObject is true
-PASS indexObject.keyPath is "x"
-PASS 'unique' in indexObject is true
-PASS indexObject.unique is false
-PASS 'openObjectCursor' in indexObject is true
-PASS 'openCursor' in indexObject is true
-PASS 'getObject' in indexObject is true
-PASS 'get' in indexObject is true
-event.source.add({x: 'value', y: 'zzz'}, 'key')
+event.source.add({x: 'value2', y: 'zzz2'}, 'key2')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -87,7 +91,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-event.source.add({x: 'value2', y: 'zzz2'}, 'key2')
+indexObject.getKey('value')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -104,7 +108,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-indexObject.get('value')
+PASS event.result is "key"
+indexObject2.getKey('zzz')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -122,7 +127,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is "key"
-indexObject.getObject('value')
+indexObject.get('value')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -141,7 +146,7 @@ PASS event.target.readyState is event.target.DONE
PASS event.result.x is "value"
PASS event.result.y is "zzz"
-indexObject.get('does not exist')
+indexObject.getKey('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -158,8 +163,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.NOT_FOUND_ERR
-indexObject.getObject('does not exist')
+PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+indexObject.get('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -176,8 +181,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.NOT_FOUND_ERR
-indexObject.openCursor()
+PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+indexObject.openKeyCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -235,7 +240,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result === null is true
-indexObject.openObjectCursor()
+indexObject.openCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/index-basics.html b/LayoutTests/storage/indexeddb/index-basics.html
index c23f141..f7257f1 100644
--- a/LayoutTests/storage/indexeddb/index-basics.html
+++ b/LayoutTests/storage/indexeddb/index-basics.html
@@ -10,47 +10,50 @@
<div id="console"></div>
<script>
-description("Test the basics of IndexedDB's IDBIndex.");
+description("Test the basics of IndexedDB's webkitIDBIndex.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
- result.onsuccess = createObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createIndex;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function createIndex()
+function deleteExisting()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- window.store = evalAndLog("store = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- result = evalAndLog("event.result.createIndex('indexName', 'x')");
- verifyResult(result);
- result.onsuccess = addData;
- result.onerror = unexpectedErrorCallback;
+ deleteAllObjectStores(db, createIndex);
+}
+
+function createIndex()
+{
+ window.store = evalAndLog("db.createObjectStore('storeName', null)");
+ window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
+ window.indexObject2 = evalAndLog("store.createIndex('indexName2', 'y', false)");
+ addData();
}
function addData()
{
- verifySuccessEvent(event);
- shouldBeFalse("event.result === null");
- window.indexObject = evalAndLog("indexObject = event.result");
shouldBeTrue("'name' in indexObject");
shouldBeEqualToString("indexObject.name", "indexName");
shouldBeTrue("'storeName' in indexObject");
@@ -59,12 +62,12 @@ function addData()
shouldBeEqualToString("indexObject.keyPath", "x");
shouldBeTrue("'unique' in indexObject");
shouldBeFalse("indexObject.unique");
- shouldBeTrue("'openObjectCursor' in indexObject");
+ shouldBeTrue("'openKeyCursor' in indexObject");
shouldBeTrue("'openCursor' in indexObject");
- shouldBeTrue("'getObject' in indexObject");
+ shouldBeTrue("'getKey' in indexObject");
shouldBeTrue("'get' in indexObject");
- result = evalAndLog("event.source.add({x: 'value', y: 'zzz'}, 'key')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
verifyResult(result);
result.onsuccess = addMore;
result.onerror = unexpectedErrorCallback;
@@ -84,7 +87,7 @@ function getData()
{
verifySuccessEvent(event);
- result = evalAndLog("indexObject.get('value')");
+ result = evalAndLog("indexObject.getKey('value')");
verifyResult(result);
result.onsuccess = getObjectData;
result.onerror = unexpectedErrorCallback;
@@ -95,7 +98,18 @@ function getObjectData()
verifySuccessEvent(event);
shouldBeEqualToString("event.result", "key");
- result = evalAndLog("indexObject.getObject('value')");
+ result = evalAndLog("indexObject2.getKey('zzz')");
+ verifyResult(result);
+ result.onsuccess = getObjectData2;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function getObjectData2()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result", "key");
+
+ result = evalAndLog("indexObject.get('value')");
verifyResult(result);
result.onsuccess = getDataFail;
result.onerror = unexpectedErrorCallback;
@@ -107,7 +121,7 @@ function getDataFail()
shouldBeEqualToString("event.result.x", "value");
shouldBeEqualToString("event.result.y", "zzz");
- result = evalAndLog("indexObject.get('does not exist')");
+ result = evalAndLog("indexObject.getKey('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
result.onerror = getObjectDataFail;
@@ -116,20 +130,20 @@ function getDataFail()
function getObjectDataFail()
{
verifyErrorEvent(event);
- shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- result = evalAndLog("indexObject.getObject('does not exist')");
+ result = evalAndLog("indexObject.get('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
- result.onerror = openCursor;
+ result.onerror = openKeyCursor;
}
-function openCursor()
+function openKeyCursor()
{
verifyErrorEvent(event);
- shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- window.result = evalAndLog("indexObject.openCursor()");
+ window.result = evalAndLog("indexObject.openKeyCursor()");
verifyResult(result);
result.onsuccess = cursor1Continue;
result.onerror = unexpectedErrorCallback;
@@ -166,7 +180,7 @@ function openObjectCursor()
verifySuccessEvent(event);
shouldBeTrue("event.result === null");
- window.result = evalAndLog("indexObject.openObjectCursor()");
+ window.result = evalAndLog("indexObject.openCursor()");
verifyResult(result);
result.onsuccess = cursor2Continue;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/index-cursor-expected.txt b/LayoutTests/storage/indexeddb/index-cursor-expected.txt
index 6d1417f..88b96ff 100644
--- a/LayoutTests/storage/indexeddb/index-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/index-cursor-expected.txt
@@ -1,9 +1,9 @@
-Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth.
+Test IndexedDB's webkitIDBIndex.openCursor + the cursor it produces in depth.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('someDB', 'some description')
+webkitIndexedDB.open('someDB', 'some description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('someObjectStore')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,36 +38,11 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('someObjectStore')
objectStore.createIndex('someIndex', 'x')
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
-indexObject = event.result
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
objectStore.add({'x': testData[nextToAdd]}, nextToAdd)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/index-cursor.html b/LayoutTests/storage/indexeddb/index-cursor.html
index 9541d60..5aab4f8 100644
--- a/LayoutTests/storage/indexeddb/index-cursor.html
+++ b/LayoutTests/storage/indexeddb/index-cursor.html
@@ -10,7 +10,7 @@
<div id="console"></div>
<script>
-description("Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth.");
+description("Test IndexedDB's webkitIDBIndex.openCursor + the cursor it produces in depth.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
@@ -29,49 +29,45 @@ window.testData = [
function openDatabase()
{
- result = evalAndLog("indexedDB.open('someDB', 'some description')");
+ result = evalAndLog("webkitIndexedDB.open('someDB', 'some description')");
verifyResult(result);
- result.onsuccess = openObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function openObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('someObjectStore')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = openIndex;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function openIndex()
+function deleteExisting()
{
verifySuccessEvent(event);
- window.objectStore = evalAndLog("objectStore = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- result = evalAndLog("objectStore.createIndex('someIndex', 'x')");
- verifyResult(result);
- result.onsuccess = startAddingData;
- result.onerror = unexpectedErrorCallback;
+ deleteAllObjectStores(db, startAddingData);
}
function startAddingData()
{
- verifySuccessEvent(event);
- window.indexObject = evalAndLog("indexObject = event.result");
-
+ window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
+ window.indexObject = evalAndLog("objectStore.createIndex('someIndex', 'x')");
window.nextToAdd = 0;
addData();
}
function addData()
{
- // We cheat when called for the first time; we're in the context of the objectStore success event.
- verifySuccessEvent(event);
+ if (window.nextToAdd > 0)
+ verifySuccessEvent(event);
result = evalAndLog("objectStore.add({'x': testData[nextToAdd]}, nextToAdd)");
verifyResult(result);
@@ -105,7 +101,7 @@ function scheduleTests()
}
debug("Running tests...");
- setTimeout(runNextTest, 0);
+ runNextTest();
}
function runNextTest()
@@ -184,13 +180,13 @@ function runNextTest()
var keyRange;
if (lower !== null && upper !== null)
- keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+ keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
else if (lower !== null)
- keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+ keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
else
- keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen);
+ keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
- var request = indexObject.openCursor(keyRange, ascending ? IDBCursor.NEXT : IDBCursor.PREV);
+ var request = indexObject.openKeyCursor(keyRange, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
@@ -213,12 +209,12 @@ function cursorIteration()
{
if (expectedIndex === null) {
shouldBeNull("event.result");
- setTimeout(runNextTest, 0);
+ runNextTest();
return;
}
if (event.result === null) {
- testFailed("Event.result should not be null.")
- setTimeout(runNextTest, 0);
+ testFailed("Event.result should not be null.");
+ runNextTest();
return;
}
diff --git a/LayoutTests/storage/indexeddb/keyrange-expected.txt b/LayoutTests/storage/indexeddb/keyrange-expected.txt
index 6528a11..8d6bf86 100644
--- a/LayoutTests/storage/indexeddb/keyrange-expected.txt
+++ b/LayoutTests/storage/indexeddb/keyrange-expected.txt
@@ -3,20 +3,20 @@ Test IndexedDB's KeyRange.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'SINGLE' in IDBKeyRange is true
-PASS 'LEFT_OPEN' in IDBKeyRange is true
-PASS 'RIGHT_OPEN' in IDBKeyRange is true
-PASS 'LEFT_BOUND' in IDBKeyRange is true
-PASS 'RIGHT_BOUND' in IDBKeyRange is true
-PASS 'left' in IDBKeyRange is false
-PASS 'right' in IDBKeyRange is false
-PASS 'flags' in IDBKeyRange is false
-PASS 'only' in IDBKeyRange is true
-PASS 'leftBound' in IDBKeyRange is true
-PASS 'rightBound' in IDBKeyRange is true
-PASS 'bound' in IDBKeyRange is true
+PASS 'SINGLE' in webkitIDBKeyRange is true
+PASS 'LEFT_OPEN' in webkitIDBKeyRange is true
+PASS 'RIGHT_OPEN' in webkitIDBKeyRange is true
+PASS 'LEFT_BOUND' in webkitIDBKeyRange is true
+PASS 'RIGHT_BOUND' in webkitIDBKeyRange is true
+PASS 'left' in webkitIDBKeyRange is false
+PASS 'right' in webkitIDBKeyRange is false
+PASS 'flags' in webkitIDBKeyRange is false
+PASS 'only' in webkitIDBKeyRange is true
+PASS 'leftBound' in webkitIDBKeyRange is true
+PASS 'rightBound' in webkitIDBKeyRange is true
+PASS 'bound' in webkitIDBKeyRange is true
-instance = IDBKeyRange.only(1)
+instance = webkitIDBKeyRange.only(1)
PASS 'SINGLE' in instance is true
PASS 'LEFT_OPEN' in instance is true
PASS 'RIGHT_OPEN' in instance is true
@@ -30,113 +30,113 @@ PASS 'leftBound' in instance is false
PASS 'rightBound' in instance is false
PASS 'bound' in instance is false
-IDBKeyRange.only(1)
+webkitIDBKeyRange.only(1)
PASS keyRange.left is 1
PASS keyRange.right is 1
PASS keyRange.flags is keyRange.SINGLE
-IDBKeyRange.only('a')
+webkitIDBKeyRange.only('a')
PASS keyRange.left is 'a'
PASS keyRange.right is 'a'
PASS keyRange.flags is keyRange.SINGLE
-IDBKeyRange.leftBound(10,true)
+webkitIDBKeyRange.leftBound(10,true)
PASS keyRange.left is 10
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-IDBKeyRange.leftBound(11,false)
+webkitIDBKeyRange.leftBound(11,false)
PASS keyRange.left is 11
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound(12,undefined)
+webkitIDBKeyRange.leftBound(12,undefined)
PASS keyRange.left is 12
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('aa',true)
+webkitIDBKeyRange.leftBound('aa',true)
PASS keyRange.left is 'aa'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('ab',false)
+webkitIDBKeyRange.leftBound('ab',false)
PASS keyRange.left is 'ab'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('ac',undefined)
+webkitIDBKeyRange.leftBound('ac',undefined)
PASS keyRange.left is 'ac'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.rightBound(20,true)
+webkitIDBKeyRange.rightBound(20,true)
PASS keyRange.right is 20
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound(21,false)
+webkitIDBKeyRange.rightBound(21,false)
PASS keyRange.right is 21
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound(22,undefined)
+webkitIDBKeyRange.rightBound(22,undefined)
PASS keyRange.right is 22
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('ba',true)
+webkitIDBKeyRange.rightBound('ba',true)
PASS keyRange.right is 'ba'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('bb',false)
+webkitIDBKeyRange.rightBound('bb',false)
PASS keyRange.right is 'bb'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('bc',undefined)
+webkitIDBKeyRange.rightBound('bc',undefined)
PASS keyRange.right is 'bc'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(30,40,undefined,undefined)
+webkitIDBKeyRange.bound(30,40,undefined,undefined)
PASS keyRange.left is 30
PASS keyRange.right is 40
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(31,41,false,false)
+webkitIDBKeyRange.bound(31,41,false,false)
PASS keyRange.left is 31
PASS keyRange.right is 41
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(32,42,false,true)
+webkitIDBKeyRange.bound(32,42,false,true)
PASS keyRange.left is 32
PASS keyRange.right is 42
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound(33,43,true,false)
+webkitIDBKeyRange.bound(33,43,true,false)
PASS keyRange.left is 33
PASS keyRange.right is 43
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(34,44,true,true)
+webkitIDBKeyRange.bound(34,44,true,true)
PASS keyRange.left is 34
PASS keyRange.right is 44
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aaa','aba',false,false)
+webkitIDBKeyRange.bound('aaa','aba',false,false)
PASS keyRange.left is 'aaa'
PASS keyRange.right is 'aba'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aab','abb',undefined,undefined)
+webkitIDBKeyRange.bound('aab','abb',undefined,undefined)
PASS keyRange.left is 'aab'
PASS keyRange.right is 'abb'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aac','abc',false,false)
+webkitIDBKeyRange.bound('aac','abc',false,false)
PASS keyRange.left is 'aac'
PASS keyRange.right is 'abc'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aad','abd',false,true)
+webkitIDBKeyRange.bound('aad','abd',false,true)
PASS keyRange.left is 'aad'
PASS keyRange.right is 'abd'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aae','abe',true,false)
+webkitIDBKeyRange.bound('aae','abe',true,false)
PASS keyRange.left is 'aae'
PASS keyRange.right is 'abe'
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aaf','abf',true,true)
+webkitIDBKeyRange.bound('aaf','abf',true,true)
PASS keyRange.left is 'aaf'
PASS keyRange.right is 'abf'
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
diff --git a/LayoutTests/storage/indexeddb/keyrange.html b/LayoutTests/storage/indexeddb/keyrange.html
index d60cb15..c3885fc 100644
--- a/LayoutTests/storage/indexeddb/keyrange.html
+++ b/LayoutTests/storage/indexeddb/keyrange.html
@@ -16,7 +16,7 @@ if (window.layoutTestController)
function checkSingleKeyRange(value)
{
- keyRange = evalAndLog("IDBKeyRange.only(" + value + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.only(" + value + ")");
shouldBe("keyRange.left", "" + value);
shouldBe("keyRange.right", "" + value);
shouldBe("keyRange.flags", "keyRange.SINGLE");
@@ -24,7 +24,7 @@ function checkSingleKeyRange(value)
function checkLeftBoundKeyRange(value, open)
{
- keyRange = evalAndLog("IDBKeyRange.leftBound(" + value + "," + open + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.leftBound(" + value + "," + open + ")");
shouldBe("keyRange.left", "" + value);
shouldBeNull("keyRange.right");
shouldBe("keyRange.flags", open ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND");
@@ -32,7 +32,7 @@ function checkLeftBoundKeyRange(value, open)
function checkRightBoundKeyRange(value, open)
{
- keyRange = evalAndLog("IDBKeyRange.rightBound(" + value + "," + open + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.rightBound(" + value + "," + open + ")");
shouldBe("keyRange.right", "" + value);
shouldBeNull("keyRange.left");
shouldBe("keyRange.flags", open ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND");
@@ -40,7 +40,7 @@ function checkRightBoundKeyRange(value, open)
function checkBoundKeyRange(left, right, openLeft, openRight)
{
- keyRange = evalAndLog("IDBKeyRange.bound(" + left + "," + right + "," + openLeft + "," + openRight + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.bound(" + left + "," + right + "," + openLeft + "," + openRight + ")");
shouldBe("keyRange.left", "" + left);
shouldBe("keyRange.right", "" + right);
leftFlags = keyRange.flags & (keyRange.LEFT_OPEN | keyRange.LEFT_BOUND);
@@ -51,22 +51,22 @@ function checkBoundKeyRange(left, right, openLeft, openRight)
function test()
{
- shouldBeTrue("'SINGLE' in IDBKeyRange");
- shouldBeTrue("'LEFT_OPEN' in IDBKeyRange");
- shouldBeTrue("'RIGHT_OPEN' in IDBKeyRange");
- shouldBeTrue("'LEFT_BOUND' in IDBKeyRange");
- shouldBeTrue("'RIGHT_BOUND' in IDBKeyRange");
- shouldBeFalse("'left' in IDBKeyRange");
- shouldBeFalse("'right' in IDBKeyRange");
- shouldBeFalse("'flags' in IDBKeyRange");
- shouldBeTrue("'only' in IDBKeyRange");
- shouldBeTrue("'leftBound' in IDBKeyRange");
- shouldBeTrue("'rightBound' in IDBKeyRange");
- shouldBeTrue("'bound' in IDBKeyRange");
+ shouldBeTrue("'SINGLE' in webkitIDBKeyRange");
+ shouldBeTrue("'LEFT_OPEN' in webkitIDBKeyRange");
+ shouldBeTrue("'RIGHT_OPEN' in webkitIDBKeyRange");
+ shouldBeTrue("'LEFT_BOUND' in webkitIDBKeyRange");
+ shouldBeTrue("'RIGHT_BOUND' in webkitIDBKeyRange");
+ shouldBeFalse("'left' in webkitIDBKeyRange");
+ shouldBeFalse("'right' in webkitIDBKeyRange");
+ shouldBeFalse("'flags' in webkitIDBKeyRange");
+ shouldBeTrue("'only' in webkitIDBKeyRange");
+ shouldBeTrue("'leftBound' in webkitIDBKeyRange");
+ shouldBeTrue("'rightBound' in webkitIDBKeyRange");
+ shouldBeTrue("'bound' in webkitIDBKeyRange");
debug("");
- var instance = evalAndLog("instance = IDBKeyRange.only(1)");
+ var instance = evalAndLog("instance = webkitIDBKeyRange.only(1)");
shouldBeTrue("'SINGLE' in instance");
shouldBeTrue("'LEFT_OPEN' in instance");
shouldBeTrue("'RIGHT_OPEN' in instance");
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
index 7b5439a..d22e6f0 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
@@ -3,7 +3,7 @@ Test the basics of IndexedDB's IDBObjectStore.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -22,13 +22,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-createSuccess():
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -40,23 +40,34 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-store = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+creatObjectStore():
+store = db.createObjectStore('storeName', null)
storeNames = db.objectStores
PASS store.name is "storeName"
PASS store.keyPath is null
PASS storeNames.contains('storeName') is true
PASS storeNames.length is 1
-Ask for a store that doesn't exist:
+Ask for an index that doesn't exist:
index = store.index('asdf')
-PASS index is null
-FAIL Asking for a store that doesn't exist should have thrown.
-event.result.createIndex('indexName', 'x', true)
+PASS Exception thrown.
+createIndex():
+index = store.createIndex('indexName', 'x', true)
+PASS index !== null is true
+PASS store.indexNames.contains('indexName') is true
+index = store.index('indexName')
+PASS index !== null is true
+Ask for an index that doesn't exist:
+index = store.index('asdf')
+PASS Exception thrown.
+db.setVersion("version fail")
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-addIndexSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -68,15 +79,25 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result !== null is true
-PASS event.source.indexNames.contains('indexName') is true
-index = event.source.index('indexName')
-PASS index !== null is true
-Ask for a store that doesn't exist:
-index = store.index('asdf')
-PASS index is null
-FAIL Asking for a store that doesn't exist should have thrown.
-event.source.add({x: 'value'}, 'key')
+PASS db.version is "version fail"
+setVersionTrans = event.result
+PASS setVersionTrans !== null is true
+store = setVersionTrans.objectStore('storeName')
+index = store.createIndex('indexFail', 'x')
+PASS db.version is "new version"
+PASS store.indexNames is ['indexName']
+PASS store.indexNames.length is 1
+PASS store.indexNames.contains('') is false
+PASS store.indexNames.contains('indexFail') is false
+PASS store.indexNames.contains('indexName') is true
+PASS store.indexNames[0] is "indexName"
+PASS store.indexNames[1] is null
+PASS store.indexNames[100] is null
+PASS store.indexNames.item(1) is null
+PASS store.indexNames.item(100) is null
+transaction = db.transaction()
+store = transaction.objectStore('storeName')
+store.add({x: 'value'}, 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -113,7 +134,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.UNKNOWN_ERR
+PASS event.code is webkitIDBDatabaseException.UNKNOWN_ERR
db.transaction()
store = transaction.objectStore('storeName')
store.get('key')
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html
index b2d383a..9730db8 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics.html
+++ b/LayoutTests/storage/indexeddb/objectstore-basics.html
@@ -16,7 +16,7 @@ if (window.layoutTestController)
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
@@ -26,21 +26,29 @@ function openSuccess()
{
debug("openSuccess():");
verifySuccessEvent(event);
- db = evalAndLog("db = event.result");
+ window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
-function createSuccess()
+function setVersionSuccess()
{
- debug("createSuccess():");
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- var store = evalAndLog("store = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ debug("creatObjectStore():");
+ window.store = evalAndLog("store = db.createObjectStore('storeName', null)");
var storeNames = evalAndLog("storeNames = db.objectStores");
shouldBeEqualToString("store.name", "storeName");
@@ -49,42 +57,92 @@ function createSuccess()
shouldBe("storeNames.length", "1");
// FIXME: test all of object store's methods.
- debug("Ask for a store that doesn't exist:");
+ debug("Ask for an index that doesn't exist:");
try {
- index = evalAndLog("index = store.index('asdf')");
- shouldBeNull("index"); // Returning null is wrong, but less wrong than returning an actual object!
+ debug("index = store.index('asdf')");
+ index = store.index('asdf');
testFailed("Asking for a store that doesn't exist should have thrown.");
} catch (err) {
- testPassed("Error thrown.");
+ testPassed("Exception thrown.");
// FIXME: Verify the correct exception thrown.
}
- result = evalAndLog("event.result.createIndex('indexName', 'x', true)"); // true == unique requirement.
- verifyResult(result);
- result.onsuccess = addIndexSuccess;
- result.onerror = unexpectedErrorCallback;
+ createIndex();
}
-function addIndexSuccess()
+function createIndex()
{
- debug("addIndexSuccess():");
- verifySuccessEvent(event);
- shouldBeTrue("event.result !== null");
- shouldBeTrue("event.source.indexNames.contains('indexName')");
- index = evalAndLog("index = event.source.index('indexName')");
+ debug("createIndex():");
+ var index = evalAndLog("index = store.createIndex('indexName', 'x', true)"); // true == unique requirement.
shouldBeTrue("index !== null");
-
- debug("Ask for a store that doesn't exist:");
+ shouldBeTrue("store.indexNames.contains('indexName')");
+ index = evalAndLog("index = store.index('indexName')");
+ shouldBeTrue("index !== null");
+
+ debug("Ask for an index that doesn't exist:");
try {
- index = evalAndLog("index = store.index('asdf')");
- shouldBeNull("index"); // Returning null is wrong, but less wrong than returning an actual object!
+ debug("index = store.index('asdf')");
+ index = store.index('asdf');
testFailed("Asking for a store that doesn't exist should have thrown.");
} catch (err) {
- testPassed("Error thrown.");
+ testPassed("Exception thrown.");
// FIXME: Verify the correct exception thrown.
}
- result = evalAndLog("event.source.add({x: 'value'}, 'key')");
+ commitAndContinue();
+}
+
+function commitAndContinue()
+{
+ window.setTimeout(testSetVersionAbort, 0);
+}
+
+function testSetVersionAbort()
+{
+ result = evalAndLog('db.setVersion("version fail")');
+ verifyResult(result);
+ result.onsuccess = createAnotherIndex;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function createAnotherIndex()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "version fail");
+
+ var setVersionTrans = evalAndLog("setVersionTrans = event.result");
+ shouldBeTrue("setVersionTrans !== null");
+ setVersionTrans.oncomplete = unexpectedCompleteCallback;
+ setVersionTrans.onabort = checkMetadata;
+ window.store = evalAndLog("store = setVersionTrans.objectStore('storeName')");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x')");
+
+ setVersionTrans.abort();
+}
+
+function checkMetadata()
+{
+ shouldBeEqualToString("db.version", "new version");
+ shouldBe("store.indexNames", "['indexName']");
+ shouldBe("store.indexNames.length", "1");
+ shouldBe("store.indexNames.contains('')", "false");
+ shouldBe("store.indexNames.contains('indexFail')", "false");
+ shouldBe("store.indexNames.contains('indexName')", "true");
+ shouldBeEqualToString("store.indexNames[0]", "indexName");
+ shouldBeNull("store.indexNames[1]");
+ shouldBeNull("store.indexNames[100]");
+ shouldBeNull("store.indexNames.item(1)");
+ shouldBeNull("store.indexNames.item(100)");
+ addData();
+}
+
+
+function addData()
+{
+ var transaction = evalAndLog("transaction = db.transaction()");
+ transaction.onabort = unexpectedAbortCallback;
+ window.store = evalAndLog("store = transaction.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value'}, 'key')");
verifyResult(result);
result.onsuccess = addSuccess;
result.onerror = unexpectedErrorCallback;
@@ -107,7 +165,7 @@ function addAgainFailure()
debug("addAgainFailure():");
verifyErrorEvent(event);
// FIXME: This error code needs to be specced.
- shouldBe("event.code", "IDBDatabaseException.UNKNOWN_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.UNKNOWN_ERR");
transaction = evalAndLog("db.transaction()");
transaction.onabort = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
index e7211f6..881fe92 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
@@ -3,7 +3,7 @@ Test IndexedDB's objectStore.openCursor + the cursor it produces in depth.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('someDB', 'some description')
+webkitIndexedDB.open('someDB', 'some description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('someObjectStore')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,18 +38,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('someObjectStore')
objectStore.add('', testData[nextToAdd])
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor.html b/LayoutTests/storage/indexeddb/objectstore-cursor.html
index 25e9456..d9ad805 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor.html
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor.html
@@ -28,38 +28,44 @@ window.testData = [
function openDatabase()
{
- result = evalAndLog("indexedDB.open('someDB', 'some description')");
+ result = evalAndLog("webkitIndexedDB.open('someDB', 'some description')");
verifyResult(result);
- result.onsuccess = openObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function openObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('someObjectStore')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = startAddingData;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-
-function startAddingData()
+
+function deleteExisting()
{
verifySuccessEvent(event);
- window.objectStore = evalAndLog("objectStore = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ deleteAllObjectStores(db, startAddingData);
+}
+
+function startAddingData()
+{
+ window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
window.nextToAdd = 0;
addData();
}
function addData()
{
- // We cheat when called for the first time; we're in the context of the objectStore success event.
- verifySuccessEvent(event);
+ if (window.nextToAdd > 0)
+ verifySuccessEvent(event);
result = evalAndLog("objectStore.add('', testData[nextToAdd])");
verifyResult(result);
@@ -93,7 +99,7 @@ function scheduleTests()
}
debug("Running tests...");
- setTimeout(runNextTest, 0);
+ runNextTest();
}
function runNextTest()
@@ -152,13 +158,13 @@ function runNextTest()
var keyRange;
if (lower !== null && upper !== null)
- keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+ keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
else if (lower !== null)
- keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+ keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
else
- keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen);
+ keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
- // FIXME: Should be IDBCursor.NEXT : IDBCursor.PREV, but we can't do that yet.
+ // FIXME: Should be webkitIDBCursor.NEXT : webkitIDBCursor.PREV, but we can't do that yet.
var request = objectStore.openCursor(keyRange, ascending ? 0 : 2);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
@@ -182,12 +188,12 @@ function cursorIteration()
{
if (expectedIndex === null) {
shouldBeNull("event.result");
- setTimeout(runNextTest, 0);
+ runNextTest();
return;
}
if (event.result === null) {
- testFailed("Event.result should not be null.")
- setTimeout(runNextTest, 0);
+ testFailed("Event.result should not be null.");
+ runNextTest();
return;
}
diff --git a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
index b7ba473..b6b20a2 100644
--- a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
@@ -1,9 +1,9 @@
-Test IndexedDB's IDBObjectStore.removeObjectStore().
+Test IndexedDB's webkitIDBObjectStore.removeObjectStore().
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,7 +38,13 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-event.result.add('value', 'key')
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+store = db.createObjectStore('storeName', null)
+store.createIndex('indexName', '')
+PASS store.indexNames.contains('indexName') is true
+store.add('value', 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -75,7 +81,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is "value"
-event.source.createIndex('indexName', '')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -92,41 +98,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.source.indexNames.contains('indexName') is true
+trans = event.result
+PASS trans !== null is true
db.removeObjectStore('storeName')
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
db.createObjectStore('storeName', null)
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
db.transaction()
store = transaction.objectStore('storeName')
store.get('key')
diff --git a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
index 7878c7f..c4418bc 100644
--- a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
+++ b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
@@ -10,36 +10,46 @@
<div id="console"></div>
<script>
-description("Test IndexedDB's IDBObjectStore.removeObjectStore().");
+description("Test IndexedDB's webkitIDBObjectStore.removeObjectStore().");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
- result.onsuccess = createObjectStore;
+ result.onsuccess = startSetVersion;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStore()
+function startSetVersion()
{
verifySuccessEvent(event);
db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = addValue;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function addValue()
+function deleteExisting()
{
verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+
+ deleteAllObjectStores(db, createObjectStoreAndAddValue);
+}
+
+function createObjectStoreAndAddValue()
+{
+ store = evalAndLog("store = db.createObjectStore('storeName', null)");
- result = evalAndLog("event.result.add('value', 'key')");
+ window.index = evalAndLog("store.createIndex('indexName', '')");
+ shouldBeTrue("store.indexNames.contains('indexName')");
+
+ result = evalAndLog("store.add('value', 'key')");
verifyResult(result);
result.onsuccess = getValue;
result.onerror = unexpectedErrorCallback;
@@ -64,42 +74,31 @@ function addIndex()
verifySuccessEvent(event);
shouldBeEqualToString("event.result", "value");
- result = evalAndLog("event.source.createIndex('indexName', '')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = commitTransaction;
+ result.onsuccess = removeObjectStore;
result.onerror = unexpectedErrorCallback;
}
-function commitTransaction()
+function removeObjectStore()
{
verifySuccessEvent(event);
- shouldBeTrue("event.source.indexNames.contains('indexName')");
- // Let the transaction commit.
- window.setTimeout('removeObjectStore()', 0);
-}
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
-function removeObjectStore()
-{
- result = evalAndLog("db.removeObjectStore('storeName')");
- verifyResult(result);
- result.onsuccess = createObjectStoreAgain;
- result.onerror = unexpectedErrorCallback;
+ evalAndLog("db.removeObjectStore('storeName')");
+ createObjectStoreAgain();
}
function createObjectStoreAgain()
{
- verifySuccessEvent(event);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
- verifyResult(result);
- result.onsuccess = getValueAgain;
- result.onerror = unexpectedErrorCallback;
+ evalAndLog("db.createObjectStore('storeName', null)");
+ getValueAgain();
}
function getValueAgain()
{
- verifySuccessEvent(event);
-
transaction = evalAndLog("db.transaction()");
transaction.onabort = unexpectedErrorCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
diff --git a/LayoutTests/storage/indexeddb/open-cursor-expected.txt b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
index bda103f..1bca527 100644
--- a/LayoutTests/storage/indexeddb/open-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
@@ -3,7 +3,7 @@ Test IndexedDB's openCursor.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,12 +21,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('test')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -38,7 +39,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+objectStore = db.createObjectStore('test')
objectStore.add('myValue', 'myKey')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -46,7 +50,7 @@ PASS 'readyState' in result is true
An event should fire shortly...
Opening cursor
-objectStore.openCursor(keyRange)
+event.source.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/open-cursor.html b/LayoutTests/storage/indexeddb/open-cursor.html
index 03d1da0..ec62f2c 100644
--- a/LayoutTests/storage/indexeddb/open-cursor.html
+++ b/LayoutTests/storage/indexeddb/open-cursor.html
@@ -25,7 +25,7 @@ function emptyCursorSuccess()
function openEmptyCursor()
{
debug("Opening an empty cursor.");
- keyRange = IDBKeyRange.leftBound("InexistentKey");
+ keyRange = webkitIDBKeyRange.leftBound("InexistentKey");
result = evalAndLog("objectStore.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = emptyCursorSuccess;
@@ -47,26 +47,31 @@ function cursorSuccess()
function openCursor()
{
debug("Opening cursor");
- keyRange = IDBKeyRange.leftBound("myKey");
- result = evalAndLog("objectStore.openCursor(keyRange)");
+ keyRange = webkitIDBKeyRange.leftBound("myKey");
+ result = evalAndLog("event.source.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorSuccess;
result.onerror = unexpectedErrorCallback;
-}
-
-function populateObjectStore(objectStore)
-{
+}
+
+function createAndPopulateObjectStore()
+{
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
result = evalAndLog("objectStore.add('myValue', 'myKey')");
verifyResult(result);
result.onsuccess = openCursor;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStoreSuccess()
+function setVersionSuccess()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- var objectStore = evalAndLog("objectStore = event.result");
- populateObjectStore(objectStore);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
}
function openSuccess()
@@ -74,17 +79,15 @@ function openSuccess()
verifySuccessEvent(event);
var db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('test')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createObjectStoreSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/queued-commands-expected.txt b/LayoutTests/storage/indexeddb/queued-commands-expected.txt
new file mode 100644
index 0000000..e2e20af
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/queued-commands-expected.txt
@@ -0,0 +1,104 @@
+Verify that queuing up several commands works (and they all fire).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name', 'description')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
+store.createIndex('indexName', 'x')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+store.add({x: 'value2', y: 'zzz2'}, 'key2')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+store.put({x: 'valu2', y: 'zz2'}, 'ky2')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 0 is 0
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 1 is 1
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 2 is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/queued-commands.html b/LayoutTests/storage/indexeddb/queued-commands.html
new file mode 100644
index 0000000..7dc94c3
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/queued-commands.html
@@ -0,0 +1,87 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Verify that queuing up several commands works (and they all fire).");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createIndex);
+}
+
+function createIndex()
+{
+ window.store = evalAndLog("db.createObjectStore('storeName', null)");
+ window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
+
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(0); };
+ result.onerror = unexpectedErrorCallback;
+
+ result = evalAndLog("store.add({x: 'value2', y: 'zzz2'}, 'key2')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(1); };
+ result.onerror = unexpectedErrorCallback;
+
+ result = evalAndLog("store.put({x: 'valu2', y: 'zz2'}, 'ky2')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(2); };
+ result.onerror = unexpectedErrorCallback;
+
+ window.addCount = 0;
+}
+
+function verifyAdd(expected)
+{
+ verifySuccessEvent(event);
+ shouldBe("" + addCount++, "" + expected);
+
+ if (addCount == 3)
+ done();
+ if (addCount > 3)
+ testFailed("Unexpected call to verifyAdd!");
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/resources/shared.js b/LayoutTests/storage/indexeddb/resources/shared.js
index 65da3bf..01ec606 100644
--- a/LayoutTests/storage/indexeddb/resources/shared.js
+++ b/LayoutTests/storage/indexeddb/resources/shared.js
@@ -40,6 +40,12 @@ function verifyAbortEvent(event)
shouldBeEqualToString("event.type", "abort");
}
+function verifyCompleteEvent(event)
+{
+ debug("Complete event fired:");
+ shouldBeEqualToString("event.type", "complete");
+}
+
function verifyResult(result)
{
shouldBeTrue("'onsuccess' in result");
@@ -65,9 +71,28 @@ function unexpectedErrorCallback()
done();
}
-function deleteAllObjectStores(db)
+function unexpectedAbortCallback()
+{
+ testFailed("Abort function called unexpectedly!");
+ debug("");
+ verifyAbortEvent(event);
+ done();
+}
+
+function unexpectedCompleteCallback()
{
- objectStores = db.objectStores;
- for (var i = 0; i < objectStores.length; ++i)
- db.removeObjectStore(objectStores[i]);
+ testFailed("oncomplete function called unexpectedly!");
+ debug("");
+ verifyCompleteEvent(event);
+ done();
+}
+
+// FIXME: remove the onfinished parameter.
+function deleteAllObjectStores(db, onfinished)
+{
+ while (db.objectStores.length)
+ db.removeObjectStore(db.objectStores.item(0));
+
+ debug("Deleted all object stores.");
+ onfinished();
}
diff --git a/LayoutTests/storage/indexeddb/transaction-basics-expected.txt b/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
index bba62f0..b493946 100644
--- a/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
@@ -3,15 +3,15 @@ Test IndexedDB transaction basics.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'indexedDB' in window is true
-PASS indexedDB == null is false
-indexedDB.open('name', 'description')
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-createObjectStoreCallback():
+openSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -24,12 +24,32 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+result = db.setVersion('version 1')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+Deleted all object stores.
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+addRemoveIDBObjects():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -41,11 +61,125 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+db.removeObjectStore('storeFail')
+store.removeIndex('indexFail')
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+addRemoveAddIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+db.removeObjectStore('storeFail')
+store.removeIndex('indexFail')
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+addIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+PASS db.objectStores is ['storeFail']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('storeFail') is true
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+removeIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = trans.objectStore('storeFail')
+store.removeIndex('indexFail')
+db.removeObjectStore('storeFail')
+PASS db.objectStores is ['storeFail']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('storeFail') is true
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
db.transaction()
store = transaction.objectStore('storeName')
PASS store.name is "storeName"
Abort event fired:
PASS event.type is "abort"
+Complete event fired:
+PASS event.type is "complete"
+PASS oncomplete event had fired
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/transaction-basics.html b/LayoutTests/storage/indexeddb/transaction-basics.html
index cea5d5d..07fc685 100644
--- a/LayoutTests/storage/indexeddb/transaction-basics.html
+++ b/LayoutTests/storage/indexeddb/transaction-basics.html
@@ -16,48 +16,239 @@ if (window.layoutTestController)
function test()
{
- shouldBeTrue("'indexedDB' in window");
- shouldBeFalse("indexedDB == null");
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ debug("openSuccess():");
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+ result = evalAndLog("result = db.setVersion('version 1')");
+ result.onsuccess = cleanDatabase;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function cleanDatabase()
+{
+ verifySuccessEvent(event);
+ deleteAllObjectStores(db, checkMetadataEmpty);
+ commitAndContinue(testSetVersionAbort1);
+}
+
+function testSetVersionAbort1()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addRemoveIDBObjects;
+}
+
+function addRemoveIDBObjects()
+{
+ debug("addRemoveIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort2;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ evalAndLog("db.removeObjectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+
+ trans.abort();
+}
+
+function testSetVersionAbort2()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addRemoveAddIDBObjects;
+}
+
+function addRemoveAddIDBObjects()
+{
+ debug("addRemoveAddIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort3;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ evalAndLog("db.removeObjectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ trans.abort();
+}
+
+function testSetVersionAbort3()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addIDBObjects;
+}
+
+function addIDBObjects()
+{
+ debug("addIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort4;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ trans.abort();
+}
+
+function testSetVersionAbort4()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addIDBObjectsAndCommit;
+}
+
+function addIDBObjects()
+{
+ debug("addIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ commitAndContinue(testSetVersionAbort5);
+}
+
+function commitAndContinue(continueFunction)
+{
+ window.setTimeout(continueFunction, 0);
+}
+
+function testSetVersionAbort5()
+{
+ checkMetadataExistingObjectStore();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = removeIDBObjects;
+}
+
+function removeIDBObjects()
+{
+ debug("removeIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort6;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = trans.objectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+ evalAndLog("db.removeObjectStore('storeFail')");
+
+ trans.abort();
+}
+
+function testSetVersionAbort6()
+{
+ checkMetadataExistingObjectStore();
+ setNewVersion();
+}
+
+function startSetVersion(versionName)
+{
+ result = db.setVersion(versionName);
+ verifyResult(result);
+ result.onerror = unexpectedErrorCallback;
+ return result;
+}
+
+function checkMetadataEmpty()
+{
+ shouldBe("window.db.objectStores", "[]");
+ shouldBe("window.db.objectStores.length", "0");
+ shouldBe("window.db.objectStores.contains('storeFail')", "false");
+}
+
+function checkMetadataExistingObjectStore()
+{
+ shouldBe("db.objectStores", "['storeFail']");
+ shouldBe("db.objectStores.length", "1");
+ shouldBe("db.objectStores.contains('storeFail')", "true");
}
-function openSuccess()
+function setNewVersion()
{
- debug("createObjectStoreCallback():");
- verifySuccessEvent(event);
- db = evalAndLog("db = event.result");
-
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
-function createSuccess()
+function setVersionSuccess()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = completeCallback;
+ window.completeEventFired = false;
+
+ deleteAllObjectStores(db, createObjectStoreAndStartTransaction);
+}
+
+function createObjectStoreAndStartTransaction()
+{
+ evalAndLog("db.createObjectStore('storeName', null)");
transaction = evalAndLog("db.transaction()");
transaction.onabort = abortCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
shouldBeEqualToString("store.name", "storeName");
}
+function completeCallback()
+{
+ verifyCompleteEvent(event);
+ window.completeEventFired = true;
+}
+
function abortCallback()
{
verifyAbortEvent(event);
- done();
+ checkForCompleteEvent();
}
-test();
+function checkForCompleteEvent()
+{
+ if (completeEventFired) {
+ testPassed("oncomplete event had fired");
+ done();
+ } else
+ setTimeout(checkForCompleteEvent, 1);
+}
var successfullyParsed = true;
+test();
+
</script>
</body>
</html>