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 24b1c431c5..ba67cd757f 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 @@ -486,14 +486,19 @@ public void create(Composite parent, int style) { int hr = containingEnvironment.environment().QueryInterface(COM.IID_ICoreWebView2Environment2, ppv); if (hr == COM.S_OK) environment2 = new ICoreWebView2Environment2(ppv[0]); // The webview calls are queued to be executed when it is done executing the current task. - IUnknown setupBrowserCallback = newCallback((result, pv) -> { + containingEnvironment.environment().CreateCoreWebView2Controller(browser.handle, getSetupCallback()); +} + +private IUnknown getSetupCallback() { + return newCallback((result, pv) -> { if ((int)result == COM.S_OK) { new IUnknown(pv).AddRef(); + setupBrowser((int)result, pv); + } else { + containingEnvironment.environment().CreateCoreWebView2Controller(browser.handle, getSetupCallback()); } - setupBrowser((int)result, pv); return COM.S_OK; }); - containingEnvironment.environment().CreateCoreWebView2Controller(browser.handle, setupBrowserCallback); } void setupBrowser(int hr, long pv) {