fix: BrowserWindow add the same BrowserView (#48201)
fix: BrowserWindow add the same BrowserView (#48057) Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Zonglong Liu <83216456+mai-121@users.noreply.github.com>
This commit is contained in:
parent
a7335142a4
commit
79433861fe
2 changed files with 41 additions and 1 deletions
|
@ -199,7 +199,14 @@ BrowserWindow.prototype.setBackgroundThrottling = function (allowed: boolean) {
|
|||
};
|
||||
|
||||
BrowserWindow.prototype.addBrowserView = function (browserView: BrowserView) {
|
||||
if (browserView.ownerWindow) { browserView.ownerWindow.removeBrowserView(browserView); }
|
||||
if (this._browserViews.includes(browserView)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ownerWindow = browserView.ownerWindow;
|
||||
if (ownerWindow && ownerWindow !== this) {
|
||||
ownerWindow.removeBrowserView(browserView);
|
||||
}
|
||||
this.contentView.addChildView(browserView.webContentsView);
|
||||
browserView.ownerWindow = this;
|
||||
browserView.webContents._setOwnerWindow(this);
|
||||
|
|
|
@ -471,6 +471,39 @@ describe('BrowserView module', () => {
|
|||
w.webContents.loadURL('about:blank');
|
||||
await once(w.webContents, 'did-finish-load');
|
||||
});
|
||||
|
||||
it('document visibilitychange does not change when adding the same BrowserView multiple times', async () => {
|
||||
w.show();
|
||||
expect(w.isVisible()).to.be.true('w is visible');
|
||||
|
||||
const view = new BrowserView();
|
||||
const [width, height] = w.getSize();
|
||||
view.setBounds({ x: 0, y: 0, width, height });
|
||||
w.addBrowserView(view);
|
||||
expect(view.ownerWindow).to.equal(w);
|
||||
|
||||
await view.webContents.loadURL(`data:text/html,
|
||||
<html>
|
||||
<body>
|
||||
<h1>HELLO BROWSERVIEW</h1>
|
||||
<script>
|
||||
document.visibilityChangeCount = 0;
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
document.visibilityChangeCount++;
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
const query = 'document.visibilityChangeCount';
|
||||
const countBefore = await view.webContents.executeJavaScript(query);
|
||||
expect(countBefore).to.equal(0);
|
||||
|
||||
w.addBrowserView(view);
|
||||
w.addBrowserView(view);
|
||||
const countAfter = await view.webContents.executeJavaScript(query);
|
||||
expect(countAfter).to.equal(countBefore);
|
||||
});
|
||||
});
|
||||
|
||||
describe('BrowserWindow.removeBrowserView()', () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue