refactor: 'focus-change' does not need guestInstanceId (#29001)
* refactor: 'focus-change' does not need guestInstanceId * refactor: rename internal 'focus-change' event to '-focus-change'
This commit is contained in:
parent
476e908269
commit
2086e1903c
4 changed files with 12 additions and 23 deletions
|
@ -319,13 +319,8 @@ handleMessageSync(IPC_MESSAGES.GUEST_VIEW_MANAGER_DETACH_GUEST, function (event,
|
||||||
});
|
});
|
||||||
|
|
||||||
// this message is sent by the actual <webview>
|
// this message is sent by the actual <webview>
|
||||||
ipcMainInternal.on(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, function (event: ElectronInternal.IpcMainInternalEvent, focus: boolean, guestInstanceId: number) {
|
ipcMainInternal.on(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, function (event: ElectronInternal.IpcMainInternalEvent, focus: boolean) {
|
||||||
const guest = getGuest(guestInstanceId);
|
event.sender.emit('-focus-change', {}, focus);
|
||||||
if (guest === event.sender) {
|
|
||||||
event.sender.emit('focus-change', {}, focus, guestInstanceId);
|
|
||||||
} else {
|
|
||||||
console.error(`focus-change for guestInstanceId: ${guestInstanceId}`);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
handleMessage(IPC_MESSAGES.GUEST_VIEW_MANAGER_CALL, function (event, guestInstanceId: number, method: string, args: any[]) {
|
handleMessage(IPC_MESSAGES.GUEST_VIEW_MANAGER_CALL, function (event, guestInstanceId: number, method: string, args: any[]) {
|
||||||
|
@ -372,18 +367,12 @@ handleMessage(IPC_MESSAGES.GUEST_VIEW_MANAGER_CAPTURE_PAGE, async function (even
|
||||||
|
|
||||||
// Returns WebContents from its guest id hosted in given webContents.
|
// Returns WebContents from its guest id hosted in given webContents.
|
||||||
const getGuestForWebContents = function (guestInstanceId: number, contents: Electron.WebContents) {
|
const getGuestForWebContents = function (guestInstanceId: number, contents: Electron.WebContents) {
|
||||||
const guest = getGuest(guestInstanceId);
|
const guestInstance = guestInstances.get(guestInstanceId);
|
||||||
if (!guest) {
|
if (!guestInstance) {
|
||||||
throw new Error(`Invalid guestInstanceId: ${guestInstanceId}`);
|
throw new Error(`Invalid guestInstanceId: ${guestInstanceId}`);
|
||||||
}
|
}
|
||||||
if (guest.hostWebContents !== contents) {
|
if (guestInstance.guest.hostWebContents !== contents) {
|
||||||
throw new Error(`Access denied to guestInstanceId: ${guestInstanceId}`);
|
throw new Error(`Access denied to guestInstanceId: ${guestInstanceId}`);
|
||||||
}
|
}
|
||||||
return guest;
|
return guestInstance.guest;
|
||||||
};
|
|
||||||
|
|
||||||
// Returns WebContents from its guest id.
|
|
||||||
const getGuest = function (guestInstanceId: number) {
|
|
||||||
const guestInstance = guestInstances.get(guestInstanceId);
|
|
||||||
if (guestInstance != null) return guestInstance.guest;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,7 +18,7 @@ export const webViewEvents: Record<string, readonly string[]> = {
|
||||||
'did-navigate': ['url', 'httpResponseCode', 'httpStatusText'],
|
'did-navigate': ['url', 'httpResponseCode', 'httpStatusText'],
|
||||||
'did-frame-navigate': ['url', 'httpResponseCode', 'httpStatusText', 'isMainFrame', 'frameProcessId', 'frameRoutingId'],
|
'did-frame-navigate': ['url', 'httpResponseCode', 'httpStatusText', 'isMainFrame', 'frameProcessId', 'frameRoutingId'],
|
||||||
'did-navigate-in-page': ['url', 'isMainFrame', 'frameProcessId', 'frameRoutingId'],
|
'did-navigate-in-page': ['url', 'isMainFrame', 'frameProcessId', 'frameRoutingId'],
|
||||||
'focus-change': ['focus', 'guestInstanceId'],
|
'-focus-change': ['focus'],
|
||||||
close: [],
|
close: [],
|
||||||
crashed: [],
|
crashed: [],
|
||||||
'render-process-gone': ['details'],
|
'render-process-gone': ['details'],
|
||||||
|
|
|
@ -26,7 +26,7 @@ const dispatchEvent = function (
|
||||||
|
|
||||||
if (eventName === 'load-commit') {
|
if (eventName === 'load-commit') {
|
||||||
webView.onLoadCommit(props);
|
webView.onLoadCommit(props);
|
||||||
} else if (eventName === 'focus-change') {
|
} else if (eventName === '-focus-change') {
|
||||||
webView.onFocusChange();
|
webView.onFocusChange();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,16 +3,16 @@ import { IPC_MESSAGES } from '@electron/internal/common/ipc-messages';
|
||||||
|
|
||||||
const v8Util = process._linkedBinding('electron_common_v8_util');
|
const v8Util = process._linkedBinding('electron_common_v8_util');
|
||||||
|
|
||||||
function handleFocusBlur (guestInstanceId: number) {
|
function handleFocusBlur () {
|
||||||
// Note that while Chromium content APIs have observer for focus/blur, they
|
// Note that while Chromium content APIs have observer for focus/blur, they
|
||||||
// unfortunately do not work for webview.
|
// unfortunately do not work for webview.
|
||||||
|
|
||||||
window.addEventListener('focus', () => {
|
window.addEventListener('focus', () => {
|
||||||
ipcRendererInternal.send(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, true, guestInstanceId);
|
ipcRendererInternal.send(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('blur', () => {
|
window.addEventListener('blur', () => {
|
||||||
ipcRendererInternal.send(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, false, guestInstanceId);
|
ipcRendererInternal.send(IPC_MESSAGES.GUEST_VIEW_MANAGER_FOCUS_CHANGE, false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,6 @@ export function webViewInit (
|
||||||
|
|
||||||
if (guestInstanceId) {
|
if (guestInstanceId) {
|
||||||
// Report focus/blur events of webview to browser.
|
// Report focus/blur events of webview to browser.
|
||||||
handleFocusBlur(guestInstanceId);
|
handleFocusBlur();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue