<html>
<head>
<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
<script src="../../fast/js/resources/js-test-pre.js"></script>
<script src="../../fast/js/resources/js-test-post-function.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

description("An open connection blocks a separate connection's setVersion call");
if (window.layoutTestController)
    layoutTestController.waitUntilDone();

connections = []
function test()
{
    if ('webkitIndexedDB' in window)
        IndexedDB = webkitIndexedDB;
    else if ('mozIndexedDB' in window)
        IndexedDB = mozIndexedDB;
    shouldBeFalse("IndexedDB == null");
    openDBConnection();
}

function openDBConnection()
{
    request = evalAndLog("IndexedDB.open('set-version-blocked')");
    request.onsuccess = openSuccess;
    request.onerror = unexpectedErrorCallback;
}

function openSuccess()
{
    connection = event.target.result;
    connections.push(connection);
    original_version = connection.version;
    if (connections.length < 2)
        openDBConnection();
    else {
        var versionChangeRequest = evalAndLog("connections[0].setVersion('version 1')");
        versionChangeRequest.onerror = unexpectedErrorCallback;
        versionChangeRequest.onsuccess = inSetVersion;
        versionChangeRequest.onblocked = blocked;
    }
}

seen_blocked_event = false;
function blocked()
{
    evalAndLog("seen_blocked_event = true");
    blocked_event = event;
    shouldBeEqualToString("blocked_event.version", "version 1");
    shouldEvaluateTo("blocked_event.target.readyState", 1);
    evalAndLog("connections[1].close()");
}

function inSetVersion()
{
    debug("in setVersion.onsuccess");
    shouldBeTrue("seen_blocked_event");
    deleteAllObjectStores(connections[0]);
    done();
}

var successfullyParsed = true;

test();

</script>
</body>
</html>
