if (this.importScripts) { importScripts('../../../resources/js-test.js'); importScripts('shared.js'); } description("h2 shouldn't receive any blocked events, and h3 should open after h2 is open"); indexedDBTest(prepareDatabase, openAnother); function prepareDatabase() { evalAndLog("blockedEventFired = false"); evalAndLog("versionChangeComplete = false"); evalAndLog("h2Opened = false"); } function openAnother(evt) { preamble(evt); evalAndLog("h1 = event.target.result"); h1.onversionchange = unexpectedVersionChangeCallback; request = evalAndLog("indexedDB.open(dbname, 2)"); request.onblocked = h2Blocked; request.onerror = unexpectedErrorCallback; request.onupgradeneeded = h2UpgradeNeeded; request.onsuccess = h2Success; request = evalAndLog("indexedDB.open(dbname)"); request.onblocked = unexpectedBlockedCallback; request.onerror = unexpectedErrorCallback; request.onupgradeneeded = unexpectedUpgradeNeededCallback; request.onsuccess = h3Success; evalAndLog("h1.close()"); } function h2Blocked(evt) { // In multi-process ports h2 can erroneously get a blocked event after // finishJSTest is called, which adds extra output and causes the test to // fail. if (blockedEventFired) return; preamble(evt); evalAndLog("blockedEventFired = true"); } function h2UpgradeNeeded(evt) { preamble(evt); evalAndLog("h2 = event.target.result"); h2.onversionchange = unexpectedVersionChangeCallback; transaction = event.target.transaction; transaction.onabort = unexpectedAbortCallback; transaction.oncomplete = function transactionOnComplete(evt) { preamble(evt); evalAndLog("versionChangeComplete = true"); }; } function h2Success(evt) { preamble(evt); evalAndLog("h2Opened = true"); }; function h3Success(evt) { preamble(evt); evalAndLog("h3 = event.target.result"); shouldBe("h3.version", "2"); shouldBeFalse("blockedEventFired"); shouldBeTrue("versionChangeComplete"); shouldBeTrue("h2Opened"); finishJSTest(); }