<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 can be read back before their records are committed.");

indexedDBTest(prepareDatabase);
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)");
    evalAndLog("request = store.get(key)");
    request.onsuccess = didRead;
}

function didRead()
{
    record = request.result;
    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>

