@@ -293,6 +293,27 @@ class WebViewWrapper {
293293 private ICoreWebView2_11 webView_11 ;
294294 private ICoreWebView2_12 webView_12 ;
295295 private ICoreWebView2_13 webView_13 ;
296+
297+ void releaseWebViews () {
298+ if (webView != null ) {
299+ webView .Release ();
300+ }
301+ if (webView_2 != null ) {
302+ webView_2 .Release ();
303+ }
304+ if (webView_10 != null ) {
305+ webView_10 .Release ();
306+ }
307+ if (webView_11 != null ) {
308+ webView_11 .Release ();
309+ }
310+ if (webView_12 != null ) {
311+ webView_12 .Release ();
312+ }
313+ if (webView_13 != null ) {
314+ webView_13 .Release ();
315+ }
316+ }
296317}
297318
298319class WebViewProvider {
@@ -319,6 +340,11 @@ private void abortInitialization() {
319340 webViewWrapperFuture .cancel (true );
320341 }
321342
343+ void releaseWebView () {
344+ processOSMessagesUntil (webViewWrapperFuture ::isDone , browser .getDisplay ());
345+ webViewWrapperFuture .join ().releaseWebViews ();
346+ }
347+
322348 private ICoreWebView2_2 initializeWebView_2 (ICoreWebView2 webView ) {
323349 long [] ppv = new long [1 ];
324350 int hr = webView .QueryInterface (COM .IID_ICoreWebView2_2 , ppv );
@@ -746,14 +772,9 @@ void setupBrowser(int hr, long pv) {
746772void browserDispose (Event event ) {
747773 containingEnvironment .instances .remove (this );
748774 webViewProvider .scheduleWebViewTask (() -> {
749- webViewProvider .getWebView ( false ). Release ();
775+ webViewProvider .releaseWebView ();
750776 if (environment2 != null ) environment2 .Release ();
751777 if (settings != null ) settings .Release ();
752- if (webViewProvider .isWebView_2Available ()) webViewProvider .getWebView_2 (false ).Release ();
753- if (webViewProvider .isWebView_10Available ()) webViewProvider .getWebView_10 (false ).Release ();
754- if (webViewProvider .isWebView_11Available ()) webViewProvider .getWebView_11 (false ).Release ();
755- if (webViewProvider .isWebView_12Available ()) webViewProvider .getWebView_12 (false ).Release ();
756- if (webViewProvider .isWebView_13Available ()) webViewProvider .getWebView_13 (false ).Release ();
757778 if (controller != null ) {
758779 // Bug in WebView2. Closing the controller from an event handler results
759780 // in a crash. The fix is to delay the closure with asyncExec.
0 commit comments