fix: correctly notify WebViewGuestDelegate when webview is detached (#31350)
This commit is contained in:
parent
f8e6d45b70
commit
0eb9c4b16d
2 changed files with 21 additions and 2 deletions
|
@ -939,8 +939,6 @@ WebContents::~WebContents() {
|
||||||
}
|
}
|
||||||
|
|
||||||
inspectable_web_contents_->GetView()->SetDelegate(nullptr);
|
inspectable_web_contents_->GetView()->SetDelegate(nullptr);
|
||||||
if (guest_delegate_)
|
|
||||||
guest_delegate_->WillDestroy();
|
|
||||||
|
|
||||||
// This event is only for internal use, which is emitted when WebContents is
|
// This event is only for internal use, which is emitted when WebContents is
|
||||||
// being destroyed.
|
// being destroyed.
|
||||||
|
@ -1957,6 +1955,10 @@ void WebContents::WebContentsDestroyed() {
|
||||||
return;
|
return;
|
||||||
wrapper->SetAlignedPointerInInternalField(0, nullptr);
|
wrapper->SetAlignedPointerInInternalField(0, nullptr);
|
||||||
|
|
||||||
|
// Tell WebViewGuestDelegate that the WebContents has been destroyed.
|
||||||
|
if (guest_delegate_)
|
||||||
|
guest_delegate_->WillDestroy();
|
||||||
|
|
||||||
Observe(nullptr);
|
Observe(nullptr);
|
||||||
Emit("destroyed");
|
Emit("destroyed");
|
||||||
}
|
}
|
||||||
|
|
|
@ -397,6 +397,23 @@ describe('<webview> tag', function () {
|
||||||
expect(webview.getZoomFactor()).to.equal(1.2);
|
expect(webview.getZoomFactor()).to.equal(1.2);
|
||||||
await w.loadURL(`${zoomScheme}://host1`);
|
await w.loadURL(`${zoomScheme}://host1`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('does not crash when changing zoom level after webview is destroyed', async () => {
|
||||||
|
const w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
|
session: webviewSession,
|
||||||
|
contextIsolation: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const attachPromise = emittedOnce(w.webContents, 'did-attach-webview');
|
||||||
|
await w.loadFile(path.join(fixtures, 'pages', 'webview-zoom-inherited.html'));
|
||||||
|
await attachPromise;
|
||||||
|
await w.webContents.executeJavaScript('view.remove()');
|
||||||
|
w.webContents.setZoomLevel(0.5);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('requestFullscreen from webview', () => {
|
describe('requestFullscreen from webview', () => {
|
||||||
|
|
Loading…
Reference in a new issue