diff --git a/src/electron-main/bootstrap/app-ready.ts b/src/electron-main/bootstrap/app-ready.ts index 06f2f54d7..6ac2dd1ff 100644 --- a/src/electron-main/bootstrap/app-ready.ts +++ b/src/electron-main/bootstrap/app-ready.ts @@ -13,7 +13,7 @@ import {registerWebFolderFileProtocol} from "src/electron-main/protocol"; import {setUpPowerMonitorNotification} from "src/electron-main/power-monitor"; export async function appReadyHandler(ctx: Context): Promise { - await registerWebFolderFileProtocol(ctx, getDefaultSession()); + registerWebFolderFileProtocol(ctx, getDefaultSession()); await initSession(ctx, getDefaultSession()); diff --git a/src/electron-main/protocol.ts b/src/electron-main/protocol.ts index c0511e08e..831d18f68 100644 --- a/src/electron-main/protocol.ts +++ b/src/electron-main/protocol.ts @@ -8,7 +8,6 @@ import {promisify} from "util"; import {Context} from "src/electron-main/model"; import {WEB_PROTOCOL_SCHEME} from "src/shared/constants"; -import {resolveOrRejectIfError} from "src/shared/util"; const fsAsync = { stat: promisify(fs.stat), @@ -31,27 +30,25 @@ export function registerStandardSchemes(ctx: Context): void { } // TODO electron: get rid of "baseURLForDataURL" workaround, see https://github.com/electron/electron/issues/20700 -export async function registerWebFolderFileProtocol(ctx: Context, session: Session): Promise { +export function registerWebFolderFileProtocol(ctx: Context, session: Session): void { const webPath = path.join(ctx.locations.appDir, "./web"); - - return new Promise((resolve, reject) => { - session.protocol.registerFileProtocol( - WEB_PROTOCOL_SCHEME, - (request, callback) => { - const url = new URL(request.url); - const resource = path.normalize( - path.join(webPath, url.host, url.pathname), - ); - - if (!pathIsInside(resource, webPath)) { - throw new Error(`Forbidden file system resource "${resource}"`); - } - - callback({path: resource}); - }, - resolveOrRejectIfError(resolve, reject), - ); - }); + const scheme = WEB_PROTOCOL_SCHEME; + const registered = session.protocol.registerFileProtocol( + scheme, + (request, callback) => { + const url = new URL(request.url); + const resource = path.normalize( + path.join(webPath, url.host, url.pathname), + ); + if (!pathIsInside(resource, webPath)) { + throw new Error(`Forbidden file system resource "${resource}"`); + } + callback({path: resource}); + }, + ); + if (!registered) { + throw new Error(`Failed to register "${scheme}" protocol mapped to "${webPath}" directory`); + } } async function resolveFileSystemResourceLocation( @@ -89,22 +86,21 @@ export async function registerSessionProtocols(ctx: DeepReadonly, sessi await app.whenReady(); for (const {scheme, directory} of ctx.locations.protocolBundles) { - await new Promise((resolve, reject) => { - session.protocol.registerBufferProtocol( - scheme, - async (request, callback) => { - const file = await resolveFileSystemResourceLocation(directory, request); - const data = await fsAsync.readFile(file); - const mimeType = mimeTypes.lookup(path.basename(file)); - const result = mimeType - ? {data, mimeType} - : data; - - callback(result); - }, - resolveOrRejectIfError(resolve, reject), - ); - }); + const registered = session.protocol.registerBufferProtocol( + scheme, + async (request, callback) => { + const file = await resolveFileSystemResourceLocation(directory, request); + const data = await fsAsync.readFile(file); + const mimeType = mimeTypes.lookup(path.basename(file)); + const result = mimeType + ? {data, mimeType} + : data; + + callback(result); + }, + ); + if (!registered) { + throw new Error(`Failed to register "${scheme}" protocol mapped to "${directory}" directory`); + } } } - diff --git a/src/shared/util.ts b/src/shared/util.ts index 4e18c48cf..dc6daa8a2 100644 --- a/src/shared/util.ts +++ b/src/shared/util.ts @@ -489,13 +489,3 @@ export const resolvePackagedWebClientApp: ( return result; } )(); - -export const resolveOrRejectIfError = (resolve: () => void, reject: (error: Error) => void) => { - return (error: Error): void => { - if (error) { - reject(error); - return; - } - resolve(); - }; -};