<!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"),
        dbname = location + '-' + t.name;

    t.step(function() {
        indexedDB.deleteDatabase(dbname);

        var db;
        var openrq = indexedDB.open(dbname, 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");

            step_timeout(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(dbname);

        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 nonexistent database").step(function(e) {
        var deleterq = indexedDB.deleteDatabase('nonexistent');

        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>
