From 632e54cb6c0c43a9fc6afcf16b6928bde4d72849 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Mon, 27 Jan 2025 21:31:12 +0100 Subject: [PATCH] [Win32] Correct WebView initialization retry logic in Edge WebView initialization may fail in some cases, for which the Microsoft documentation proposes to retry initialization. The Edge implementation already covers that case, but accidentally cancels the initialization of the Edge instance even though a retry of initializing the contained WebView is triggered. This change properly separates actual initialization abortions and retries and corrects the retry functionality. --- .../win32/org/eclipse/swt/browser/Edge.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java index 48fb51bea9d..07a5f19a148 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java @@ -588,20 +588,23 @@ private void createInstance(int previousAttempts) { private IUnknown createControllerInitializationCallback(int previousAttempts) { Runnable initializationRollback = () -> { - webViewProvider.abortInitialization(); if (environment2 != null) { environment2.Release(); environment2 = null; } containingEnvironment.instances().remove(this); }; + Runnable initializationAbortion = () -> { + webViewProvider.abortInitialization(); + initializationRollback.run(); + }; return newCallback((result, pv) -> { if (browser.isDisposed()) { - initializationRollback.run(); + initializationAbortion.run(); return COM.S_OK; } if (result == OS.HRESULT_FROM_WIN32(OS.ERROR_INVALID_STATE)) { - initializationRollback.run(); + initializationAbortion.run(); SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " Edge instance with same data folder but different environment options already exists"); } @@ -611,11 +614,11 @@ private IUnknown createControllerInitializationCallback(int previousAttempts) { setupBrowser((int) result, pv); break; case COM.E_WRONG_THREAD: - initializationRollback.run(); + initializationAbortion.run(); error(SWT.ERROR_THREAD_INVALID_ACCESS, (int) result); break; case COM.E_ABORT: - initializationRollback.run(); + initializationAbortion.run(); break; default: initializationRollback.run();