Skip to content

Commit b3e784d

Browse files
committed
Extracted webview release to a 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 #1466
1 parent 4a201e2 commit b3e784d

File tree

1 file changed

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

1 file changed

+26
-6
lines changed

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

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,27 @@ 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+
}
302+
if(webView_2 != null) {
303+
webView_2.Release();
304+
}
305+
if(webView_10 != null) {
306+
webView_10.Release();
307+
}
308+
if(webView_11 != null) {
309+
webView_11.Release();
310+
}
311+
if(webView_12 != null) {
312+
webView_12.Release();
313+
}
314+
if(webView_13 != null) {
315+
webView_13.Release();
316+
}
317+
}
297318
}
298319

299320
class WebViewProvider {
@@ -320,6 +341,10 @@ private void abortInitialization() {
320341
webViewWrapperFuture.cancel(true);
321342
}
322343

344+
void releaseWebView() {
345+
getWebViewWrapper().releaseWebViews();
346+
}
347+
323348
private ICoreWebView2_2 initializeWebView_2(ICoreWebView2 webView) {
324349
long[] ppv = new long[1];
325350
int hr = webView.QueryInterface(COM.IID_ICoreWebView2_2, ppv);
@@ -748,14 +773,9 @@ void setupBrowser(int hr, long pv) {
748773
void browserDispose(Event event) {
749774
containingEnvironment.instances.remove(this);
750775
webViewProvider.scheduleWebViewTask(() -> {
751-
webViewProvider.getWebView(false).Release();
776+
webViewProvider.releaseWebView();
752777
if (environment2 != null) environment2.Release();
753778
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();
759779
if(controller != null) {
760780
// Bug in WebView2. Closing the controller from an event handler results
761781
// in a crash. The fix is to delay the closure with asyncExec.

0 commit comments

Comments
 (0)