Skip to content

Commit 91e1ce7

Browse files
amartya4256HeikoKlare
authored andcommitted
Extracte WebView release to separate method
This commit encapsulates the ICoreWeICoreWebView2*::Release call for all the ICoreWebView2* instances in WebViewWrapper into a method WebViewWrapper::releaseWebViews for a better encapsulation which can be used to dispose off the created ICoreWebView2* resources. Contributes to eclipse-platform#1466
1 parent 009532c commit 91e1ce7

File tree

1 file changed

+32
-6
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser

1 file changed

+32
-6
lines changed

bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java

+32-6
Original file line numberDiff line numberDiff line change
@@ -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

299326
class 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) {
748779
void 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

Comments
 (0)