<!DOCTYPE html>
<title>IDBFactory.open() - second open's transaction is available to get objectStores</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>

<script>
    var db;
    var count_done = 0;
    var open_rq = createdb(async_test(document.title, {timeout: 10000}));

    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;

        db.createObjectStore("store");
        assert_true(db.objectStoreNames.contains("store"), "objectStoreNames contains store");

        var store = e.target.transaction.objectStore("store");
        assert_equals(store.name, "store", "store.name");

        store.add("data", 1);

        store.count().onsuccess = this.step_func(function(e) {
            assert_equals(e.target.result, 1, "count()");
            count_done++;
        });

        store.add("data2", 2);
    };
    open_rq.onsuccess = function(e) {
        var store = db.transaction("store").objectStore("store");
        assert_equals(store.name, "store", "store.name");
        store.count().onsuccess = this.step_func(function(e) {
            assert_equals(e.target.result, 2, "count()");
            count_done++;
        });
        db.close();

        var open_rq2 = window.indexedDB.open(db.name, 10);
        open_rq2.onupgradeneeded = this.step_func(function(e) {
            var db2 = e.target.result;
            assert_true(db2.objectStoreNames.contains("store"), "objectStoreNames contains store");
            var store = open_rq2.transaction.objectStore("store");
            assert_equals(store.name, "store", "store.name");

            store.add("data3", 3);

            store.count().onsuccess = this.step_func(function(e) {
                assert_equals(e.target.result, 3, "count()");
                count_done++;

                assert_equals(count_done, 3, "count_done");
                this.done();
            });
        });
    };
</script>

<div id=log></div>
