fix: crash when focusing WebView webContents (#43933)

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:
trop[bot] 2024-09-25 06:17:06 -05:00 committed by GitHub
parent d8e3555e01
commit a5f4f08a9e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View file

@ -3300,6 +3300,12 @@ void WebContents::Focus() {
if (owner_window())
owner_window()->Focus(true);
#endif
// WebView uses WebContentsViewChildFrame, which doesn't have a Focus impl
// and triggers a fatal NOTREACHED.
if (is_guest())
return;
web_contents()->Focus();
}
@ -3728,7 +3734,8 @@ void WebContents::SetBackgroundColor(std::optional<SkColor> maybe_color) {
content::RenderWidgetHostView* rwhv = rfh->GetView();
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);
static_cast<content::RenderWidgetHostViewBase*>(rwhv)
->SetContentBackgroundColor(color);

View file

@ -1077,6 +1077,22 @@ describe('webContents module', () => {
expect(currentFocused).to.be.true();
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) => {