Skip to content

Commit 94568ae

Browse files
committed
Extracted webview release to a method
This commit contributes to refactoring of the webview release for better encapsulation. contributes to #62 and #127
1 parent 422f742 commit 94568ae

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

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

298319
class 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) {
746772
void 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

Comments
 (0)