feat: add process.contextId used by @electron/remote (#28007)

This commit is contained in:
Milan Burda 2021-03-17 19:23:03 +01:00 committed by GitHub
parent 54bc21929a
commit 485fa5bea9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 1 deletions

View file

@ -35,6 +35,7 @@ In sandboxed renderers the `process` object contains only a subset of the APIs:
* `versions`
* `mas`
* `windowsStore`
* `contextId`
## Events
@ -133,6 +134,13 @@ A `String` representing Electron's version string.
A `Boolean`. If the app is running as a Windows Store app (appx), this property is `true`,
for otherwise it is `undefined`.
### `process.contextId` _Readonly_
A `String` (optional) representing a globally unique ID of the current JavaScript context.
Each frame has its own JavaScript context. When contextIsolation is enabled, the isolated
world also has a separate JavaScript context.
This property is only available in the renderer process.
## Methods
The `process` object has the following methods:

View file

@ -39,6 +39,10 @@ require('@electron/internal/common/init');
// The global variable will be used by ipc for event dispatching
const v8Util = process._linkedBinding('electron_common_v8_util');
// Expose process.contextId
const contextId = v8Util.getHiddenValue<string>(global, 'contextId');
Object.defineProperty(process, 'contextId', { enumerable: true, value: contextId });
const { ipcRendererInternal } = require('@electron/internal/renderer/ipc-renderer-internal');
const ipcRenderer = require('@electron/internal/renderer/api/ipc-renderer').default;

View file

@ -89,6 +89,10 @@ Object.defineProperty(preloadProcess, 'noDeprecation', {
}
});
// Expose process.contextId
const contextId = v8Util.getHiddenValue<string>(global, 'contextId');
Object.defineProperty(preloadProcess, 'contextId', { enumerable: true, value: contextId });
process.on('loaded', () => (preloadProcess as events.EventEmitter).emit('loaded'));
process.on('exit', () => (preloadProcess as events.EventEmitter).emit('exit'));
(process as events.EventEmitter).on('document-start', () => (preloadProcess as events.EventEmitter).emit('document-start'));

View file

@ -2490,6 +2490,7 @@ describe('BrowserWindow module', () => {
expect(test.type).to.equal('renderer');
expect(test.version).to.equal(process.version);
expect(test.versions).to.deep.equal(process.versions);
expect(test.contextId).to.be.a('string');
if (process.platform === 'linux' && test.osSandbox) {
expect(test.creationTime).to.be.null('creation time');

View file

@ -42,7 +42,8 @@
sandboxed: process.sandboxed,
type: process.type,
version: process.version,
versions: process.versions
versions: process.versions,
contextId: process.contextId
};
}
} else if (location.href !== 'about:blank') {

View file

@ -115,4 +115,10 @@ describe('process module', () => {
expect(success).to.be.false();
});
});
describe('process.contextId', () => {
it('is a string', () => {
expect(process.contextId).to.be.a('string');
});
});
});