chromium/third_party/blink/web_tests/storage/indexeddb/resources/intversion-blocked.js

if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

description("Test that blocked events get delivered properly with the new open api");

function test()
{
    setDBNameFromPath();
    request = evalAndLog("indexedDB.deleteDatabase(dbname)");
    request.onsuccess = deleteSuccess;
    request.onerror = unexpectedErrorCallback;
}

function deleteSuccess(evt) {
    preamble();
    evalAndLog("request = indexedDB.open(dbname, 2)");
    request.onsuccess = firstSuccessEventHandler;
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    gotFirstUpgradeNeededEvent = false;
    request.onupgradeneeded = firstUpgradeNeededCallback;
}

function firstUpgradeNeededCallback(evt)
{
    preamble(evt);
    evalAndLog("gotFirstUpgradeNeededEvent = true");
    shouldBe("event.oldVersion", "0");
    shouldBe("event.newVersion", "2");
    shouldBeEqualToString("String(event)", "[object IDBVersionChangeEvent]");
}

gotBlockedEvent = false;
function firstSuccessEventHandler(evt)
{
    preamble(evt);
    shouldBeTrue("gotFirstUpgradeNeededEvent");
    evalAndLog("connection1 = event.target.result");
    evalAndLog("connection1.onversionchange = versionChangeHandler");
    shouldBeEqualToString("String(connection1)", "[object IDBDatabase]");
    evalAndLog("request = indexedDB.open(dbname, 3)");
    request.onsuccess = secondSuccessCallback;
    request.onerror = unexpectedErrorCallback;
    request.onblocked = blockedEventHandler;
    request.onupgradeneeded = secondUpgradeNeededEventHandler;
}

var sawVersionChangeEvent = false;
function versionChangeHandler(evt)
{
    preamble(evt);
    evalAndLog("sawVersionChangeEvent = true");
    shouldBeEqualToString("event.type", "versionchange");
    shouldBeEqualToString("String(event)", "[object IDBVersionChangeEvent]");
    shouldBe("event.target", "connection1");
    shouldBe("event.oldVersion", "2");
    shouldBe("event.newVersion", "3");
}

function blockedEventHandler(evt)
{
    preamble(evt);
    shouldBeTrue("sawVersionChangeEvent");
    evalAndLog("gotBlockedEvent = true");
    shouldBeEqualToString("String(event)", "[object IDBVersionChangeEvent]");
    shouldBe("event.oldVersion", "2");
    shouldBe("event.newVersion", "3");
    shouldBeEqualToString("event.type", "blocked");
    evalAndLog("connection1.close()");
}

gotSecondUpgradeNeededEvent = false;
function secondUpgradeNeededEventHandler(evt)
{
    preamble(evt);
    shouldBeTrue("gotBlockedEvent");
    evalAndLog("gotSecondUpgradeNeededEvent = true");
}

function secondSuccessCallback(evt)
{
    preamble(evt);
    shouldBeTrue("gotSecondUpgradeNeededEvent");
    finishJSTest();
}

test();