fix: addChildView() crashes when adding a closed WebContentsView (#47340)
fix: addChildView() crashes when add a closed WebContentsView Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Sida Zhu <zhusida@bytedance.com>
This commit is contained in:
parent
492589670b
commit
2336cd67b7
2 changed files with 20 additions and 0 deletions
|
@ -216,6 +216,12 @@ void View::AddChildViewAt(gin::Handle<View> child,
|
||||||
if (!view_)
|
if (!view_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!child->view()) {
|
||||||
|
gin_helper::ErrorThrower(isolate()).ThrowError(
|
||||||
|
"Can't add a destroyed child view to a parent view");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// This will CHECK and crash in View::AddChildViewAtImpl if not handled here.
|
// This will CHECK and crash in View::AddChildViewAtImpl if not handled here.
|
||||||
if (view_ == child->view()) {
|
if (view_ == child->view()) {
|
||||||
gin_helper::ErrorThrower(isolate()).ThrowError(
|
gin_helper::ErrorThrower(isolate()).ThrowError(
|
||||||
|
|
|
@ -55,6 +55,20 @@ describe('WebContentsView', () => {
|
||||||
})).to.throw('options.webContents is already attached to a window');
|
})).to.throw('options.webContents is already attached to a window');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should throw an error when adding a destroyed child view to the parent view', async () => {
|
||||||
|
const browserWindow = new BrowserWindow();
|
||||||
|
|
||||||
|
const webContentsView = new WebContentsView();
|
||||||
|
webContentsView.webContents.loadURL('about:blank');
|
||||||
|
webContentsView.webContents.destroy();
|
||||||
|
|
||||||
|
const destroyed = once(webContentsView.webContents, 'destroyed');
|
||||||
|
await destroyed;
|
||||||
|
expect(() => browserWindow.contentView.addChildView(webContentsView)).to.throw(
|
||||||
|
'Can\'t add a destroyed child view to a parent view'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should throw error when created with already attached webContents to other WebContentsView', () => {
|
it('should throw error when created with already attached webContents to other WebContentsView', () => {
|
||||||
const browserWindow = new BrowserWindow();
|
const browserWindow = new BrowserWindow();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue