blob: e15eba59a2568d6609224e45a314700afb41d736 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const DB = 'db';
const STORE = 'store';
const DATA = 'blob value';
run();
function run() {
Object.assign(indexedDB.open(DB), {
unexpectedErrorCallback,
onupgradeneeded(e) {
debug("Created object store.");
e.target.result.createObjectStore(STORE, {
keyPath: 'id',
});
},
onsuccess(e) {
debug("Opened database.");
const idb = /** @type IDBDatabase */ e.target.result;
const op = idb
.transaction(STORE, 'readwrite')
.objectStore(STORE)
.put({
id: 'foo',
blob: new Blob([DATA]),
});
op.onerror = onerror;
op.onsuccess = () => {
debug("Wrote blob.");
idb.close();
setTimeout(verify);
}
},
});
}
function verify(e) {
debug("Reading blob.");
Object.assign(indexedDB.open(DB), {
onerror,
onsuccess(e) {
const idb = /** @type IDBDatabase */ e.target.result;
const op = idb
.transaction(STORE, 'readonly')
.objectStore(STORE)
.get('foo');
op.onerror = onerror;
op.onsuccess = async e => {
debug("Got blob.");
idb.close();
const entry = e.target.result;
if (!entry) {
fail('BAD: nothing was written');
} else {
const text = await (
await fetch(URL.createObjectURL(entry.blob))).text();
if (text === DATA) {
done();
} else {
fail(`BAD: written "${DATA}", got "${text}"`)
}
}
}
},
});
}