dom/indexedDB/test/error_events_abort_transactions_iframe.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!--
     2   Any copyright is dedicated to the Public Domain.
     3   http://creativecommons.org/publicdomain/zero/1.0/
     4 -->
     5 <html>
     6 <head>
     7   <title>Indexed Database Property Test</title>
     9   <script type="text/javascript;version=1.7">
    11     let testGenerator = testSteps();
    13     function ok(val, message) {
    14       val = val ? "true" : "false";
    15       window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
    16                                 "');", "*");
    17     }
    19     function is(a, b, message) {
    20       ok(a == b, message);
    21     }
    23     function grabEventAndContinueHandler(event) {
    24       testGenerator.send(event);
    25     }
    27     function errorHandler(event) {
    28       ok(false, "indexedDB error, code " + event.target.errorCcode);
    29       finishTest();
    30     }
    32     function unexpectedSuccessHandler(event) {
    33       ok(false, "got success when it was not expected!");
    34       finishTest();
    35     }
    37     function finishTest() {
    38       // Let window.onerror have a chance to fire
    39       setTimeout(function() {
    40         setTimeout(function() {
    41           testGenerator.close();
    42           window.parent.postMessage("SimpleTest.finish();", "*");
    43         }, 0);
    44       }, 0);
    45     }
    47     window.onerror = function(message, filename, lineno) {
    48       is(message, "ConstraintError", "Expect a constraint error");
    49     };
    51     function testSteps() {
    52       let request = indexedDB.open(window.location.pathname, 1);
    53       request.onsuccess = unexpectedSuccessHandler;
    54       request.onerror = grabEventAndContinueHandler;
    55       request.onupgradeneeded = grabEventAndContinueHandler;
    56       let event = yield undefined;
    58       let db = event.target.result;
    60       is(db.version, 1, "Correct version");
    61       is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
    63       let trans = event.target.transaction;
    65       trans.oncomplete = unexpectedSuccessHandler;
    66       trans.onabort = grabEventAndContinueHandler;
    68       let objectStore = db.createObjectStore("foo");
    70       is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
    71       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
    73       let originalRequest = request;
    74       request = objectStore.add({}, 1);
    75       request.onsuccess = grabEventAndContinueHandler;
    76       request.onerror = errorHandler;
    77       event = yield undefined;
    79       request = objectStore.add({}, 1);
    80       request.onsuccess = unexpectedSuccessHandler;
    81       request.onerror = function(event) {
    82         // Don't do anything! We want this error.
    83       }
    84       event = yield undefined;
    86       is(event.type, "abort", "Got a transaction abort event");
    87       is(db.version, 0, "Correct version");
    88       is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
    89       is(trans.error.name, "ConstraintError", "Right error");
    90       ok(trans.error === request.error, "Object identity holds");
    91       is(originalRequest.transaction, trans, "request.transaction should still be set");
    93       event = yield undefined;
    94       is(event.type, "error", "Got request error event");
    95       is(event.target, originalRequest, "error event has right target");
    96       is(event.target.error.name, "ConstraintError", "Right error");
    97       is(originalRequest.transaction, null, "request.transaction should now be null");
    99       let request = indexedDB.open(window.location.pathname, 1);
   100       request.onerror = errorHandler;
   101       request.onupgradeneeded = grabEventAndContinueHandler;
   102       let event = yield undefined;
   104       let db = event.target.result;
   106       event.target.transaction.oncomplete = grabEventAndContinueHandler;
   107       event.target.transaction.onabort = unexpectedSuccessHandler;
   109       is(db.version, "1", "Correct version");
   110       is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
   112       let objectStore = db.createObjectStore("foo");
   114       is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
   115       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   117       objectStore.createIndex("baz", "key.path");
   118       objectStore.createIndex("dontDeleteMe", "");
   120       is(objectStore.indexNames.length, 2, "Correct indexNames length");
   121       ok(objectStore.indexNames.contains("baz"), "Has correct index");
   122       ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
   124       let objectStoreForDeletion = db.createObjectStore("bar");
   126       is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
   127       ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
   129       objectStoreForDeletion.createIndex("foo", "key.path");
   131       is(objectStoreForDeletion.indexNames.length, 1, "Correct indexNames length");
   132       ok(objectStoreForDeletion.indexNames.contains("foo"), "Has correct index");
   134       request = objectStore.add({}, 1);
   135       request.onsuccess = grabEventAndContinueHandler;
   136       request.onerror = errorHandler;
   137       event = yield undefined;
   139       request = objectStore.add({}, 1);
   140       request.onsuccess = unexpectedSuccessHandler;
   141       request.onerror = function(event) {
   142         // Expected, but prevent the abort.
   143         event.preventDefault();
   144       }
   145       event = yield undefined;
   147       is(event.type, "complete", "Got a transaction complete event");
   149       is(db.version, "1", "Correct version");
   150       is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
   151       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   152       ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
   154       db.close();
   156       let request = indexedDB.open(window.location.pathname, 2);
   157       request.onerror = errorHandler;
   158       request.onupgradeneeded = grabEventAndContinueHandler;
   159       let event = yield undefined;
   161       let db = event.target.result;
   163       let trans = event.target.transaction;
   164       trans.oncomplete = unexpectedSuccessHandler;
   166       is(db.version, "2", "Correct version");
   167       is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
   168       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   169       ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
   171       let createdObjectStore = db.createObjectStore("newlyCreated");
   172       let objectStore = trans.objectStore("foo");
   173       let deletedObjectStore = trans.objectStore("bar");
   174       deletedObjectStore.deleteIndex("foo");
   175       db.deleteObjectStore("bar");
   177       createdObjectStore.createIndex("newIndex", "key.path");
   178       objectStore.createIndex("newIndex", "key.path");
   179       objectStore.deleteIndex("baz");
   181       is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
   182       ok(db.objectStoreNames.contains("newlyCreated"), "Has correct objectStore");
   183       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   185       is(createdObjectStore.indexNames.length, 1, "Correct indexNames length");
   186       ok(createdObjectStore.indexNames.contains("newIndex"), "Has correct index");
   188       is(objectStore.indexNames.length, 2, "Correct indexNames length");
   189       ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
   190       ok(objectStore.indexNames.contains("newIndex"), "Has correct index");
   192       objectStore.add({}, 1);
   193       trans.onabort = grabEventAndContinueHandler;
   195       event = yield undefined;
   197       // Test that the world has been restored.
   198       is(db.version, "1", "Correct version");
   199       is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
   200       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   201       ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
   203       is(objectStore.indexNames.length, 2, "Correct indexNames length");
   204       ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
   205       ok(objectStore.indexNames.contains("baz"), "Has correct index");
   207       is(createdObjectStore.indexNames.length, 0, "Correct indexNames length");
   209       is(deletedObjectStore.indexNames.length, 1, "Correct indexNames length");
   210       ok(deletedObjectStore.indexNames.contains("foo"), "Has correct index");
   212       request.onerror = grabEventAndContinueHandler;
   214       event = yield undefined;
   216       finishTest();
   217       yield undefined;
   218     }
   219   </script>
   221 </head>
   223 <body onload="testGenerator.next();"></body>
   225 </html>

mercurial