<html>
<head>
<script src="../../../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<script>

description("Test that deleting an object store and a database containing blobs doesn't crash.");

indexedDBTest(prepareDatabase, reopen, {version: 1});
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    evalAndLog("store0 = db.createObjectStore('store0')");
    evalAndLog("store1 = db.createObjectStore('store1')");
    blobAContent = "First blob content";
    blobA = new Blob([blobAContent], {"type" : "text/plain"});
    key = "blob key";
    evalAndLog("store0.put(blobA, key)");
}

function reopen()
{
    evalAndLog("db.close()");
    preamble();
    evalAndLog("request = indexedDB.open(dbname, 2)");
    request.onupgradeneeded = deleteObjectStore;
    request.onsuccess = unexpectedSuccessCallback;
    request.onerror = unexpectedErrorCallback;
    request.onblocked = unexpectedBlockedCallback;
}

function deleteObjectStore(e)
{
    preamble();
    db = e.target.result;
    evalAndLog("db.deleteObjectStore('store0')");
    request.onsuccess = didDeleteObjectStore;
}

function didDeleteObjectStore()
{
    preamble();
    blobBContent = "Second blob content";
    evalAndLog("trans = db.transaction('store1', 'readwrite')");
    evalAndLog("store1 = trans.objectStore('store1')");
    blobB = new Blob([blobBContent], {"type" : "text/plain"});
    evalAndLog("store1.put(blobB, key)");
    trans.oncomplete = deleteDatabase;
    trans.onabort = unexpectedAbortCallback;
}

function deleteDatabase()
{
    evalAndLog("db.close()");
    evalAndLog("request = indexedDB.deleteDatabase(dbname)");
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = reportSuccess;
}

function reportSuccess()
{
    debug("Database deleted.");
    finishJSTest();
}
</script>
</body>
</html>

