| // META: title=IDBVersionChangeEvent |
| // META: global=window,worker |
| // META: script=resources/support.js |
| |
| // Spec: https://w3c.github.io/IndexedDB/#events |
| |
| 'use strict'; |
| |
| async_test(t => { |
| let db; |
| const dbname = location + '-' + t.name; |
| |
| indexedDB.deleteDatabase(dbname); |
| |
| const openrq = indexedDB.open(dbname, 3); |
| |
| openrq.onupgradeneeded = t.step_func((e) => { |
| assert_equals(e.oldVersion, 0, 'old version (upgradeneeded)'); |
| assert_equals(e.newVersion, 3, 'new version (upgradeneeded)'); |
| assert_true( |
| e instanceof IDBVersionChangeEvent, |
| 'upgradeneeded instanceof IDBVersionChangeEvent'); |
| }); |
| |
| openrq.onsuccess = t.step_func((e) => { |
| db = e.target.result; |
| |
| db.onversionchange = t.step_func((e) => { |
| assert_equals(e.oldVersion, 3, 'old version (versionchange)'); |
| assert_equals(e.newVersion, null, 'new version (versionchange)'); |
| assert_true( |
| e instanceof IDBVersionChangeEvent, |
| 'versionchange instanceof IDBVersionChangeEvent'); |
| db.close(); |
| }); |
| |
| // Errors |
| db.onerror = fail(t, 'db.error'); |
| db.onabort = fail(t, 'db.abort'); |
| |
| setTimeout(t.step_func(deleteDB), 10); |
| }); |
| |
| // Errors |
| openrq.onerror = fail(t, 'open.error'); |
| openrq.onblocked = fail(t, 'open.blocked'); |
| |
| function deleteDB(e) { |
| const deleterq = indexedDB.deleteDatabase(dbname); |
| |
| deleterq.onsuccess = t.step_func((e) => { |
| assert_equals( |
| e.result, undefined, 'result (delete.success for nonexistent db)'); |
| assert_equals(e.oldVersion, 3, 'old version (delete.success)'); |
| assert_equals(e.newVersion, null, 'new version (delete.success)'); |
| assert_true( |
| e instanceof IDBVersionChangeEvent, |
| 'delete.success instanceof IDBVersionChangeEvent'); |
| |
| setTimeout(deleteNonExistentDB, 10); |
| }); |
| |
| // Errors |
| deleterq.onerror = fail(t, 'delete.error'); |
| deleterq.onblocked = fail(t, 'delete.blocked'); |
| } |
| |
| function deleteNonExistentDB(e) { |
| const deleterq = indexedDB.deleteDatabase('db-does-not-exist'); |
| |
| deleterq.onsuccess = t.step_func((e) => { |
| assert_equals( |
| e.result, undefined, 'result (delete.success for nonexistent db)'); |
| assert_equals( |
| e.oldVersion, 0, 'old version (delete.success for nonexistent db)'); |
| assert_equals( |
| e.newVersion, null, |
| 'new version (delete.success for nonexistent db)'); |
| assert_true( |
| e instanceof IDBVersionChangeEvent, |
| 'delete.success instanceof IDBVersionChangeEvent'); |
| |
| setTimeout(function() { |
| t.done(); |
| }, 10); |
| }); |
| |
| // Errors |
| deleterq.onerror = fail(t, 'delete.error'); |
| deleterq.onblocked = fail(t, 'delete.blocked'); |
| } |
| }, 'IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase'); |