1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/error_events_abort_transactions_iframe.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,225 @@ 1.4 +<!-- 1.5 + Any copyright is dedicated to the Public Domain. 1.6 + http://creativecommons.org/publicdomain/zero/1.0/ 1.7 +--> 1.8 +<html> 1.9 +<head> 1.10 + <title>Indexed Database Property Test</title> 1.11 + 1.12 + <script type="text/javascript;version=1.7"> 1.13 + 1.14 + let testGenerator = testSteps(); 1.15 + 1.16 + function ok(val, message) { 1.17 + val = val ? "true" : "false"; 1.18 + window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message + 1.19 + "');", "*"); 1.20 + } 1.21 + 1.22 + function is(a, b, message) { 1.23 + ok(a == b, message); 1.24 + } 1.25 + 1.26 + function grabEventAndContinueHandler(event) { 1.27 + testGenerator.send(event); 1.28 + } 1.29 + 1.30 + function errorHandler(event) { 1.31 + ok(false, "indexedDB error, code " + event.target.errorCcode); 1.32 + finishTest(); 1.33 + } 1.34 + 1.35 + function unexpectedSuccessHandler(event) { 1.36 + ok(false, "got success when it was not expected!"); 1.37 + finishTest(); 1.38 + } 1.39 + 1.40 + function finishTest() { 1.41 + // Let window.onerror have a chance to fire 1.42 + setTimeout(function() { 1.43 + setTimeout(function() { 1.44 + testGenerator.close(); 1.45 + window.parent.postMessage("SimpleTest.finish();", "*"); 1.46 + }, 0); 1.47 + }, 0); 1.48 + } 1.49 + 1.50 + window.onerror = function(message, filename, lineno) { 1.51 + is(message, "ConstraintError", "Expect a constraint error"); 1.52 + }; 1.53 + 1.54 + function testSteps() { 1.55 + let request = indexedDB.open(window.location.pathname, 1); 1.56 + request.onsuccess = unexpectedSuccessHandler; 1.57 + request.onerror = grabEventAndContinueHandler; 1.58 + request.onupgradeneeded = grabEventAndContinueHandler; 1.59 + let event = yield undefined; 1.60 + 1.61 + let db = event.target.result; 1.62 + 1.63 + is(db.version, 1, "Correct version"); 1.64 + is(db.objectStoreNames.length, 0, "Correct objectStoreNames length"); 1.65 + 1.66 + let trans = event.target.transaction; 1.67 + 1.68 + trans.oncomplete = unexpectedSuccessHandler; 1.69 + trans.onabort = grabEventAndContinueHandler; 1.70 + 1.71 + let objectStore = db.createObjectStore("foo"); 1.72 + 1.73 + is(db.objectStoreNames.length, 1, "Correct objectStoreNames length"); 1.74 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.75 + 1.76 + let originalRequest = request; 1.77 + request = objectStore.add({}, 1); 1.78 + request.onsuccess = grabEventAndContinueHandler; 1.79 + request.onerror = errorHandler; 1.80 + event = yield undefined; 1.81 + 1.82 + request = objectStore.add({}, 1); 1.83 + request.onsuccess = unexpectedSuccessHandler; 1.84 + request.onerror = function(event) { 1.85 + // Don't do anything! We want this error. 1.86 + } 1.87 + event = yield undefined; 1.88 + 1.89 + is(event.type, "abort", "Got a transaction abort event"); 1.90 + is(db.version, 0, "Correct version"); 1.91 + is(db.objectStoreNames.length, 0, "Correct objectStoreNames length"); 1.92 + is(trans.error.name, "ConstraintError", "Right error"); 1.93 + ok(trans.error === request.error, "Object identity holds"); 1.94 + is(originalRequest.transaction, trans, "request.transaction should still be set"); 1.95 + 1.96 + event = yield undefined; 1.97 + is(event.type, "error", "Got request error event"); 1.98 + is(event.target, originalRequest, "error event has right target"); 1.99 + is(event.target.error.name, "ConstraintError", "Right error"); 1.100 + is(originalRequest.transaction, null, "request.transaction should now be null"); 1.101 + 1.102 + let request = indexedDB.open(window.location.pathname, 1); 1.103 + request.onerror = errorHandler; 1.104 + request.onupgradeneeded = grabEventAndContinueHandler; 1.105 + let event = yield undefined; 1.106 + 1.107 + let db = event.target.result; 1.108 + 1.109 + event.target.transaction.oncomplete = grabEventAndContinueHandler; 1.110 + event.target.transaction.onabort = unexpectedSuccessHandler; 1.111 + 1.112 + is(db.version, "1", "Correct version"); 1.113 + is(db.objectStoreNames.length, 0, "Correct objectStoreNames length"); 1.114 + 1.115 + let objectStore = db.createObjectStore("foo"); 1.116 + 1.117 + is(db.objectStoreNames.length, 1, "Correct objectStoreNames length"); 1.118 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.119 + 1.120 + objectStore.createIndex("baz", "key.path"); 1.121 + objectStore.createIndex("dontDeleteMe", ""); 1.122 + 1.123 + is(objectStore.indexNames.length, 2, "Correct indexNames length"); 1.124 + ok(objectStore.indexNames.contains("baz"), "Has correct index"); 1.125 + ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index"); 1.126 + 1.127 + let objectStoreForDeletion = db.createObjectStore("bar"); 1.128 + 1.129 + is(db.objectStoreNames.length, 2, "Correct objectStoreNames length"); 1.130 + ok(db.objectStoreNames.contains("bar"), "Has correct objectStore"); 1.131 + 1.132 + objectStoreForDeletion.createIndex("foo", "key.path"); 1.133 + 1.134 + is(objectStoreForDeletion.indexNames.length, 1, "Correct indexNames length"); 1.135 + ok(objectStoreForDeletion.indexNames.contains("foo"), "Has correct index"); 1.136 + 1.137 + request = objectStore.add({}, 1); 1.138 + request.onsuccess = grabEventAndContinueHandler; 1.139 + request.onerror = errorHandler; 1.140 + event = yield undefined; 1.141 + 1.142 + request = objectStore.add({}, 1); 1.143 + request.onsuccess = unexpectedSuccessHandler; 1.144 + request.onerror = function(event) { 1.145 + // Expected, but prevent the abort. 1.146 + event.preventDefault(); 1.147 + } 1.148 + event = yield undefined; 1.149 + 1.150 + is(event.type, "complete", "Got a transaction complete event"); 1.151 + 1.152 + is(db.version, "1", "Correct version"); 1.153 + is(db.objectStoreNames.length, 2, "Correct objectStoreNames length"); 1.154 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.155 + ok(db.objectStoreNames.contains("bar"), "Has correct objectStore"); 1.156 + 1.157 + db.close(); 1.158 + 1.159 + let request = indexedDB.open(window.location.pathname, 2); 1.160 + request.onerror = errorHandler; 1.161 + request.onupgradeneeded = grabEventAndContinueHandler; 1.162 + let event = yield undefined; 1.163 + 1.164 + let db = event.target.result; 1.165 + 1.166 + let trans = event.target.transaction; 1.167 + trans.oncomplete = unexpectedSuccessHandler; 1.168 + 1.169 + is(db.version, "2", "Correct version"); 1.170 + is(db.objectStoreNames.length, 2, "Correct objectStoreNames length"); 1.171 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.172 + ok(db.objectStoreNames.contains("bar"), "Has correct objectStore"); 1.173 + 1.174 + let createdObjectStore = db.createObjectStore("newlyCreated"); 1.175 + let objectStore = trans.objectStore("foo"); 1.176 + let deletedObjectStore = trans.objectStore("bar"); 1.177 + deletedObjectStore.deleteIndex("foo"); 1.178 + db.deleteObjectStore("bar"); 1.179 + 1.180 + createdObjectStore.createIndex("newIndex", "key.path"); 1.181 + objectStore.createIndex("newIndex", "key.path"); 1.182 + objectStore.deleteIndex("baz"); 1.183 + 1.184 + is(db.objectStoreNames.length, 2, "Correct objectStoreNames length"); 1.185 + ok(db.objectStoreNames.contains("newlyCreated"), "Has correct objectStore"); 1.186 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.187 + 1.188 + is(createdObjectStore.indexNames.length, 1, "Correct indexNames length"); 1.189 + ok(createdObjectStore.indexNames.contains("newIndex"), "Has correct index"); 1.190 + 1.191 + is(objectStore.indexNames.length, 2, "Correct indexNames length"); 1.192 + ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index"); 1.193 + ok(objectStore.indexNames.contains("newIndex"), "Has correct index"); 1.194 + 1.195 + objectStore.add({}, 1); 1.196 + trans.onabort = grabEventAndContinueHandler; 1.197 + 1.198 + event = yield undefined; 1.199 + 1.200 + // Test that the world has been restored. 1.201 + is(db.version, "1", "Correct version"); 1.202 + is(db.objectStoreNames.length, 2, "Correct objectStoreNames length"); 1.203 + ok(db.objectStoreNames.contains("foo"), "Has correct objectStore"); 1.204 + ok(db.objectStoreNames.contains("bar"), "Has correct objectStore"); 1.205 + 1.206 + is(objectStore.indexNames.length, 2, "Correct indexNames length"); 1.207 + ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index"); 1.208 + ok(objectStore.indexNames.contains("baz"), "Has correct index"); 1.209 + 1.210 + is(createdObjectStore.indexNames.length, 0, "Correct indexNames length"); 1.211 + 1.212 + is(deletedObjectStore.indexNames.length, 1, "Correct indexNames length"); 1.213 + ok(deletedObjectStore.indexNames.contains("foo"), "Has correct index"); 1.214 + 1.215 + request.onerror = grabEventAndContinueHandler; 1.216 + 1.217 + event = yield undefined; 1.218 + 1.219 + finishTest(); 1.220 + yield undefined; 1.221 + } 1.222 + </script> 1.223 + 1.224 +</head> 1.225 + 1.226 +<body onload="testGenerator.next();"></body> 1.227 + 1.228 +</html>