<script>

// 5 MB is larger than default WAL auto-checkpoint limit of 4 MB.
const ROW_SIZE = 5 << 20;

function openIDBAsync() {
    return new Promise((resolve, reject) => {
        let req = indexedDB.open('test-wal-checkpoint');
        req.onupgradeneeded = e => e.target.result.createObjectStore('objects');
        req.onsuccess = e => resolve(e.target.result);
        req.onerror = reject;
    });
}

// This creates a hanging cursor that doesn't let go of its associated
// read transaction until the next count() call in older WebKits (202137).
function countAsync(db) {
    let txn;
    let txnPromise = new Promise((resolve, reject) => {
        txn = db.transaction('objects', 'readwrite');
        [txn.oncomplete, txn.onerror] = [resolve, reject];
    });

    let reqPromise = new Promise((resolve, reject) => {
        let req = txn.objectStore('objects').count(IDBKeyRange.lowerBound(0xff));
        [req.onsuccess, req.onerror] = [resolve, reject];
    });

    return Promise.all([txnPromise, reqPromise]).then(_ => db);
}

function insertRowAsync(db) {
    let txn;
    let txnPromise = new Promise((resolve, reject) => {
        txn = db.transaction('objects', 'readwrite');
        [txn.oncomplete, txn.onerror] = [resolve, reject];
    });

    let reqPromise = new Promise((resolve, reject) => {
        let req = txn.objectStore('objects').put(new Int8Array(ROW_SIZE), 0xff);
        [req.onsuccess, req.onerror] = [resolve, reject];
    });

    return Promise.all([txnPromise, reqPromise]).then(_ => db);
}

openIDBAsync()
    .then(countAsync)
    .then(insertRowAsync)
    .then(_ => window.webkit.messageHandlers.testHandler.postMessage('Success'))
    .catch(e => window.webkit.messageHandlers.testHandler.postMessage('Failed inserting row: ' + (e?.target?.error || e)))

</script>
