Confirm that blobs stay alive after their records are deleted.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


dbname = "blob-valid-after-deletion.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
store = db.createObjectStore('store')
store.put(value, key)

doRead():
trans = db.transaction('store')
store = trans.objectStore('store')
request = store.get(key)
trans = db.transaction('store', 'readwrite')
store = trans.objectStore('store')
request = store.delete(key)
PASS document.getElementById('frame0').contentDocument.body.innerText is blobAContent
PASS document.getElementById('frame1').contentDocument.body.innerText is blobAContent
PASS document.getElementById('frame2').contentDocument.body.innerText is blobBContent
PASS successfullyParsed is true

TEST COMPLETE
  
