<!DOCTYPE html>
<title>Test events opening a second database when one connection is open already</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support.js"></script>

<div id="log"></div>

<script>

    var t = async_test("Delete an existing database");

    t.step(function() {
        var openrq = indexedDB.open('db', 3);

        openrq.onupgradeneeded = function(e) {
            e.target.result.createObjectStore('store');
        };
        openrq.onsuccess = t.step_func(function(e) {
            db = e.target.result;

            // Errors
            db.onversionchange = fail(t, "db.versionchange");
            db.onerror = fail(t, "db.error");
            db.abort = fail(t, "db.abort");

            setTimeout(t.step_func(Second), 4);
            db.close();
        });

        // Errors
        openrq.onerror = fail(t, "open.error");
        openrq.onblocked = fail(t, "open.blocked");
    });

    function Second(e) {
        var deleterq = indexedDB.deleteDatabase('db');

        deleterq.onsuccess = function(e) { t.done(); }

        deleterq.onerror = fail(t, "delete.error");
        deleterq.onblocked = fail(t, "delete.blocked");
        deleterq.onupgradeneeded = fail(t, "delete.upgradeneeded");
    }

    async_test("Delete a nonexistant database").step(function(e) {
        var deleterq = indexedDB.deleteDatabase('nonexistant');

        deleterq.onsuccess = this.step_func(function(e) { this.done(); });

        deleterq.onerror = fail(this, "delete.error");
        deleterq.onblocked = fail(this, "delete.blocked");
        deleterq.onupgradeneeded = fail(this, "delete.upgradeneeded");
    });

</script>
</script>
