91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
if (this.importScripts) {
|
|
importScripts('../../../resources/js-test.js');
|
|
importScripts('shared.js');
|
|
}
|
|
|
|
description("Ensure IDBDatabase wrapper isn't prematurely collected.");
|
|
|
|
test();
|
|
|
|
function test()
|
|
{
|
|
setDBNameFromPath();
|
|
var deleteRequest = evalAndLog("indexedDB.deleteDatabase(dbname)");
|
|
deleteRequest.onblocked = unexpectedBlockedCallback;
|
|
deleteRequest.onerror = unexpectedErrorCallback;
|
|
deleteRequest.onsuccess = openDB;
|
|
}
|
|
|
|
function openDB()
|
|
{
|
|
preamble();
|
|
|
|
var openRequest = evalAndLog("indexedDB.open(dbname, 1)");
|
|
openRequest.onblocked = unexpectedBlockedCallback;
|
|
openRequest.onerror = unexpectedErrorCallback;
|
|
openRequest.onupgradeneeded = onUpgradeNeeded;
|
|
openRequest.onsuccess = openSuccess;
|
|
}
|
|
|
|
function onUpgradeNeeded(evt) {
|
|
preamble(evt);
|
|
evalAndLog("db = event.target.result");
|
|
evalAndLog("db.createObjectStore('store').createIndex('index', 'keyPath')");
|
|
evalAndLog("db = null");
|
|
}
|
|
|
|
function openSuccess(evt)
|
|
{
|
|
preamble(evt);
|
|
var db = event.target.result;
|
|
db.onversionchange = onVersionChange;
|
|
evalAndLog("sawVersionChangeEvent = false");
|
|
|
|
// All these local references should get collected, but the database's
|
|
// wrapper shouldn't get collected before the database itself.
|
|
var transaction = db.transaction('store', 'readonly');
|
|
var objectStore = transaction.objectStore('store');
|
|
var request = objectStore.get(0);
|
|
request.onsuccess = function() {
|
|
setTimeout(collectGarbage, 0);
|
|
};
|
|
}
|
|
|
|
function onVersionChange(evt)
|
|
{
|
|
preamble(evt);
|
|
evalAndLog("event.target.close()");
|
|
evalAndLog("sawVersionChangeEvent = true");
|
|
}
|
|
|
|
function collectGarbage()
|
|
{
|
|
preamble();
|
|
evalAndLog("self.gc()");
|
|
|
|
setTimeout(openAgain, 0);
|
|
}
|
|
|
|
function openAgain()
|
|
{
|
|
preamble();
|
|
|
|
var openRequest = evalAndLog("indexedDB.open(dbname, 2)");
|
|
openRequest.onblocked = onBlocked;
|
|
openRequest.onerror = unexpectedErrorCallback;
|
|
openRequest.onsuccess = openAgainSuccess;
|
|
}
|
|
|
|
function onBlocked()
|
|
{
|
|
preamble();
|
|
debug("FIXME: Blocked event shouldn't fire. http://crbug.com/100123");
|
|
}
|
|
|
|
function openAgainSuccess(evt)
|
|
{
|
|
preamble(evt);
|
|
shouldBeTrue("sawVersionChangeEvent");
|
|
finishJSTest();
|
|
}
|