3 <script src="../../fast/js/resources/js-test-pre.js"></script>
\r
4 <script src="resources/shared.js"></script>
\r
7 <p id="description"></p>
\r
8 <div id="console"></div>
\r
14 var body = document.getElementsByTagName("body")[0];
\r
16 description("Test that pending transactions are not aborted during recursive JS calls until all JS is finished.");
\r
17 if (window.layoutTestController)
\r
18 layoutTestController.waitUntilDone();
\r
21 shouldBeTrue("'webkitIndexedDB' in window");
\r
22 shouldBeFalse("webkitIndexedDB == null");
\r
24 request = evalAndLog("webkitIndexedDB.open('transaction-abort-with-js-recursion')");
\r
25 request.onsuccess = setVersion;
\r
26 request.onerror = unexpectedErrorCallback;
\r
29 function setVersion() {
\r
30 db = evalAndLog("db = event.target.result");
\r
31 request = evalAndLog("db.setVersion('new version')");
\r
32 request.onsuccess = click;
\r
33 request.onerror = unexpectedErrorCallback;
\r
37 store = db.createObjectStore('objectStore', null);
\r
38 body.onclick = test;
\r
39 var pendingTransaction = evalAndLog("pendingTransaction = db.transaction(['objectStore'], webkitIDBTransaction.READ_WRITE)");
\r
40 pendingTransaction.onsuccess = unexpectedErrorCallback;
\r
41 pendingTransaction.onerror = unexpectedErrorCallback;
\r
42 pendingTransaction.onabort = abortCallback;
\r
43 var event = document.createEvent("MouseEvent");
\r
44 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
\r
45 body.dispatchEvent(event);
\r
46 var store = evalAndLog("store = pendingTransaction.objectStore('objectStore')");
\r
47 shouldBeTrue("store !== undefined");
\r
48 body.onclick = undefined;
\r
53 debug("Start re-entrant JS");
\r
54 transaction = evalAndLog("transaction = db.transaction(['objectStore'], webkitIDBTransaction.READ_WRITE)");
\r
55 debug("End re-entrant JS");
\r
59 function abortCallback()
\r
61 debug("Pending transaction aborted");
\r