@@ -294,6 +294,33 @@ class WebViewWrapper {
294294 private ICoreWebView2_11 webView_11 ;
295295 private ICoreWebView2_12 webView_12 ;
296296 private ICoreWebView2_13 webView_13 ;
297+
298+ void releaseWebViews () {
299+ if (webView != null ) {
300+ webView .Release ();
301+ webView = null ;
302+ }
303+ if (webView_2 != null ) {
304+ webView_2 .Release ();
305+ webView_2 = null ;
306+ }
307+ if (webView_10 != null ) {
308+ webView_10 .Release ();
309+ webView_10 = null ;
310+ }
311+ if (webView_11 != null ) {
312+ webView_11 .Release ();
313+ webView_11 = null ;
314+ }
315+ if (webView_12 != null ) {
316+ webView_12 .Release ();
317+ webView_12 = null ;
318+ }
319+ if (webView_13 != null ) {
320+ webView_13 .Release ();
321+ webView_13 = null ;
322+ }
323+ }
297324}
298325
299326class WebViewProvider {
@@ -320,6 +347,10 @@ private void abortInitialization() {
320347 webViewWrapperFuture .cancel (true );
321348 }
322349
350+ void releaseWebView () {
351+ getWebViewWrapper ().releaseWebViews ();
352+ }
353+
323354 private ICoreWebView2_2 initializeWebView_2 (ICoreWebView2 webView ) {
324355 long [] ppv = new long [1 ];
325356 int hr = webView .QueryInterface (COM .IID_ICoreWebView2_2 , ppv );
@@ -748,14 +779,9 @@ void setupBrowser(int hr, long pv) {
748779void browserDispose (Event event ) {
749780 containingEnvironment .instances .remove (this );
750781 webViewProvider .scheduleWebViewTask (() -> {
751- webViewProvider .getWebView ( false ). Release ();
782+ webViewProvider .releaseWebView ();
752783 if (environment2 != null ) environment2 .Release ();
753784 if (settings != null ) settings .Release ();
754- if (webViewProvider .isWebView_2Available ()) webViewProvider .getWebView_2 (false ).Release ();
755- if (webViewProvider .isWebView_10Available ()) webViewProvider .getWebView_10 (false ).Release ();
756- if (webViewProvider .isWebView_11Available ()) webViewProvider .getWebView_11 (false ).Release ();
757- if (webViewProvider .isWebView_12Available ()) webViewProvider .getWebView_12 (false ).Release ();
758- if (webViewProvider .isWebView_13Available ()) webViewProvider .getWebView_13 (false ).Release ();
759785 if (controller != null ) {
760786 // Bug in WebView2. Closing the controller from an event handler results
761787 // in a crash. The fix is to delay the closure with asyncExec.
0 commit comments