Regression test for WK82678 - don't commit after a blocked event

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 = "dont-commit-on-blocked.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
db.onversionchange = onVersionChange
store = db.createObjectStore('store1')

holdConnection():
holding connection until versionchange event

Starting worker: resources/dont-commit-on-blocked-worker.js
[Worker] indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
[Worker]
[Worker] opening database connection
[Worker] request = indexedDB.open('dont-commit-on-blocked.html', 2)
[Worker] state = 'setversion'
[Worker] request.onblocked = onSetVersionBlocked
[Worker] request.onupgradeneeded = onSetVersionSuccess
[Worker] spinning for 100ms to let events be queued but prevent dispatch
[Worker] done spinning
[Worker]
[Worker] onSetVersionBlocked():
PASS [Worker] state is "setversion"
[Worker] state = 'blocked'
[Worker]
[Worker] onSetVersionSuccess():
[Worker] db = event.target.result
PASS [Worker] state is "blocked"
[Worker] state = 'success'
[Worker] creating object store - will fail if transaction commited after blocked event
[Worker] db.createObjectStore('store2')
[Worker]
[Worker] onTransactionComplete
PASS [Worker] state is "success"
PASS [Worker] Number(db.version) is 2
PASS [Worker] db.objectStoreNames.contains('store1') is true
PASS [Worker] db.objectStoreNames.contains('store2') is true
PASS successfullyParsed is true

TEST COMPLETE

