From 9cafd85cdaae345cebd96feb1650f313122e82d2 Mon Sep 17 00:00:00 2001 From: Sean Date: Sat, 23 Mar 2024 23:09:27 -0700 Subject: [PATCH] fix: fallback to hardcoded Edge/Chrome/Firefox Windows browser paths if user's default browser no longer exists (#3262) To reproduce: - Use Windows - Set your default browser to Firefox (Settings -> Apps -> Default Apps -> Web Browser) - Rename your firefox.exe to something.else The BrowserOpenURL before this commit silently fails. The BrowserOpenURL after this commit tries to use a hardcoded fallback browser. If successful, a warning message is logged. If unsuccessful (default browser and fallback browsers fail), an error message is logged. Co-authored-by: Sean --- .../frontend/desktop/darwin/browser.go | 4 +++- v2/internal/frontend/desktop/linux/browser.go | 4 +++- .../frontend/desktop/windows/browser.go | 23 ++++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/browser.go b/v2/internal/frontend/desktop/darwin/browser.go index 417501c8e..12b2bc8fc 100644 --- a/v2/internal/frontend/desktop/darwin/browser.go +++ b/v2/internal/frontend/desktop/darwin/browser.go @@ -10,5 +10,7 @@ import ( // BrowserOpenURL Use the default browser to open the url func (f *Frontend) BrowserOpenURL(url string) { // Specific method implementation - _ = browser.OpenURL(url) + if err := browser.OpenURL(url); err != nil { + f.logger.Error("Unable to open default system browser") + } } diff --git a/v2/internal/frontend/desktop/linux/browser.go b/v2/internal/frontend/desktop/linux/browser.go index 47bf0ba5d..30ca9620c 100644 --- a/v2/internal/frontend/desktop/linux/browser.go +++ b/v2/internal/frontend/desktop/linux/browser.go @@ -8,5 +8,7 @@ import "github.com/pkg/browser" // BrowserOpenURL Use the default browser to open the url func (f *Frontend) BrowserOpenURL(url string) { // Specific method implementation - _ = browser.OpenURL(url) + if err := browser.OpenURL(url); err != nil { + f.logger.Error("Unable to open default system browser") + } } diff --git a/v2/internal/frontend/desktop/windows/browser.go b/v2/internal/frontend/desktop/windows/browser.go index f23b04dbe..2b058feda 100644 --- a/v2/internal/frontend/desktop/windows/browser.go +++ b/v2/internal/frontend/desktop/windows/browser.go @@ -5,10 +5,31 @@ package windows import ( "github.com/pkg/browser" + "golang.org/x/sys/windows" ) +var fallbackBrowserPaths = []string{ + `\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`, + `\Program Files\Google\Chrome\Application\chrome.exe`, + `\Program Files (x86)\Google\Chrome\Application\chrome.exe`, + `\Program Files\Mozilla Firefox\firefox.exe`, +} + // BrowserOpenURL Use the default browser to open the url func (f *Frontend) BrowserOpenURL(url string) { // Specific method implementation - _ = browser.OpenURL(url) + err := browser.OpenURL(url) + if err == nil { + return + } + for _, fallback := range fallbackBrowserPaths { + if err := openBrowser(fallback, url); err == nil { + return + } + } + f.logger.Error("Unable to open default system browser") +} + +func openBrowser(path, url string) error { + return windows.ShellExecute(0, nil, windows.StringToUTF16Ptr(path), windows.StringToUTF16Ptr(url), nil, windows.SW_SHOWNORMAL) }