<!DOCTYPE html>
<title>IDBDatabase.close() - unblock the delete database request</title>
<link rel="author" title="Microsoft" href="http://www.microsoft.com">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>

var db;
var blocked_fired = false;
var versionchange_fired = false;
var t = async_test();
var open_rq = createdb(t);

open_rq.onupgradeneeded = t.step_func(function() {});
open_rq.onsuccess = t.step_func(function(e) {
    db = e.target.result;

    db.onversionchange = t.step_func(function (e) {
      versionchange_fired = true;
    });

    var rq = window.indexedDB.deleteDatabase(db.name);
    rq.onblocked = t.step_func(function (e) {
        blocked_fired = true;
        db.close();
    });
    rq.onsuccess = t.step_func(function (e) {
        assert_true(versionchange_fired, "versionchange event fired")
        assert_true(blocked_fired, "block event fired")
        t.done();
    });
    rq.onerror = fail(t, 'Unexpected database deletion error');
});

</script>

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