mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
This commit is contained in:
@@ -1352,6 +1352,11 @@ bool WebContents::OnMessageReceived(const IPC::Message& message) {
|
||||
// we need to make sure the api::WebContents is also deleted.
|
||||
// For #4, the WebContents will be destroyed by embedder.
|
||||
void WebContents::WebContentsDestroyed() {
|
||||
// Give chance for guest delegate to cleanup its observers
|
||||
// since the native class is only destroyed in the next tick.
|
||||
if (guest_delegate_)
|
||||
guest_delegate_->WillDestroy();
|
||||
|
||||
// Cleanup relationships with other parts.
|
||||
RemoveFromWeakMap();
|
||||
|
||||
|
||||
@@ -58,6 +58,10 @@ void WebViewGuestDelegate::AttachToIframe(
|
||||
api_web_contents_->Emit("did-attach");
|
||||
}
|
||||
|
||||
void WebViewGuestDelegate::WillDestroy() {
|
||||
ResetZoomController();
|
||||
}
|
||||
|
||||
void WebViewGuestDelegate::DidDetach() {
|
||||
ResetZoomController();
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
|
||||
// Attach to the iframe.
|
||||
void AttachToIframe(content::WebContents* embedder_web_contents,
|
||||
int embedder_frame_id);
|
||||
void WillDestroy();
|
||||
|
||||
protected:
|
||||
// content::BrowserPluginGuestDelegate:
|
||||
|
||||
@@ -273,6 +273,25 @@ describe('<webview> tag', function () {
|
||||
const [, zoomLevel] = await emittedOnce(ipcMain, 'webview-origin-zoom-level')
|
||||
expect(zoomLevel).to.equal(2.0)
|
||||
})
|
||||
|
||||
it('does not crash when navigating with zoom level inherited from parent', async () => {
|
||||
const w = new BrowserWindow({
|
||||
show: false,
|
||||
webPreferences: {
|
||||
webviewTag: true,
|
||||
nodeIntegration: true,
|
||||
zoomFactor: 1.2,
|
||||
session: webviewSession
|
||||
}
|
||||
})
|
||||
const attachPromise = emittedOnce(w.webContents, 'did-attach-webview')
|
||||
const readyPromise = emittedOnce(ipcMain, 'dom-ready')
|
||||
w.loadFile(path.join(fixtures, 'pages', 'webview-zoom-inherited.html'))
|
||||
const [, webview] = await attachPromise
|
||||
await readyPromise
|
||||
expect(webview.getZoomFactor()).to.equal(1.2)
|
||||
await w.loadURL(`${zoomScheme}://host1`)
|
||||
})
|
||||
})
|
||||
|
||||
describe('nativeWindowOpen option', () => {
|
||||
|
||||
12
spec/fixtures/pages/webview-zoom-inherited.html
vendored
Normal file
12
spec/fixtures/pages/webview-zoom-inherited.html
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<html>
|
||||
<body>
|
||||
<webview src="./a.html" id="view" partition="webview-temp"/>
|
||||
</body>
|
||||
<script>
|
||||
const {ipcRenderer} = require('electron')
|
||||
const view = document.getElementById('view')
|
||||
view.addEventListener('dom-ready', () => {
|
||||
ipcRenderer.send('dom-ready')
|
||||
})
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user