Skip to content

Commit

Permalink
IDB WPTs: Extend idbrequest WPTs to run on workers
Browse files Browse the repository at this point in the history
This set of IndexedDB WPTs currently only run in a window environment.
This change extends them to also run in dedicated, shared, and service
worker environments.

Bug: 41455766
Change-Id: I19b3e1fe6e4342529970edb906b39be505702388
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6214757
Reviewed-by: Steve Becker <[email protected]>
Commit-Queue: Rahul Singh <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1413284}
  • Loading branch information
rahulsingh-msft authored and chromium-wpt-export-bot committed Jan 30, 2025
1 parent 184a7bf commit 402df69
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 94 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: UpgradeNeeded Tests</title>
<meta name="help" href="https://w3c.github.io/IndexedDB/#commit-transaction">
<meta name="help" href="https://w3c.github.io/IndexedDB/#dom-idbfactory-open">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// META: title=IDBRequest onupgradeneeded tests
// META: global=window,worker

function upgradeneeded_test(upgrade_func, success_func, error_func, description) {
'use strict';

function upgradeneeded_test(
upgrade_func, success_func, error_func, description) {
async_test(function(t) {
var dbName = 'db' + self.location.pathname + '-' + description;
var delete_request = indexedDB.deleteDatabase(dbName);
let dbName = 'db' + self.location.pathname + '-' + description;
let delete_request = indexedDB.deleteDatabase(dbName);
delete_request.onerror = t.unreached_func('deleteDatabase should not fail');
delete_request.onsuccess = t.step_func(function() {
var open_request = indexedDB.open(dbName);
let open_request = indexedDB.open(dbName);

open_request.onupgradeneeded = t.step_func(function() {
t.add_cleanup(function() {
if (open_request.result) {
open_request.result.close(),
open_request.result.close();
indexedDB.deleteDatabase(dbName);
}
});
Expand All @@ -28,7 +25,9 @@
success_func(t, open_request);
});
if (error_func) {
open_request.onerror = function() { error_func(t, open_request); };
open_request.onerror = function() {
error_func(t, open_request);
};
} else {
open_request.onerror = t.unreached_func('open failed');
}
Expand All @@ -37,37 +36,35 @@
}

(function() {
var order = [];
upgradeneeded_test(
let order = [];
upgradeneeded_test(
function upgrade(t, request) {
order.push('Upgrade');
var db = request.result;
var deleteRequest = indexedDB.deleteDatabase(db.name);
let db = request.result;
let deleteRequest = indexedDB.deleteDatabase(db.name);
deleteRequest.onsuccess = t.step_func(function() {
assert_array_equals(order, ['Upgrade', 'Open Success']);
t.done();
});
deleteRequest.onerror = t.unreached_func('delete failed');
},
function success(t, request) {
var db = request.result;
let db = request.result;
db.close();
order.push('Open Success');
},
null,
'indexedDB.delete called from upgradeneeded handler'
);
null, 'indexedDB.delete called from upgradeneeded handler');
}());

(function() {
var order = [];
upgradeneeded_test(
let order = [];
upgradeneeded_test(
function upgrade(t, request) {
order.push('Upgrade');
request.transaction.abort();
order.push('Upgrade Transaction Aborted');
var db = request.result;
var deleteRequest = indexedDB.deleteDatabase(db.name);
let db = request.result;
let deleteRequest = indexedDB.deleteDatabase(db.name);
deleteRequest.onsuccess = t.step_func(function() {
assert_array_equals(
order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']);
Expand All @@ -82,17 +79,16 @@
assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
order.push('Open Error');
},
'Abort transaction before deleting database in upgradeneeded handler'
);
'Abort transaction before deleting database in upgradeneeded handler');
}());

(function() {
var order = [];
upgradeneeded_test(
let order = [];
upgradeneeded_test(
function upgrade(t, request) {
order.push('Upgrade');
var db = request.result;
var deleteRequest = indexedDB.deleteDatabase(db.name);
let db = request.result;
let deleteRequest = indexedDB.deleteDatabase(db.name);
request.transaction.abort();
order.push('Upgrade Transaction Aborted');
deleteRequest.onsuccess = t.step_func(function() {
Expand All @@ -109,21 +105,20 @@
assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
order.push('Open Error');
},
'Abort transaction after deleting database in upgradeneeded event handler'
);
'Abort transaction after deleting database in upgradeneeded event handler');
}());

(function() {
var order = [];
upgradeneeded_test(
let order = [];
upgradeneeded_test(
function upgrade(t, request) {
order.push('Upgrade');
var db = request.result;
let db = request.result;
db.createObjectStore('store');
request.transaction.oncomplete = t.step_func(function() {
order.push('Upgrade transaction complete');
var txn = db.transaction('store', 'readwrite');
var store = txn.objectStore('store');
let txn = db.transaction('store', 'readwrite');
let store = txn.objectStore('store');
store.put('value', 'key');
txn.oncomplete = t.step_func(function() {
assert_array_equals(
Expand All @@ -138,9 +133,5 @@
function success(t, request) {
order.push('Open Success');
},
null,
'transaction oncomplete ordering relative to open request onsuccess'
);
null, 'transaction oncomplete ordering relative to open request onsuccess');
}());

</script>
24 changes: 24 additions & 0 deletions IndexedDB/idbrequest_error.any.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// META: title=IDBRequest.error
// META: global=window,worker
// META: script=resources/support.js

'use strict';

async_test(t => {
let open = createdb(t);
open.onupgradeneeded = t.step_func(e => {
let db = e.target.result;
db.createObjectStore('store');
});
open.onsuccess = t.step_func(e => {
let db = e.target.result;
let request =
db.transaction('store', 'readonly').objectStore('store').get(0);

assert_equals(request.readyState, 'pending');
assert_throws_dom(
'InvalidStateError', () => request.error,
'IDBRequest.error should throw if request is pending');
t.done();
});
}, 'IDBRequest.error throws if ready state is pending');
25 changes: 0 additions & 25 deletions IndexedDB/idbrequest_error.html

This file was deleted.

24 changes: 24 additions & 0 deletions IndexedDB/idbrequest_result.any.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// META: title=IDBRequest.result
// META: global=window,worker
// META: script=resources/support.js

'use strict';

async_test(t => {
let open = createdb(t);
open.onupgradeneeded = t.step_func(e => {
let db = e.target.result;
db.createObjectStore('store');
});
open.onsuccess = t.step_func(e => {
let db = e.target.result;
let request =
db.transaction('store', 'readonly').objectStore('store').get(0);

assert_equals(request.readyState, 'pending');
assert_throws_dom(
'InvalidStateError', () => request.result,
'IDBRequest.result should throw if request is pending');
t.done();
});
}, 'IDBRequest.result throws if ready state is pending');
25 changes: 0 additions & 25 deletions IndexedDB/idbrequest_result.html

This file was deleted.

0 comments on commit 402df69

Please sign in to comment.