[Worker] Checks that garbage collection doesn't reclaim objects with pending activity

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


Starting worker: resources/pending-activity.js
[Worker] indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
[Worker] 
[Worker] indexedDB.deleteDatabase(dbname)
[Worker] indexedDB.open(dbname)
[Worker] 
[Worker] prepareDatabase():
[Worker] store = db.createObjectStore('store')
[Worker] store.put(0, 0)
[Worker] 
[Worker] testTransaction():
[Worker] transaction = db.transaction('store')
[Worker] transaction.oncomplete = transactionOnComplete
[Worker] transaction = null
[Worker] self.gc()
PASS [Worker] Transaction 'complete' event fired.
[Worker] 
[Worker] testRequest():
[Worker] transaction = db.transaction('store')
[Worker] store = transaction.objectStore('store')
[Worker] request = store.get(0)
[Worker] request.onsuccess = requestOnSuccess
[Worker] request = null
[Worker] self.gc()
PASS [Worker] Request 'success' event fired.
[Worker] 
[Worker] testCursorRequest():
[Worker] transaction = db.transaction('store')
[Worker] store = transaction.objectStore('store')
[Worker] request = store.openCursor()
[Worker] request.onsuccess = cursorRequestOnFirstSuccess
PASS [Worker] Request 'success' event fired.
[Worker] cursor = request.result
[Worker] cursor.continue()
[Worker] request.onsuccess = cursorRequestOnSecondSuccess
[Worker] request = null
[Worker] self.gc()
PASS [Worker] Request 'success' event fired.
[Worker] 
PASS successfullyParsed is true

TEST COMPLETE

