blob: 38c1b8fbb4195d6f21256f97f142c0f8e50d8190 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/gc.js"></script>
<script src="../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
<script>
description("Regression test to ensure that IndexedDB connections don't leak");
setDBNameFromPath();
waitForRequests([
indexedDB.deleteDatabase(dbname)
], doFirstOpen);
function doFirstOpen()
{
preamble();
evalAndLog("request = indexedDB.open(dbname, 1)");
evalAndLog("sawUpgradeNeeded1 = false");
request.onerror = unexpectedErrorCallback;
request.onblocked = unexpectedBlockedCallback;
request.onupgradeneeded = function onUpgradeNeeded1() {
preamble();
evalAndLog("sawUpgradeNeeded1 = true");
};
request.onsuccess = function onOpenSuccess1() {
preamble();
shouldBeTrue("sawUpgradeNeeded1");
evalAndLog("db = request.result");
evalAndLog("db.close()");
doSecondOpen();
};
}
function doSecondOpen()
{
preamble();
evalAndLog("request = indexedDB.open(dbname, 1)");
request.onerror = unexpectedErrorCallback;
request.onblocked = unexpectedBlockedCallback;
request.onupgradeneeded = unexpectedUpgradeNeededCallback;
request.onsuccess = function onOpenSuccess2() {
preamble();
evalAndLog("db = request.result");
evalAndLog("db = null");
evalAndLog("request = null");
debug("Run GC outside of request's callback via setTimeout()");
asyncGC(function () {
doThirdOpen();
});
};
}
function doThirdOpen()
{
preamble();
evalAndLog("request = indexedDB.open(dbname, 2)");
evalAndLog("sawUpgradeNeeded3 = false");
request.onerror = unexpectedErrorCallback;
request.onblocked = unexpectedBlockedCallback;
request.onupgradeneeded = function onUpgradeNeeded2() {
preamble();
evalAndLog("sawUpgradeNeeded3 = true");
};
request.onsuccess = function onOpenSuccess3() {
preamble();
shouldBeTrue("sawUpgradeNeeded3");
evalAndLog("db = request.result");
evalAndLog("db.close()");
finishJSTest();
};
}
</script>