diff --git a/lib/browser/api/web-contents.ts b/lib/browser/api/web-contents.ts index 7fcd5dec3f04e..070db86390554 100644 --- a/lib/browser/api/web-contents.ts +++ b/lib/browser/api/web-contents.ts @@ -366,11 +366,6 @@ WebContents.prototype.loadURL = function (url, options) { resolveAndCleanup(); } }; - const failListener = (event: Electron.Event, errorCode: number, errorDescription: string, validatedURL: string, isMainFrame: boolean) => { - if (!error && isMainFrame) { - error = { errorCode, errorDescription, url: validatedURL }; - } - }; let navigationStarted = false; let browserInitiatedInPageNavigation = false; @@ -392,6 +387,14 @@ WebContents.prototype.loadURL = function (url, options) { navigationStarted = true; } }; + const failListener = (event: Electron.Event, errorCode: number, errorDescription: string, validatedURL: string, isMainFrame: boolean) => { + if (!error && isMainFrame) { + error = { errorCode, errorDescription, url: validatedURL }; + } + if (!navigationStarted && isMainFrame) { + finishListener(); + } + }; const stopLoadingListener = () => { // By the time we get here, either 'finish' or 'fail' should have fired // if the navigation occurred. However, in some situations (e.g. when diff --git a/spec/api-web-contents-spec.ts b/spec/api-web-contents-spec.ts index 12f1c623fd421..4f6185dd4ce73 100644 --- a/spec/api-web-contents-spec.ts +++ b/spec/api-web-contents-spec.ts @@ -519,6 +519,10 @@ describe('webContents module', () => { await expect(w.loadURL('file:non-existent')).to.eventually.be.rejected(); await expect(w.loadURL('file:non-existent')).to.eventually.be.rejected(); }); + + it('invalid URL load rejects', async () => { + await expect(w.loadURL('invalidURL')).to.eventually.be.rejected(); + }); }); describe('getFocusedWebContents() API', () => {