Basic repro:
const sab = new SharedArrayBuffer('256');
const open = indexedDB.open('db');
open.onupgradeneeded = e => {
const db = open.result;
db.createObjectStore('store');
};
open.onsuccess = e => {
const db = open.result;
const tx = db.transaction('store', 'readwrite');
const store = tx.objectStore('store');
try {
store.put({sab: sab}, 'key');
} catch (ex) {
// assert ex.name is DataCloneError
}
};
Current behavior: crash :)
Advanced steps:
const sab = new SharedArrayBuffer('256');
const open = indexedDB.open('db');
open.onupgradeneeded = e => {
const db = open.result;
db.createObjectStore('store');
};
open.onsuccess = e => {
const db = open.result;
const tx = db.transaction('store', 'readwrite');
const store = tx.objectStore('store');
let saw_a = false, saw_b = false;
try {
store.put({
get a() { saw_a = true; },
sab: sab,
get b() { saw_b = true; }
}, 'key');
} catch (ex) {
// assert ex.name is DataCloneError
// assert saw_a is true
// assert saw_b is false
}
};
Comment 1 by jsb...@chromium.org
, Apr 24 2017