| 'use strict'; |
| |
| import {tryToCreateLock} from './bfcache-test-helpers.js'; |
| |
| let openSAH; |
| |
| export async function createSAH(mode, fileName) { |
| if (openSAH) { |
| throw new Error('Already have an open access handle.'); |
| } |
| openSAH = await tryToCreateLock( |
| fileName, fileHandle => fileHandle.createSyncAccessHandle({mode})); |
| return openSAH !== undefined; |
| } |
| |
| export async function releaseSAH() { |
| if (!openSAH) { |
| throw new Error('No open access handle.'); |
| } |
| await openSAH.close(); |
| openSAH = undefined; |
| } |
| |
| export async function createAndReleaseSAH(mode, fileName) { |
| const sahLock = await tryToCreateLock( |
| fileName, fileHandle => fileHandle.createSyncAccessHandle({mode})); |
| await sahLock?.close(); |
| return sahLock !== undefined; |
| } |
| |
| // Functions exposed to the renderer. |
| const funcs = { |
| createSAH, |
| releaseSAH, |
| createAndReleaseSAH, |
| }; |
| |
| // Sets up a message handler that calls the `funcName` in `funcs` with `args` |
| // and then postMessages the result back to the renderer. |
| addEventListener('message', async ({data: {funcName, args}}) => { |
| postMessage(await funcs[funcName](...args)); |
| }); |