fix: crash when focusing WebView
webContents
(#43932)
fix: crash when focusing WebView Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
parent
1af736bc15
commit
d2bd4cf91c
2 changed files with 24 additions and 1 deletions
|
@ -3320,6 +3320,12 @@ void WebContents::Focus() {
|
||||||
if (owner_window())
|
if (owner_window())
|
||||||
owner_window()->Focus(true);
|
owner_window()->Focus(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// WebView uses WebContentsViewChildFrame, which doesn't have a Focus impl
|
||||||
|
// and triggers a fatal NOTREACHED.
|
||||||
|
if (is_guest())
|
||||||
|
return;
|
||||||
|
|
||||||
web_contents()->Focus();
|
web_contents()->Focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3748,7 +3754,8 @@ void WebContents::SetBackgroundColor(std::optional<SkColor> maybe_color) {
|
||||||
|
|
||||||
content::RenderWidgetHostView* rwhv = rfh->GetView();
|
content::RenderWidgetHostView* rwhv = rfh->GetView();
|
||||||
if (rwhv) {
|
if (rwhv) {
|
||||||
// RenderWidgetHostView doesn't allow setting an alpha that's not 0 or 255.
|
// RenderWidgetHostView doesn't allow setting an alpha that's not 0 or
|
||||||
|
// 255.
|
||||||
rwhv->SetBackgroundColor(is_opaque ? color : SK_ColorTRANSPARENT);
|
rwhv->SetBackgroundColor(is_opaque ? color : SK_ColorTRANSPARENT);
|
||||||
static_cast<content::RenderWidgetHostViewBase*>(rwhv)
|
static_cast<content::RenderWidgetHostViewBase*>(rwhv)
|
||||||
->SetContentBackgroundColor(color);
|
->SetContentBackgroundColor(color);
|
||||||
|
|
|
@ -1206,6 +1206,22 @@ describe('webContents module', () => {
|
||||||
expect(currentFocused).to.be.true();
|
expect(currentFocused).to.be.true();
|
||||||
expect(childFocused).to.be.false();
|
expect(childFocused).to.be.false();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('does not crash when focusing a WebView webContents', async () => {
|
||||||
|
const w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
webviewTag: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
w.show();
|
||||||
|
await w.loadURL('data:text/html,<webview src="data:text/html,hi"></webview>');
|
||||||
|
|
||||||
|
const wc = webContents.getAllWebContents().find((wc) => wc.getType() === 'webview')!;
|
||||||
|
expect(() => wc.focus()).to.not.throw();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const moveFocusToDevTools = async (win: BrowserWindow) => {
|
const moveFocusToDevTools = async (win: BrowserWindow) => {
|
||||||
|
|
Loading…
Reference in a new issue