diff --git a/shell/browser/web_view_guest_delegate.cc b/shell/browser/web_view_guest_delegate.cc index 45a6fcaeccf2b..792bf829dc657 100644 --- a/shell/browser/web_view_guest_delegate.cc +++ b/shell/browser/web_view_guest_delegate.cc @@ -105,13 +105,18 @@ content::WebContents* WebViewGuestDelegate::CreateNewGuestWindow( guest_params.context = embedder_web_contents_->GetNativeView(); std::unique_ptr guest_contents = content::WebContents::Create(guest_params); - content::RenderWidgetHost* render_widget_host = - guest_contents->GetRenderViewHost()->GetWidget(); - auto* guest_contents_impl = - static_cast(guest_contents.release()); - guest_contents_impl->GetView()->CreateViewForWidget(render_widget_host); - - return guest_contents_impl; + if (!create_params.opener_suppressed) { + auto* guest_contents_impl = + static_cast(guest_contents.release()); + auto* new_guest_view = guest_contents_impl->GetView(); + content::RenderWidgetHostView* widget_view = + new_guest_view->CreateViewForWidget( + guest_contents_impl->GetRenderViewHost()->GetWidget()); + if (!create_params.initially_hidden) + widget_view->Show(); + return guest_contents_impl; + } + return guest_contents.release(); } } // namespace electron diff --git a/spec-main/webview-spec.ts b/spec-main/webview-spec.ts index f294f22488fe3..a79b1a8a01673 100644 --- a/spec-main/webview-spec.ts +++ b/spec-main/webview-spec.ts @@ -491,6 +491,15 @@ describe(' tag', function () { await webContentsCreated; }); + + it('does not crash when creating window with noopener', async () => { + loadWebView(w.webContents, { + allowpopups: 'on', + webpreferences: 'nativeWindowOpen=1', + src: `file://${path.join(fixtures, 'api', 'native-window-open-noopener.html')}` + }); + await emittedOnce(app, 'browser-window-created'); + }); }); describe('webpreferences attribute', () => { diff --git a/spec/fixtures/api/native-window-open-noopener.html b/spec/fixtures/api/native-window-open-noopener.html new file mode 100644 index 0000000000000..aa62c81fd12ed --- /dev/null +++ b/spec/fixtures/api/native-window-open-noopener.html @@ -0,0 +1,10 @@ + + +noopener example + + +