blob: c87902ca025a91c636e44291e00494b707ee3003 [file] [log] [blame]
<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>