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 ff667d42c1fd..c3b3714b4e70 100644 --- a/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt +++ b/platform/platform-api/src/com/intellij/ide/browsers/BrowserLauncherAppless.kt @@ -220,15 +220,17 @@ open class BrowserLauncherAppless : BrowserLauncher() { } private fun doLaunch(url: String?, command: List, browser: WebBrowser?, project: Project?, additionalParameters: Array = ArrayUtil.EMPTY_STRING_ARRAY, launchTask: (() -> Unit)? = null): Boolean { - val commandLine = GeneralCommandLine(command) - - if (url != null) { - if (url.startsWith("jar:")) { - return false - } - commandLine.addParameter(url) + if (url != null && url.startsWith("jar:")) { + return false } + val commandWithUrl = command.toMutableList() + if (url != null) { + if (browser != null) browser.addOpenUrlParameter(commandWithUrl, url) + else commandWithUrl.add(url) + } + val commandLine = GeneralCommandLine(commandWithUrl) + val browserSpecificSettings = browser?.specificSettings if (browserSpecificSettings != null) { commandLine.environment.putAll(browserSpecificSettings.environmentVariables) diff --git a/platform/platform-api/src/com/intellij/ide/browsers/WebBrowser.java b/platform/platform-api/src/com/intellij/ide/browsers/WebBrowser.java index 04eaa34123e9..c92b3e828fe1 100644 --- a/platform/platform-api/src/com/intellij/ide/browsers/WebBrowser.java +++ b/platform/platform-api/src/com/intellij/ide/browsers/WebBrowser.java @@ -4,6 +4,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.List; import java.util.UUID; public abstract class WebBrowser { @@ -27,4 +28,8 @@ public abstract class WebBrowser { @Nullable public abstract BrowserSpecificSettings getSpecificSettings(); + + public void addOpenUrlParameter(@NotNull List command, @NotNull String url) { + command.add(url); + } } \ No newline at end of file diff --git a/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java b/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java index 962ad9ec456e..29a1bcedefa9 100644 --- a/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java +++ b/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.List; import java.util.UUID; final class ConfigurableWebBrowser extends WebBrowser { @@ -72,6 +73,12 @@ final class ConfigurableWebBrowser extends WebBrowser { return AllIcons.Xml.Browsers.Nwjs16; } } + else if (family == BrowserFamily.EXPLORER) { + if (WebBrowserManager.isEdge(this)) { + return AllIcons.Xml.Browsers.Edge16; + } + } + return family.getIcon(); } @@ -154,6 +161,16 @@ final class ConfigurableWebBrowser extends WebBrowser { return IdeBundle.message("error.0.browser.path.not.specified", getName()); } + @Override + public void addOpenUrlParameter(@NotNull List command, @NotNull String url) { + if (WebBrowserManager.isEdge(this) && !command.isEmpty()) { + command.set(command.size() - 1, command.get(command.size() - 1) + ":" + url); + } + else { + super.addOpenUrlParameter(command, url); + } + } + @Override public String toString() { return getName() + " (" + getPath() + ")"; diff --git a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java index 50952db3b343..f78c6a85b8be 100644 --- a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java +++ b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java @@ -30,6 +30,7 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers private static final UUID PREDEFINED_OPERA_ID = UUID.fromString("53E2F627-B1A7-4DFA-BFA7-5B83CC034776"); private static final UUID PREDEFINED_YANDEX_ID = UUID.fromString("B1B2EC2C-20BD-4EE2-89C4-616DB004BCD4"); private static final UUID PREDEFINED_EXPLORER_ID = UUID.fromString("16BF23D4-93E0-4FFC-BFD6-CB13575177B0"); + private static final UUID PREDEFINED_EDGE_ID = UUID.fromString("B2A9DCA7-9D0B-4E1E-98A8-AFB19C1328D2"); private static final UUID[] PREDEFINED_BROWSER_IDS = new UUID[]{ PREDEFINED_CHROME_ID, @@ -37,9 +38,12 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers PREDEFINED_SAFARI_ID, PREDEFINED_OPERA_ID, PREDEFINED_YANDEX_ID, - PREDEFINED_EXPLORER_ID + PREDEFINED_EXPLORER_ID, + PREDEFINED_EDGE_ID }; + private static final String EDGE_COMMAND = "microsoft-edge"; + private static List getPredefinedBrowsers() { return Arrays.asList( new ConfigurableWebBrowser(PREDEFINED_CHROME_ID, BrowserFamily.CHROME), @@ -47,7 +51,8 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers new ConfigurableWebBrowser(PREDEFINED_SAFARI_ID, BrowserFamily.SAFARI), new ConfigurableWebBrowser(PREDEFINED_OPERA_ID, BrowserFamily.OPERA), new ConfigurableWebBrowser(PREDEFINED_YANDEX_ID, BrowserFamily.CHROME, "Yandex", SystemInfo.isWindows ? "browser" : (SystemInfo.isMac ? "Yandex" : "yandex"), false, BrowserFamily.CHROME.createBrowserSpecificSettings()), - new ConfigurableWebBrowser(PREDEFINED_EXPLORER_ID, BrowserFamily.EXPLORER) + new ConfigurableWebBrowser(PREDEFINED_EXPLORER_ID, BrowserFamily.EXPLORER), + new ConfigurableWebBrowser(PREDEFINED_EDGE_ID, BrowserFamily.EXPLORER, "Edge", EDGE_COMMAND, true, null) ); } @@ -71,6 +76,13 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers return browser.getFamily().equals(BrowserFamily.CHROME) && checkNameAndPath("Dartium", browser); } + public static boolean isEdge(@NotNull WebBrowser browser) { + return browser.getFamily() == BrowserFamily.EXPLORER && + (browser.getId().equals(PREDEFINED_EDGE_ID) || + checkNameAndPath(EDGE_COMMAND, browser) || + checkNameAndPath("MicrosoftEdge", browser)); + } + static boolean checkNameAndPath(@NotNull String what, @NotNull WebBrowser browser) { if (StringUtil.containsIgnoreCase(browser.getName(), what)) { return true;