diff --git a/lib/browser/api/protocol.ts b/lib/browser/api/protocol.ts index 0ee726ee6d058..a0bda54319cbe 100644 --- a/lib/browser/api/protocol.ts +++ b/lib/browser/api/protocol.ts @@ -17,8 +17,12 @@ Object.setPrototypeOf(protocol, new Proxy({}, { ownKeys () { if (!app.isReady()) return []; + return Reflect.ownKeys(session.defaultSession!.protocol); + }, - return Object.getOwnPropertyNames(Object.getPrototypeOf(session.defaultSession!.protocol)); + has: (target, property: string) => { + if (!app.isReady()) return false; + return Reflect.has(session.defaultSession!.protocol, property); }, getOwnPropertyDescriptor () { diff --git a/spec-main/api-remote-spec.ts b/spec-main/api-remote-spec.ts index f36f726e8b398..9ef6d3a9c609c 100644 --- a/spec-main/api-remote-spec.ts +++ b/spec-main/api-remote-spec.ts @@ -7,7 +7,7 @@ import { ipcMain, BrowserWindow } from 'electron/main'; import { emittedOnce } from './events-helpers'; import { NativeImage } from 'electron/common'; import { serialize, deserialize } from '../lib/common/type-utils'; -import { nativeImage } from 'electron'; +import { protocol, nativeImage } from 'electron'; const features = process._linkedBinding('electron_common_features'); @@ -635,6 +635,16 @@ ifdescribe(features.isRemoteModuleEnabled())('remote module', () => { const { functionWithToStringProperty } = require('electron').remote.require(path.join(fixtures, 'module', 'to-string-non-function.js')); expect(functionWithToStringProperty.toString).to.equal('hello'); }); + + const protocolKeys = Object.getOwnPropertyNames(protocol); + remotely.it(protocolKeys)('remote.protocol returns all keys', (protocolKeys: [string]) => { + const protocol = require('electron').remote.protocol; + const remoteKeys = Object.getOwnPropertyNames(protocol); + expect(remoteKeys).to.deep.equal(protocolKeys); + for (const key of remoteKeys) { + expect(typeof (protocol as any)[key]).to.equal('function'); + } + }); }); describe('remote object in renderer', () => {