mirror of
https://github.com/electron/electron.git
synced 2026-01-09 15:38:08 -05:00
feat: add senderIsMainFrame to messages sent via ipcRenderer.sendTo() (#38868)
* feat: add isMainFrame to events emitted via ipcRenderer.sendTo() * chore: rename isMainFrame to senderIsMainFrame
This commit is contained in:
@@ -9,7 +9,14 @@ describe('ipcRenderer module', () => {
|
||||
|
||||
let w: BrowserWindow;
|
||||
before(async () => {
|
||||
w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
|
||||
w = new BrowserWindow({
|
||||
show: false,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
nodeIntegrationInSubFrames: true,
|
||||
contextIsolation: false
|
||||
}
|
||||
});
|
||||
await w.loadURL('about:blank');
|
||||
});
|
||||
after(async () => {
|
||||
@@ -154,7 +161,36 @@ describe('ipcRenderer module', () => {
|
||||
ipcRenderer.sendTo(${contents.id}, 'ping', ${JSON.stringify(payload)})
|
||||
ipcRenderer.once('pong', (event, data) => resolve(data))
|
||||
})`);
|
||||
expect(data).to.equal(payload);
|
||||
expect(data.payload).to.equal(payload);
|
||||
expect(data.senderIsMainFrame).to.be.true();
|
||||
});
|
||||
|
||||
it('sends message to WebContents from a child frame', async () => {
|
||||
const frameCreated = once(w.webContents, 'frame-created') as Promise<[any, Electron.FrameCreatedDetails]>;
|
||||
|
||||
const promise = w.webContents.executeJavaScript(`new Promise(resolve => {
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.src = 'data:text/html,';
|
||||
iframe.name = 'iframe';
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
const { ipcRenderer } = require('electron');
|
||||
ipcRenderer.once('pong', (event, data) => resolve(data));
|
||||
})`);
|
||||
|
||||
const [, details] = await frameCreated;
|
||||
expect(details.frame.name).to.equal('iframe');
|
||||
|
||||
await once(details.frame, 'dom-ready');
|
||||
|
||||
details.frame.executeJavaScript(`new Promise(resolve => {
|
||||
const { ipcRenderer } = require('electron');
|
||||
ipcRenderer.sendTo(${contents.id}, 'ping', ${JSON.stringify(payload)});
|
||||
})`);
|
||||
|
||||
const data = await promise;
|
||||
expect(data.payload).to.equal(payload);
|
||||
expect(data.senderIsMainFrame).to.be.false();
|
||||
});
|
||||
|
||||
it('sends message on channel with non-ASCII characters to WebContents', async () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { ipcRenderer } = require('electron');
|
||||
|
||||
ipcRenderer.on('ping', function (event, payload) {
|
||||
ipcRenderer.sendTo(event.senderId, 'pong', payload);
|
||||
ipcRenderer.on('ping', function ({ senderId, senderIsMainFrame }, payload) {
|
||||
ipcRenderer.sendTo(senderId, 'pong', { payload, senderIsMainFrame });
|
||||
});
|
||||
|
||||
ipcRenderer.on('ping-æøåü', function (event, payload) {
|
||||
|
||||
Reference in New Issue
Block a user