fix: manually manage WebContents of webview when it is detached
This commit is contained in:
parent
8e963f10ef
commit
92e094c5f6
5 changed files with 38 additions and 10 deletions
|
@ -70,6 +70,19 @@ const createGuest = function (embedder, params) {
|
|||
}
|
||||
|
||||
// Clear the guest from map when it is destroyed.
|
||||
//
|
||||
// The guest WebContents is usually destroyed in 2 cases:
|
||||
// 1. The embedder frame is closed (reloaded or destroyed), and it
|
||||
// automatically closes the guest frame.
|
||||
// 2. The guest frame is detached dynamically via JS, and it is manually
|
||||
// destroyed when the renderer sends the GUEST_VIEW_MANAGER_DESTROY_GUEST
|
||||
// message.
|
||||
// The second case relies on the libcc patch:
|
||||
// https://github.com/electron/libchromiumcontent/pull/676
|
||||
// The patch was introduced to work around a bug in Chromium:
|
||||
// https://github.com/electron/electron/issues/14211
|
||||
// We should revisit the bug to see if we can remove our libcc patch, the
|
||||
// patch was introduced in Chrome 66.
|
||||
guest.once('destroyed', () => {
|
||||
if (guestInstanceId in guestInstances) {
|
||||
detachGuest(embedder, guestInstanceId)
|
||||
|
@ -319,6 +332,13 @@ ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST_SYNC', function (event, par
|
|||
event.returnValue = createGuest(event.sender, params)
|
||||
})
|
||||
|
||||
ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_DESTROY_GUEST', function (event, guestInstanceId) {
|
||||
const guest = getGuest(guestInstanceId)
|
||||
if (guest) {
|
||||
guest.destroy()
|
||||
}
|
||||
})
|
||||
|
||||
ipcMain.on('ELECTRON_GUEST_VIEW_MANAGER_ATTACH_GUEST', function (event, embedderFrameId, elementInstanceId, guestInstanceId, params) {
|
||||
attachGuest(event, embedderFrameId, elementInstanceId, guestInstanceId, params)
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue