Skip to content

Commit ebccc9d

Browse files
IDB WPTs: Extend several IDB WPTs to run on workers (Part 8)
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: I76a29b8b5a583f1bdbed2cba1c39981a05aedb48 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6222486 Reviewed-by: Steve Becker <[email protected]> Commit-Queue: Rahul Singh <[email protected]> Cr-Commit-Position: refs/heads/main@{#1415963}
1 parent 0d69262 commit ebccc9d

File tree

4 files changed

+142
-171
lines changed

4 files changed

+142
-171
lines changed

IndexedDB/value_recursive.any.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// META: title=IndexedDB: recursive value
2+
// META: global=window,worker
3+
// META: script=resources/support.js
4+
5+
'use strict';
6+
7+
function recursive_value(desc, value) {
8+
let db;
9+
const t = async_test('Recursive value - ' + desc);
10+
11+
createdb(t).onupgradeneeded = t.step_func((e) => {
12+
db = e.target.result;
13+
db.createObjectStore('store').add(value, 1);
14+
15+
e.target.onsuccess = t.step_func((e) => {
16+
db.transaction('store', 'readonly')
17+
.objectStore('store')
18+
.get(1)
19+
.onsuccess = t.step_func((e) => {
20+
try {
21+
JSON.stringify(value);
22+
assert_unreached(
23+
'The test case is incorrect. It must provide a recursive value that JSON cannot stringify.');
24+
} catch (e) {
25+
if (e.name == 'TypeError') {
26+
try {
27+
JSON.stringify(e.target.result);
28+
assert_unreached(
29+
'Expected a non-JSON-serializable value back, didn\'t get that.');
30+
} catch (e) {
31+
t.done();
32+
return;
33+
}
34+
} else
35+
throw e;
36+
}
37+
});
38+
});
39+
});
40+
}
41+
42+
const recursive = [];
43+
recursive.push(recursive);
44+
recursive_value('array directly contains self', recursive);
45+
46+
const recursive2 = [];
47+
recursive2.push([recursive2]);
48+
recursive_value('array indirectly contains self', recursive2);
49+
50+
const recursive3 = [recursive];
51+
recursive_value('array member contains self', recursive3);

IndexedDB/value_recursive.htm

Lines changed: 0 additions & 66 deletions
This file was deleted.

IndexedDB/writer-starvation.any.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// META: title=IndexedDB writer starvation test
2+
// META: global=window,worker
3+
// META: script=resources/support.js
4+
// META: timeout=long
5+
6+
'use strict';
7+
8+
async_test(t => {
9+
let db;
10+
let read_request_count = 0;
11+
let read_success_count = 0;
12+
let write_request_count = 0;
13+
let write_success_count = 0;
14+
const RQ_COUNT = 25;
15+
16+
const open_rq = createdb(t);
17+
open_rq.onupgradeneeded = t.step_func((e) => {
18+
db = e.target.result;
19+
db.createObjectStore('s').add('1', 1);
20+
});
21+
22+
open_rq.onsuccess = t.step_func((e) => {
23+
let i = 0;
24+
25+
// Pre-fill some read requests.
26+
for (i = 0; i < RQ_COUNT; i++) {
27+
read_request_count++;
28+
29+
db.transaction('s', 'readonly').objectStore('s').get(1).onsuccess =
30+
t.step_func((e) => {
31+
read_success_count++;
32+
assert_equals(e.target.transaction.mode, 'readonly');
33+
});
34+
}
35+
36+
t.step(loop);
37+
38+
function loop() {
39+
read_request_count++;
40+
41+
db.transaction('s', 'readonly').objectStore('s').get(1).onsuccess =
42+
t.step_func((e) => {
43+
read_success_count++;
44+
assert_equals(e.target.transaction.mode, 'readonly');
45+
46+
if (read_success_count >= RQ_COUNT && write_request_count == 0) {
47+
write_request_count++;
48+
49+
db.transaction('s', 'readwrite')
50+
.objectStore('s')
51+
.add('written', read_request_count)
52+
.onsuccess = t.step_func((e) => {
53+
write_success_count++;
54+
assert_equals(e.target.transaction.mode, 'readwrite');
55+
assert_equals(
56+
e.target.result, read_success_count,
57+
'write cb came before later read cb\'s');
58+
});
59+
60+
// Reads done after the write.
61+
for (i = 0; i < 5; i++) {
62+
read_request_count++;
63+
64+
db.transaction('s', 'readonly')
65+
.objectStore('s')
66+
.get(1)
67+
.onsuccess = t.step_func((e) => {
68+
read_success_count++;
69+
});
70+
}
71+
}
72+
});
73+
74+
if (read_success_count < RQ_COUNT + 5) {
75+
step_timeout(t.step_func(loop), write_request_count ? 1000 : 100);
76+
} else {
77+
// This runs finish() once `read_success_count` >= RQ_COUNT + 5.
78+
db.transaction('s', 'readonly').objectStore('s').count().onsuccess =
79+
t.step_func(() => {
80+
step_timeout(t.step_func(finish), 100);
81+
});
82+
}
83+
}
84+
});
85+
86+
function finish() {
87+
assert_equals(read_request_count, read_success_count, 'read counts');
88+
assert_equals(write_request_count, write_success_count, 'write counts');
89+
t.done();
90+
}
91+
}, 'IDB read requests should not starve write requests');

IndexedDB/writer-starvation.htm

Lines changed: 0 additions & 105 deletions
This file was deleted.

0 commit comments

Comments
 (0)