diff --git a/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncher.kt b/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncher.kt index 203b0a9863d6..4fb6efe7a7f5 100644 --- a/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncher.kt +++ b/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncher.kt @@ -31,7 +31,9 @@ abstract class BrowserLauncher { abstract fun open(url: String) - abstract fun browse(uri: URI) + fun browse(uri: URI) = browse(uri, null) + + abstract fun browse(uri: URI, project: Project?) abstract fun browse(file: File) @@ -39,7 +41,7 @@ abstract class BrowserLauncher { browse(url, browser, null) } - abstract fun browse(url: String, browser: WebBrowser?, project: Project?) + abstract fun browse(url: String, browser: WebBrowser? = null, project: Project? = null) abstract fun browseUsingPath(url: String?, browserPath: String? = null, diff --git a/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt b/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt index 3e6696642a4b..09966e8f1a6a 100644 --- a/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt +++ b/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt @@ -28,9 +28,11 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.util.SystemInfo import com.intellij.openapi.util.text.StringUtil +import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VfsUtil import com.intellij.util.ArrayUtil import com.intellij.util.PathUtil +import com.intellij.util.io.URLUtil import org.jetbrains.annotations.Contract import java.awt.Desktop import java.io.File @@ -104,11 +106,15 @@ open class BrowserLauncherAppless : BrowserLauncher() { override fun open(url: String) = openOrBrowse(url, false, null) - override fun browse(file: File) = browse(VfsUtil.toUri(file)) + override fun browse(file: File) { + var path = file.absolutePath + if (SystemInfo.isWindows && path[0] != '/') { + path = '/' + path + } + browse("${StandardFileSystems.FILE_PROTOCOL_PREFIX}$path") + } - override fun browse(uri: URI) = browse(uri, null) - - fun browse(uri: URI, project: Project?) { + override fun browse(uri: URI, project: Project?) { LOG.debug("Launch browser: [$uri]") val settings = generalSettings @@ -179,11 +185,13 @@ open class BrowserLauncherAppless : BrowserLauncher() { } override fun browse(url: String, browser: WebBrowser?, project: Project?) { - if (browser == null) { + val effectiveBrowser = getEffectiveBrowser(browser) + // if browser is not passed, UrlOpener should be not used for non-http(s) urls + if (effectiveBrowser == null || (browser == null && !url.startsWith(URLUtil.HTTP_PROTOCOL))) { openOrBrowse(url, true, project) } else { - UrlOpener.EP_NAME.extensions.any { it.openUrl(browser, url, project) } + UrlOpener.EP_NAME.extensions.any { it.openUrl(effectiveBrowser, url, project) } } } @@ -250,4 +258,6 @@ open class BrowserLauncherAppless : BrowserLauncher() { // Not started yet. Not able to show message up. (Could happen in License panel under Linux). LOG.warn(error) } + + open protected fun getEffectiveBrowser(browser: WebBrowser?): WebBrowser? = browser } \ No newline at end of file diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.kt b/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.kt index d53aace92b34..3863404e000d 100644 --- a/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.kt +++ b/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.kt @@ -36,10 +36,25 @@ import java.util.concurrent.TimeUnit class BrowserLauncherImpl : BrowserLauncherAppless() { override fun browse(url: String, browser: WebBrowser?, project: Project?) { + super.browse(signUrl(url), browser, project) + } + + override fun getEffectiveBrowser(browser: WebBrowser?): WebBrowser? { + var effectiveBrowser = browser + if (browser == null) { + // https://youtrack.jetbrains.com/issue/WEB-26547 + val browserManager = WebBrowserManager.getInstance() + if (browserManager.getDefaultBrowserPolicy() == DefaultBrowserPolicy.FIRST) { + effectiveBrowser = browserManager.firstActiveBrowser + } + } + return effectiveBrowser + } + + private fun signUrl(url: String): String { @Suppress("NAME_SHADOWING") var url = url @Suppress("NAME_SHADOWING") - var browser = browser val serverManager = BuiltInServerManager.getInstance() val parsedUrl = Urls.parse(url, false) if (parsedUrl != null && serverManager.isOnBuiltInWebServer(parsedUrl)) { @@ -49,16 +64,7 @@ class BrowserLauncherImpl : BrowserLauncherAppless() { url = serverManager.addAuthToken(parsedUrl).toExternalForm() } - - if (browser == null) { - // https://youtrack.jetbrains.com/issue/WEB-26547 - val browserManager = WebBrowserManager.getInstance() - if (browserManager.getDefaultBrowserPolicy() == DefaultBrowserPolicy.FIRST) { - browser = browserManager.firstActiveBrowser - } - } - - super.browse(url, browser, project) + return url } override fun browseUsingNotSystemDefaultBrowserPolicy(uri: URI, settings: GeneralSettings, project: Project?) {