Check that readwrite transactions with overlapping scopes do not run in parallel.

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)

openConnection1():
indexedDB.open(dbname, 1)

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

openOnSuccess():
db1 = event.target.result

openConnection2():
indexedDB.open(dbname, 1)

openOnSuccess2():
db2 = event.target.result

startWork():
transaction1 = db1.transaction('store', 'readwrite')
transaction2 = db2.transaction('store', 'readwrite')
transaction1PutSuccess = false
transaction1Complete = false
transaction2PutSuccess = false
transaction2Complete = false

Keep transaction1 alive for a while and ensure transaction2 doesn't start
count = 0
transaction1.objectStore('store').put(1, count++)
transaction2.objectStore('store').put(2, 0)

put1OnSuccess():
transaction1PutSuccess = true
transaction1.objectStore('store').put(1, count++)

put1OnSuccess():
transaction1PutSuccess = true
transaction1.objectStore('store').put(1, count++)

put1OnSuccess():
transaction1PutSuccess = true
transaction1.objectStore('store').put(1, count++)

put1OnSuccess():
transaction1PutSuccess = true
transaction1.objectStore('store').put(1, count++)

put1OnSuccess():
transaction1PutSuccess = true

onTransaction1Complete():
transaction1Complete = true
PASS transaction2PutSuccess is false
PASS transaction2Complete is false

put2OnSuccess():
transaction2PutSuccess = true
PASS transaction1Complete is true

onTransaction2Complete():
transaction2Complete = true
PASS transaction1PutSuccess is true
PASS transaction1Complete is true
PASS transaction2PutSuccess is true
PASS successfullyParsed is true

TEST COMPLETE

