Verify that that cursors weakly hold request, and work if request is GC'd

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


indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;

dbname = "cursor-request-cycle.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)

prepareDatabase():
db = event.target.result
store = db.createObjectStore('store')

onOpen():
db = event.target.result
tx = db.transaction('store')
store = tx.objectStore('store')
cursorRequest = store.openCursor()
otherRequest = store.get(0)

openCursorRequestSuccess():
Result will be checked later, to ensure that lazy access is safe

otherRequestSuccess():
Verify that the request's result can be accessed lazily:
gc()
cursor = cursorRequest.result
PASS cursor is non-null.
PASS cursor.key is "key1"
PASS cursor.value is "value1"
cursorRequest.extra = 123
cursor.extra = 456
Ensure request is not released if cursor is still around.
cursorRequest = null
gc()
PASS cursorRequestObservation.wasCollected is false
cursor.continue()
cursor = null
gc()
PASS cursorObservation.wasCollected is false
finalRequest = store.get(0)

cursorContinueSuccess():
cursor = event.target.result
PASS cursor is non-null.
PASS cursor.key is "key2"
PASS cursor.value is "value2"
PASS event.target.extra is 123
PASS cursor.extra is 456

finalRequestSuccess():
PASS cursor.key is "key2"
PASS cursor.value is "value2"
cursor = null
gc()
PASS cursorRequestObservation.wasCollected is true
PASS cursorObservation.wasCollected is true
PASS successfullyParsed is true

TEST COMPLETE

