| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>IndexedDB: Test error events fired at requests from aborted transaction</title> | |
| <meta name=help href="https://w3c.github.io/IndexedDB/#abort-a-transaction"> | |
| <meta name=help href="https://w3c.github.io/IndexedDB/#request-construct"> | |
| <meta name=help href="https://w3c.github.io/IndexedDB/#transaction-construct"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="support.js"></script> | |
| <script> | |
| indexeddb_test( | |
| (t, db) => { | |
| db.createObjectStore('store'); | |
| }, | |
| (t, db) => { | |
| const tx = db.transaction('store'); | |
| const request = tx.objectStore('store').get(0); | |
| tx.abort(); | |
| request.onsuccess = t.unreached_func('request should not succeed'); | |
| let connection_saw_error = false; | |
| let transaction_saw_error = false; | |
| request.onerror = t.step_func(e => { | |
| assert_equals(request.readyState, 'done', | |
| 'Request\'s done flag should be set'); | |
| assert_equals(request.result, undefined, | |
| 'Request\'s result should be undefined'); | |
| assert_equals(request.error.name, 'AbortError', | |
| 'Request\'s error should be AbortError'); | |
| assert_equals(e.target, request, 'event target should be request'); | |
| assert_equals(e.type, 'error', 'Event type should be error'); | |
| assert_true(e.bubbles, 'Event should bubble'); | |
| assert_true(e.cancelable, 'Event should cancelable'); | |
| assert_true(connection_saw_error, | |
| 'Event propagated through connection'); | |
| assert_true(transaction_saw_error, | |
| 'Event propagated through transaction'); | |
| t.done(); | |
| }); | |
| // Event propagates via "get the parent" on request and transaction. | |
| db.addEventListener('error', t.step_func(e => { | |
| connection_saw_error = true; | |
| assert_equals(e.target, request, 'event target should be request'); | |
| assert_equals(e.type, 'error', 'Event type should be error'); | |
| assert_true(e.bubbles, 'Event should bubble'); | |
| assert_true(e.cancelable, 'Event should cancelable'); | |
| }), true); | |
| tx.addEventListener('error', t.step_func(e => { | |
| transaction_saw_error = true; | |
| assert_equals(e.target, request, 'event target should be request'); | |
| assert_equals(e.type, 'error', 'Event type should be error'); | |
| assert_true(e.bubbles, 'Event should bubble'); | |
| assert_true(e.cancelable, 'Event should cancelable'); | |
| assert_true(connection_saw_error, | |
| 'Event propagated through connection'); | |
| }), true); | |
| }, | |
| 'Properties of error events fired at requests when aborting a transaction'); | |
| </script> |