Skip to content

Commit

Permalink
IDB WPTs: Extend event-dispatch-active-flag IDB WPT to workers
Browse files Browse the repository at this point in the history
This IndexedDB WPT currently only runs in a window environment. This
change extends it to also run in dedicated, shared, and service worker
environments. As part of this update, repetitive code has been pulled
out into helper methods.

Bug: 41455766
Change-Id: I018cb4649449bf4d7bbdaa9b6b13ee861d53cc0d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5951326
Reviewed-by: Abhishek Shanthkumar <[email protected]>
Commit-Queue: Rahul Singh <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1385763}
  • Loading branch information
rahulsingh-msft authored and chromium-wpt-export-bot committed Nov 20, 2024
1 parent 92f1c29 commit ea5f982
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 154 deletions.
91 changes: 91 additions & 0 deletions IndexedDB/event-dispatch-active-flag.any.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
// META: title=IndexedDB Transaction - active flag is set during event dispatch
// META: global=window,worker
// META: script=resources/support.js

'use strict';

function createObjectStore() {
return (t, db) => {
db.createObjectStore('store');
};
}

function initializeTransaction(t, db, mode = 'readonly') {
const tx = db.transaction('store', mode, {durability: 'relaxed'});
const release_tx = keep_alive(tx, 'store');
assert_true(
is_transaction_active(tx, 'store'),
'Transaction should be active after creation');
return {tx, release_tx};
}

function assertLifetimeInMicrotasksAndEventLoop(
t, tx, release_tx, handlerMessage) {
assert_true(is_transaction_active(tx, 'store'), handlerMessage);

let saw_promise = false;
Promise.resolve().then(t.step_func(() => {
saw_promise = true;
assert_true(
is_transaction_active(tx, 'store'),
'Transaction should be active in microtasks');
}));

setTimeout(
t.step_func(() => {
assert_true(saw_promise);
assert_false(
is_transaction_active(tx, 'store'),
'Transaction should be inactive in next task');
release_tx();
t.done();
}),
0);
};

indexeddb_test(createObjectStore(), (t, db) => {
const {tx, release_tx} = initializeTransaction(t, db);
const request = tx.objectStore('store').get(0);
request.onerror = t.unreached_func('request should succeed');
request.onsuccess = t.step_func((e) => {
assertLifetimeInMicrotasksAndEventLoop(
t, tx, release_tx,
'Transaction should be active during success handler');
});
}, 'Active during success handlers');

indexeddb_test(createObjectStore(), (t, db) => {
const {tx, release_tx} = initializeTransaction(t, db);
const request = tx.objectStore('store').get(0);
request.onerror = t.unreached_func('request should succeed');
request.onsuccess = t.step_func((e) => {
assertLifetimeInMicrotasksAndEventLoop(
t, tx, release_tx,
'Transaction should be active during success listener');
});
}, 'Active during success listeners');

indexeddb_test(createObjectStore(), (t, db) => {
const {tx, release_tx} = initializeTransaction(t, db, 'readwrite');
tx.objectStore('store').put(0, 0);
const request = tx.objectStore('store').add(0, 0);
request.onsuccess = t.unreached_func('request should fail');
request.onerror = t.step_func((e) => {
e.preventDefault();
assertLifetimeInMicrotasksAndEventLoop(
t, tx, release_tx, 'Transaction should be active during error handler');
});
}, 'Active during error handlers');

indexeddb_test(createObjectStore(), (t, db) => {
const {tx, release_tx} = initializeTransaction(t, db, 'readwrite');
tx.objectStore('store').put(0, 0);
const request = tx.objectStore('store').add(0, 0);
request.onsuccess = t.unreached_func('request should fail');
request.onerror = t.step_func((e) => {
e.preventDefault();
assertLifetimeInMicrotasksAndEventLoop(
t, tx, release_tx,
'Transaction should be active during error listener');
});
}, 'Active during error listeners');
154 changes: 0 additions & 154 deletions IndexedDB/event-dispatch-active-flag.html

This file was deleted.

0 comments on commit ea5f982

Please sign in to comment.