Skip to content

Commit 4e12df1

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 eclipse-platform#1466
1 parent 4a201e2 commit 4e12df1

File tree

1 file changed

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

1 file changed

+27
-6
lines changed

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

+27-6
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,11 @@ private void abortInitialization() {
320341
webViewWrapperFuture.cancel(true);
321342
}
322343

344+
void releaseWebView() {
345+
processOSMessagesUntil(webViewWrapperFuture::isDone, browser.getDisplay());
346+
webViewWrapperFuture.join().releaseWebViews();
347+
}
348+
323349
private ICoreWebView2_2 initializeWebView_2(ICoreWebView2 webView) {
324350
long[] ppv = new long[1];
325351
int hr = webView.QueryInterface(COM.IID_ICoreWebView2_2, ppv);
@@ -748,14 +774,9 @@ void setupBrowser(int hr, long pv) {
748774
void browserDispose(Event event) {
749775
containingEnvironment.instances.remove(this);
750776
webViewProvider.scheduleWebViewTask(() -> {
751-
webViewProvider.getWebView(false).Release();
777+
webViewProvider.releaseWebView();
752778
if (environment2 != null) environment2.Release();
753779
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();
759780
if(controller != null) {
760781
// Bug in WebView2. Closing the controller from an event handler results
761782
// in a crash. The fix is to delay the closure with asyncExec.

0 commit comments

Comments
 (0)