diff --git a/lib/browser/api/protocol.ts b/lib/browser/api/protocol.ts index 79e5f7c60e9b..3d5f7cd96b63 100644 --- a/lib/browser/api/protocol.ts +++ b/lib/browser/api/protocol.ts @@ -9,7 +9,7 @@ const { registerSchemesAsPrivileged, getStandardSchemes, Protocol } = process._l const ERR_FAILED = -2; const ERR_UNEXPECTED = -9; -const isBuiltInScheme = (scheme: string) => scheme === 'http' || scheme === 'https'; +const isBuiltInScheme = (scheme: string) => ['http', 'https', 'file'].includes(scheme); function makeStreamFromPipe (pipe: any): ReadableStream { const buf = new Uint8Array(1024 * 1024 /* 1 MB */); diff --git a/spec/api-protocol-spec.ts b/spec/api-protocol-spec.ts index 365e3ae13702..90b07b707422 100644 --- a/spec/api-protocol-spec.ts +++ b/spec/api-protocol-spec.ts @@ -1114,13 +1114,34 @@ describe('protocol module', () => { await expect(net.fetch('test-scheme://foo')).to.eventually.be.rejectedWith(/ERR_UNKNOWN_URL_SCHEME/); }); - it('receives requests to an existing scheme', async () => { + it('receives requests to the existing https scheme', async () => { protocol.handle('https', (req) => new Response('hello ' + req.url)); defer(() => { protocol.unhandle('https'); }); const body = await net.fetch('https://foo').then(r => r.text()); expect(body).to.equal('hello https://foo/'); }); + it('receives requests to the existing file scheme', (done) => { + const filePath = path.join(__dirname, 'fixtures', 'pages', 'a.html'); + + protocol.handle('file', (req) => { + let file; + if (process.platform === 'win32') { + file = `file:///${filePath.replace(/\\/g, '/')}`; + } else { + file = `file://${filePath}`; + } + + if (req.url === file) done(); + return new Response(req.url); + }); + + defer(() => { protocol.unhandle('file'); }); + + const w = new BrowserWindow(); + w.loadFile(filePath); + }); + it('receives requests to an existing scheme when navigating', async () => { protocol.handle('https', (req) => new Response('hello ' + req.url)); defer(() => { protocol.unhandle('https'); });