mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-28 11:27:32 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
91
dom/indexedDB/test/unit/test_transaction_abort_hang.js
Normal file
91
dom/indexedDB/test/unit/test_transaction_abort_hang.js
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/**
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
var self = this;
|
||||
|
||||
var testGenerator = testSteps();
|
||||
|
||||
function testSteps()
|
||||
{
|
||||
const dbName = self.window ?
|
||||
window.location.pathname :
|
||||
"test_transaction_abort_hang";
|
||||
const objStoreName = "foo";
|
||||
const transactionCount = 30;
|
||||
|
||||
let completedTransactionCount = 0;
|
||||
let caughtError = false;
|
||||
|
||||
let abortedTransactionIndex = Math.floor(transactionCount / 2);
|
||||
if (abortedTransactionIndex % 2 == 0) {
|
||||
abortedTransactionIndex++;
|
||||
}
|
||||
|
||||
let request = indexedDB.open(dbName, 1);
|
||||
request.onerror = errorHandler;
|
||||
request.onupgradeneeded = grabEventAndContinueHandler;
|
||||
let event = yield undefined;
|
||||
|
||||
request.result.createObjectStore(objStoreName, { autoIncrement: true });
|
||||
|
||||
request.onupgradeneeded = null;
|
||||
request.onsuccess = grabEventAndContinueHandler;
|
||||
event = yield undefined;
|
||||
|
||||
let db = event.target.result;
|
||||
|
||||
for (let i = 0; i < transactionCount; i++) {
|
||||
const readonly = i % 2 == 0;
|
||||
const mode = readonly ? "readonly" : "readwrite";
|
||||
|
||||
let transaction = db.transaction(objStoreName, mode);
|
||||
|
||||
if (i == transactionCount - 1) {
|
||||
// Last one, finish the test.
|
||||
transaction.oncomplete = grabEventAndContinueHandler;
|
||||
} else if (i == abortedTransactionIndex - 1) {
|
||||
transaction.oncomplete = function(event) {
|
||||
ok(true, "Completed transaction " + ++completedTransactionCount +
|
||||
" (We may hang after this!)");
|
||||
};
|
||||
} else if (i == abortedTransactionIndex) {
|
||||
// Special transaction that we abort outside the normal event flow.
|
||||
transaction.onerror = function(event) {
|
||||
ok(true, "Aborted transaction " + ++completedTransactionCount +
|
||||
" (We didn't hang!)");
|
||||
is(event.target.error.name, "AbortError",
|
||||
"AbortError set as the error on the request");
|
||||
is(event.target.transaction.error, null,
|
||||
"No error set on the transaction");
|
||||
ok(!caughtError, "Haven't seen the error event yet");
|
||||
caughtError = true;
|
||||
event.preventDefault();
|
||||
};
|
||||
// This has to happen after the we return to the event loop but before the
|
||||
// transaction starts running.
|
||||
executeSoon(function() { transaction.abort(); });
|
||||
} else {
|
||||
transaction.oncomplete = function(event) {
|
||||
ok(true, "Completed transaction " + ++completedTransactionCount);
|
||||
};
|
||||
}
|
||||
|
||||
if (readonly) {
|
||||
transaction.objectStore(objStoreName).get(0);
|
||||
} else {
|
||||
try { transaction.objectStore(objStoreName).add({}); } catch(e) { }
|
||||
}
|
||||
}
|
||||
ok(true, "Created all transactions");
|
||||
|
||||
event = yield undefined;
|
||||
|
||||
ok(true, "Completed transaction " + ++completedTransactionCount);
|
||||
ok(caughtError, "Caught the error event when we aborted the transaction");
|
||||
|
||||
finishTest();
|
||||
yield undefined;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue