<html>
<head>
<script src="../../../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<iframe id="frame0"></iframe>
<iframe id="frame1"></iframe>
<iframe id="frame2"></iframe>
<script>

description("Confirm that blobs stay alive after their records are deleted.");

indexedDBTest(prepareDatabase, doRead);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    evalAndLog("store = db.createObjectStore('store')");
    blobAContent = "Blob A content";
    blobBContent = "Blob B content";
    var blobA = new Blob([blobAContent], {"type" : "text/plain"});
    var blobB = new Blob([blobBContent], {"type" : "text/plain"});
    key = "key"
    value = { a0: blobA, a1: blobA, b0: blobB };
    evalAndLog("store.put(value, key)");
    value = null;
}

function doRead()
{
    preamble();
    evalAndLog("trans = db.transaction('store')");
    evalAndLog("store = trans.objectStore('store')");
    evalAndLog("request = store.get(key)");
    request.onsuccess = didRead;
}

function didRead()
{
    record = request.result;
    trans.oncomplete = doDelete;
}

function doDelete()
{
    evalAndLog("trans = db.transaction('store', 'readwrite')");
    evalAndLog("store = trans.objectStore('store')");
    evalAndLog("request = store.delete(key)");
    trans.oncomplete = didDelete;
}

function didDelete()
{
    urlA0 = URL.createObjectURL(record.a0);
    urlA1 = URL.createObjectURL(record.a1);
    urlB = URL.createObjectURL(record.b0);
    document.getElementById('frame0').src = urlA0;
    document.getElementById('frame0').onload = verification;
    document.getElementById('frame1').src = urlA1;
    document.getElementById('frame1').onload = verification;
    document.getElementById('frame2').src = urlB;
    document.getElementById('frame2').onload = verification;
}

var loadCount = 0;
function verification()
{
    if (++loadCount < 3)
        return;
    URL.revokeObjectURL(urlA0);
    URL.revokeObjectURL(urlA1);
    URL.revokeObjectURL(urlB);
    shouldBe("document.getElementById('frame0').contentDocument.body.innerText",
        "blobAContent");
    shouldBe("document.getElementById('frame1').contentDocument.body.innerText",
        "blobAContent");
    shouldBe("document.getElementById('frame2').contentDocument.body.innerText",
        "blobBContent");
    finishJSTest();
}

</script>
</body>
</html>

