<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: open and delete requests are processed as a FIFO queue</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#request-connection-queue">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support.js"></script>
<script>

async_test(t => {
    let db_name = 'db' + self.location.pathname + '-' + t.name;
    indexedDB.deleteDatabase(db_name);

    // Open and hold connection while other requests are queued up.
    let r = indexedDB.open(db_name, 1);
    r.onerror = t.unreached_func('open should succeed');
    r.onsuccess = t.step_func(e => {
        let db = r.result;

        let saw = expect(t, [
            'open1 success',
            'open1 versionchange',
            'delete1 blocked',
            'delete1 success',
            'open2 success',
            'open2 versionchange',
            'delete2 blocked',
            'delete2 success'
        ]);

        function open(token, version) {
            let r = indexedDB.open(db_name, version);
            r.onsuccess = t.step_func(e => {
                saw(token + ' success');
                let db = r.result;
                db.onversionchange = t.step_func(e => {
                    saw(token + ' versionchange');
                    setTimeout(t.step_func(() => db.close()), 0);
                });
            });
            r.onblocked = t.step_func(e => saw(token + ' blocked'));
            r.onerror = t.unreached_func('open should succeed');
        }

        function deleteDatabase(token) {
            let r = indexedDB.deleteDatabase(db_name);
            r.onsuccess = t.step_func(e => saw(token + ' success'));
            r.onblocked = t.step_func(e => saw(token + ' blocked'));
            r.onerror = t.unreached_func('deleteDatabase should succeed');
        }

        open('open1', 2);
        deleteDatabase('delete1');
        open('open2', 3);
        deleteDatabase('delete2');

        // Now unblock the queue.
        db.close();
    });

}, 'Opens and deletes are processed in order');

</script>
