diff --git a/ide/extbrowser/nbproject/project.xml b/ide/extbrowser/nbproject/project.xml
index f537787a0a36..487c24af1d4d 100644
--- a/ide/extbrowser/nbproject/project.xml
+++ b/ide/extbrowser/nbproject/project.xml
@@ -124,6 +124,15 @@
8.0
+
+ org.netbeans.libs.jna.platform
+
+
+
+ 2
+ 2.17
+
+
diff --git a/ide/extbrowser/src/org/netbeans/modules/extbrowser/NbDdeBrowserImpl.java b/ide/extbrowser/src/org/netbeans/modules/extbrowser/NbDdeBrowserImpl.java
index 6c88131f1dd5..a36eb006e962 100644
--- a/ide/extbrowser/src/org/netbeans/modules/extbrowser/NbDdeBrowserImpl.java
+++ b/ide/extbrowser/src/org/netbeans/modules/extbrowser/NbDdeBrowserImpl.java
@@ -19,6 +19,10 @@
package org.netbeans.modules.extbrowser;
+import com.sun.jna.platform.win32.Advapi32Util;
+import com.sun.jna.platform.win32.WinReg;
+import java.util.Locale
+
import java.awt.EventQueue;
import java.net.*;
@@ -61,6 +65,9 @@
* here.
*
* @author Radim Kubacki
+ *
+ * @author James Pollard
+ * year: 2023
*/
public class NbDdeBrowserImpl extends ExtBrowserImpl {
@@ -127,6 +134,59 @@ public NbDdeBrowserImpl (ExtWebBrowser extBrowserFactory) {
*/
public static native String getDefaultOpenCommand() throws NbBrowserException;
+ /**
+ * Get the default browser name using Java JNA library
+ * @return String
+ */
+ private static String getDefaultWindowsBrowser() {
+ String userChoice = Advapi32Util
+ .registryGetStringValue(
+ WinReg.HKEY_CURRENT_USER,
+ "SOFTWARE\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https\\UserChoice",
+ "ProgId"
+ )
+ .toUpperCase(Locale.ROOT);
+
+ // done this way so that values like FirefoxURL-308046B0AF4A39CB can be handled
+ if (userChoice == null || userChoice.trim().isEmpty()) {
+ return ExtWebBrowser.IEXPLORE;
+ }
+ else if (userChoice.contains(ExtWebBrowser.FIREFOX)) {
+ return ExtWebBrowser.FIREFOX;
+ }
+ else if (user.Choicecontains(ExtWebBrowser.CHROME)) {
+ return ExtWebBrowser.CHROME;
+ } else if (userChoice.contains(ExtWebBrowser.CHROMIUM)) {
+ return ExtWebBrowser.CHROMIUM;
+ } else if (userChoice.contains(ExtWebBrowser.MOZILLA)) {
+ return ExtWebBrowser.MOZILLA;
+ } else {
+ //may not be needed
+ return ExtWebBrowser.IEXPLORE;
+ }
+ }
+
+ /**
+ * Retrieves the browser execution path from the registry using the java JNA library
+ * @param browser
+ * @return String
+ */
+ private static String getDefaultWindowsOpenCommandPath(String browser) {
+ String executionCommand = Advapi32Util
+ .registryGetStringValue(
+ WinReg.HKEY_CLASSES_ROOT,
+ "Applications\\" + browser.toLowerCase() + ".exe\\shell\\open\\command",
+ ""
+ );
+
+
+ return executionCommand;
+ }
+
+ public static String getDefaultWindowsOpenCommand() {
+ return getDefaultWindowsOpenCommandPath(getDefaultWindowsBrowser());
+ }
+
/** Sets current URL.
*
* @param url URL to show in the browser.
@@ -212,7 +272,15 @@ private String realDDEServer () {
}
try {
- String cmd = getDefaultOpenCommand ();
+ String cmd = getDefaultWindowsOpenCommand();
+
+ /** if not found with getDefaultWindowsOpenCommand function
+ * fallback to previous method
+ */
+ if (cmd == null || cmd.trim().isEmpty()) {
+ cmd = getDefaultOpenCommand();
+ }
+
if (cmd != null) {
cmd = cmd.toUpperCase();
if (cmd.contains(ExtWebBrowser.IEXPLORE)) {
diff --git a/ide/extbrowser/test/unit/src/org/netbeans/modules/extbrowser/NbDdeBrowserImplTest.java b/ide/extbrowser/test/unit/src/org/netbeans/modules/extbrowser/NbDdeBrowserImplTest.java
index 51f81a43130c..a97a92de2723 100644
--- a/ide/extbrowser/test/unit/src/org/netbeans/modules/extbrowser/NbDdeBrowserImplTest.java
+++ b/ide/extbrowser/test/unit/src/org/netbeans/modules/extbrowser/NbDdeBrowserImplTest.java
@@ -30,6 +30,9 @@
/**
*
* @author rk109395
+ *
+ * @author James
+ * year: 2023
*/
public class NbDdeBrowserImplTest extends NbTestCase {
@@ -52,7 +55,15 @@ public void testGetBrowserPath () throws NbBrowserException {
public void testGetDefaultOpenCommand () throws NbBrowserException {
if (!org.openide.util.Utilities.isWindows ())
return;
- getDDEBrowserImpl().getDefaultOpenCommand ();
+ getDDEBrowserImpl().getDefaultWindowsOpenCommand();
+
+ /** if not found with getDefaultWindowsOpenCommand function
+ * fallback to previous method
+ */
+ if (getDDEBrowserImpl().getDefaultWindowsOpenCommand().isEmpty())
+ {
+ getDDEBrowserImpl().getDefaultOpenCommand();
+ }
}
/** Test of backward method, of class org.netbeans.modules.extbrowser.NbDdeBrowserImpl. */