Ensure IndexedDB transactions created before open onsuccess have correct metadata

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;

indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)

prepareDatabase():
db = event.target.result
store = db.createObjectStore('store')
store.createIndex('index', 'keyPath')
transaction = event.target.transaction
PASS index = transaction.objectStore('store').index('index') did not throw exception.

onTransactionComplete():
In multiprocess mode, 'complete' event may be dispatched before
the 'success' arrives with updated metadata. Ensure the new metadata
is still used for transactions.
store = db.transaction('store').objectStore('store')
PASS index = store.index('index') did not throw exception.

onOpenSuccess():
db = event.target.result
store = db.transaction('store').objectStore('store')
PASS index = store.index('index') did not throw exception.
PASS successfullyParsed is true

TEST COMPLETE

