Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<title>IndexedDB: SharedArrayBuffer keys</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/support.js"></script>
<script>
'use strict';
const key_data = [1, 2, 3, 4];
function create_object_store(t, db) {
db.createObjectStore('store');
}
function create_shared_buffer() {
const buffer = new SharedArrayBuffer(key_data.length);
const view = new Uint8Array(buffer);
view.set(key_data);
return {buffer, view};
}
function put_and_validate_key(t, db, key, view_on_sab, key_copy) {
assert_true(
self.crossOriginIsolated, 'The page should be cross-origin isolated');
// Put the SAB-backed key in the store.
const tx = db.transaction('store', 'readwrite');
const store = tx.objectStore('store');
const put_request = store.put('value', key);
put_request.onerror = t.unreached_func('put should succeed');
// Modifying the SAB after put should have no effect.
view_on_sab.fill(0);
// Reading the record back out of the key should work.
const get_request = store.get(key_copy);
get_request.onerror = t.unreached_func('get should succeed');
get_request.onsuccess = t.step_func(() => {
assert_equals(get_request.result, 'value');
});
tx.oncomplete = t.step_func_done();
}
indexeddb_test(
create_object_store,
(t, db) => {
const {buffer, view} = create_shared_buffer();
put_and_validate_key(
t, db, buffer, view, new Uint8Array(key_data));
},
'A SharedArrayBuffer can be used as an IndexedDB key');
indexeddb_test(
create_object_store,
(t, db) => {
const {view} = create_shared_buffer();
put_and_validate_key(
t, db, view, view, new Uint8Array(key_data));
},
'A SharedArrayBuffer-backed view can be used as an IndexedDB key');
indexeddb_test(
create_object_store,
(t, db) => {
const {buffer, view} = create_shared_buffer();
put_and_validate_key(
t, db, [buffer], view, [new Uint8Array(key_data)]);
},
'A SharedArrayBuffer in an array can be used as an IndexedDB key');
</script>