Bug 571746 - Prevent execution of JavaScript on close when disabled

There is a race condition because jsEnabled is updated asynchronously.
This might result in a situation when it's still true and the browser is
requested to be closed although it was never fully visible. This results
in a deadlock with Content Assist. See bug 567881 for a stacktrace
exposing the issue.

Change-Id: I13e56ff056dbf84b9a7cd7afb37bdcc42c9b88ce
Signed-off-by: Gunnar Wagenknecht <gunnar@wagenknecht.org>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/177319
Reviewed-by: Sravan Kumar Lakkimsetti <sravankumarl@in.ibm.com>
Tested-by: Sravan Kumar Lakkimsetti <sravankumarl@in.ibm.com>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
index 56e05ad..df65bf9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
@@ -942,7 +942,10 @@
 //         false = blocks disposal. In Browser.java, user is told widget was not disposed.
 // See Snippet326.
 boolean close (boolean showPrompters) {
-	if (!jsEnabled) return true;
+	// don't execute any JavaScript if it's disabled or requested to get disabled
+	// we need to check jsEnabledOnNextPage here because jsEnabled is updated asynchronously
+	// and may not reflect the proper state (bug 571746 and bug 567881)
+	if (!jsEnabled || !jsEnabledOnNextPage) return true;
 
 	String message1 = Compatibility.getMessage("SWT_OnBeforeUnload_Message1"); // $NON-NLS-1$
 	String message2 = Compatibility.getMessage("SWT_OnBeforeUnload_Message2"); // $NON-NLS-1$