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_)
|
||||
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.
|
||||
if (view_ == child->view()) {
|
||||
gin_helper::ErrorThrower(isolate()).ThrowError(
|
||||
|
|
|
@ -55,6 +55,20 @@ describe('WebContentsView', () => {
|
|||
})).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', () => {
|
||||
const browserWindow = new BrowserWindow();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue