15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function finalTransactionCompleted() 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('The final transaction completed.'); 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done(); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function finalTransactionAborted() 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fail('The final transaction should not abort.'); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function employeeNotFound() 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('Employee not found.'); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shouldBe("event.target.result", "undefined"); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function newTransactionAborted() 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('The transaction was aborted.'); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var finalTransaction = db.transaction(['employees'], 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'readonly'); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finalTransaction.oncomplete = finalTransactionCompleted; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finalTransaction.onabort = finalTransactionAborted; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var request = finalTransaction.objectStore('employees').get(0); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.onsuccess = employeeNotFound; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.onerror = unexpectedErrorCallback; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function newTransactionCompleted() 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fail('The new transaction should not complete.'); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function employeeAdded() 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('Added an employee inside the transaction.'); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newTransaction.abort(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function onSetVersionComplete() 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('Creating new transaction.'); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.newTransaction = db.transaction(['employees'], 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'readwrite'); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newTransaction.oncomplete = newTransactionCompleted; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newTransaction.onabort = newTransactionAborted; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var request = newTransaction.objectStore('employees').put( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {id: 0, name: 'John Doe', desk: 'LON-BEL-123'}); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.onsuccess = employeeAdded; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.onerror = unexpectedErrorCallback; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function onSetVersion() 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We are now in a set version transaction. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window.db = event.target.result; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug('Creating object store.'); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleteAllObjectStores(db); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db.createObjectStore('employees', {keyPath: 'id'}); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function test() 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) indexedDBTest(onSetVersion, onSetVersionComplete); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 74