fix: webview zoom level persistence on navigation (#40650)

This commit is contained in:
Shelley Vohr
2023-12-04 16:39:20 +01:00
committed by GitHub
parent 66b4b21646
commit 10a165a9ff
4 changed files with 72 additions and 6 deletions

View File

@@ -0,0 +1,31 @@
<html>
<body>
<webview nodeintegration src="app://host1" id="view" partition="webview-temp" />
</body>
<script>
const { ipcRenderer, webFrame } = require('electron')
const view = document.getElementById('view')
let values = {
initialZoomLevel: 0,
switchZoomLevel: 0,
finalZoomLevel: 0,
}
view.addEventListener('dom-ready', async () => {
view.setZoomLevel(2.0)
values.initialZoomLevel = view.getZoomLevel()
await view.loadURL('app://host2')
view.setZoomLevel(3.0)
values.switchZoomLevel = view.getZoomLevel()
await view.loadURL('app://host1')
values.finalZoomLevel = view.getZoomLevel()
ipcRenderer.send('webview-zoom-persist-level', values)
})
</script>
</html>

View File

@@ -873,7 +873,13 @@ describe('node feature', () => {
});
};
process.once('unhandledRejection', () => done(new Error('catch block is delayed to next tick')));
let called = false;
process.once('unhandledRejection', () => {
if (called) return;
done(new Error('catch block is delayed to next tick'));
called = true;
});
setTimeout(() => {
f3().catch(() => done());

View File

@@ -353,6 +353,31 @@ describe('<webview> tag', function () {
expect(zoomLevel).to.equal(1);
});
it('maintains the zoom level for a given host in the same session after navigation', () => {
const w = new BrowserWindow({
show: false,
webPreferences: {
webviewTag: true,
nodeIntegration: true,
contextIsolation: false
}
});
const zoomPromise = new Promise<void>((resolve) => {
ipcMain.on('webview-zoom-persist-level', (_event, values) => {
resolve(values);
});
});
w.loadFile(path.join(fixtures, 'pages', 'webview-zoom-change-persist-host.html'));
expect(zoomPromise).to.eventually.deep.equal({
initialZoomLevel: 2,
switchZoomLevel: 3,
finalZoomLevel: 2
});
});
it('maintains zoom level on navigation', async () => {
const w = new BrowserWindow({
show: false,