summaryrefslogtreecommitdiff
path: root/xml/impl/src/com/intellij/ide/browsers
diff options
context:
space:
mode:
Diffstat (limited to 'xml/impl/src/com/intellij/ide/browsers')
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.java17
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/BrowserSelector.java4
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.form2
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java216
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java11
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/DefaultBrowserPolicy.java20
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java105
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java2
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java12
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java11
10 files changed, 242 insertions, 158 deletions
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.java b/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.java
index 86d2994c0e00..4f7f4efa5085 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.java
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowserLauncherImpl.java
@@ -18,6 +18,7 @@ package com.intellij.ide.browsers;
import com.intellij.concurrency.JobScheduler;
import com.intellij.execution.configurations.GeneralCommandLine;
import com.intellij.execution.util.ExecUtil;
+import com.intellij.ide.GeneralSettings;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.ShowSettingsUtil;
@@ -25,14 +26,30 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.AppUIUtil;
+import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.net.URI;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
final class BrowserLauncherImpl extends BrowserLauncherAppless {
@Override
+ protected void browseUsingNotSystemDefaultBrowserPolicy(@NotNull URI uri, @NotNull GeneralSettings settings, @Nullable Project project) {
+ WebBrowserManager browserManager = WebBrowserManager.getInstance();
+ if (browserManager.getDefaultBrowserPolicy() == DefaultBrowserPolicy.FIRST) {
+ WebBrowser browser = browserManager.getFirstActiveBrowser();
+ if (browser != null) {
+ browseUsingPath(uri.toString(), null, browser, project, ArrayUtil.EMPTY_STRING_ARRAY);
+ return;
+ }
+ }
+
+ super.browseUsingNotSystemDefaultBrowserPolicy(uri, settings, project);
+ }
+
+ @Override
protected void doShowError(@Nullable final String error, @Nullable final WebBrowser browser, @Nullable final Project project, final String title, @Nullable final Runnable launchTask) {
AppUIUtil.invokeOnEdt(new Runnable() {
@Override
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSelector.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSelector.java
index 3ae67def8424..af04e5896387 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowserSelector.java
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSelector.java
@@ -81,8 +81,8 @@ public class BrowserSelector {
boolean hasFocus) {
Icon baseIcon;
if (value == null) {
- WebBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowser();
- baseIcon = defaultBrowser == null ? PlatformIcons.WEB_ICON : defaultBrowser.getIcon();
+ WebBrowser firstBrowser = WebBrowserManager.getInstance().getFirstActiveBrowser();
+ baseIcon = firstBrowser == null ? PlatformIcons.WEB_ICON : firstBrowser.getIcon();
}
else {
baseIcon = value.getIcon();
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.form b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.form
index 52d074347bbc..23d7bf2ea873 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.form
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.form
@@ -22,7 +22,7 @@
</constraints>
<properties/>
</component>
- <component id="95daa" class="com.intellij.openapi.ui.ComboBox" binding="defaultBrowserComboBox">
+ <component id="95daa" class="com.intellij.openapi.ui.ComboBox" binding="defaultBrowserPolicyComboBox">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
index 477d527ecbac..f43c0f6f4929 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
@@ -23,7 +23,6 @@ import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Comparing;
-import com.intellij.ui.EnumComboBoxModel;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.TitledSeparator;
import com.intellij.util.Function;
@@ -34,6 +33,7 @@ import com.intellij.util.ui.LocalPathCellEditor;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.table.IconTableCellRenderer;
import com.intellij.util.ui.table.TableModelEditor;
+import org.jdesktop.swingx.combobox.ListComboBoxModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -46,9 +46,9 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.util.ArrayList;
import java.util.UUID;
-import static com.intellij.ide.browsers.WebBrowserManager.DefaultBrowser;
import static com.intellij.util.ui.table.TableModelEditor.EditableColumnInfo;
final class BrowserSettingsPanel {
@@ -73,7 +73,7 @@ final class BrowserSettingsPanel {
}
};
- private static final ColumnInfo[] COLUMNS = {new EditableColumnInfo<ConfigurableWebBrowser, Boolean>() {
+ private static final EditableColumnInfo<ConfigurableWebBrowser, Boolean> ACTIVE_COLUMN_INFO = new EditableColumnInfo<ConfigurableWebBrowser, Boolean>() {
@Override
public Class getColumnClass() {
return Boolean.class;
@@ -88,44 +88,49 @@ final class BrowserSettingsPanel {
public void setValue(ConfigurableWebBrowser item, Boolean value) {
item.setActive(value);
}
- }, new EditableColumnInfo<ConfigurableWebBrowser, String>("Name") {
- @Override
- public String valueOf(ConfigurableWebBrowser item) {
- return item.getName();
- }
+ };
- @Override
- public void setValue(ConfigurableWebBrowser item, String value) {
- item.setName(value);
- }
- }, new ColumnInfo<ConfigurableWebBrowser, BrowserFamily>("Family") {
- @Override
- public Class getColumnClass() {
- return BrowserFamily.class;
- }
+ private static final ColumnInfo[] COLUMNS = {ACTIVE_COLUMN_INFO,
+ new EditableColumnInfo<ConfigurableWebBrowser, String>("Name") {
+ @Override
+ public String valueOf(ConfigurableWebBrowser item) {
+ return item.getName();
+ }
- @Override
- public BrowserFamily valueOf(ConfigurableWebBrowser item) {
- return item.getFamily();
- }
+ @Override
+ public void setValue(ConfigurableWebBrowser item, String value) {
+ item.setName(value);
+ }
+ },
+ new ColumnInfo<ConfigurableWebBrowser, BrowserFamily>("Family") {
+ @Override
+ public Class getColumnClass() {
+ return BrowserFamily.class;
+ }
- @Override
- public void setValue(ConfigurableWebBrowser item, BrowserFamily value) {
- item.setFamily(value);
- item.setSpecificSettings(value.createBrowserSpecificSettings());
- }
+ @Override
+ public BrowserFamily valueOf(ConfigurableWebBrowser item) {
+ return item.getFamily();
+ }
- @Nullable
- @Override
- public TableCellRenderer getRenderer(ConfigurableWebBrowser item) {
- return IconTableCellRenderer.ICONABLE;
- }
+ @Override
+ public void setValue(ConfigurableWebBrowser item, BrowserFamily value) {
+ item.setFamily(value);
+ item.setSpecificSettings(value.createBrowserSpecificSettings());
+ }
- @Override
- public boolean isCellEditable(ConfigurableWebBrowser item) {
- return !WebBrowserManager.getInstance().isPredefinedBrowser(item);
- }
- }, PATH_COLUMN_INFO};
+ @Nullable
+ @Override
+ public TableCellRenderer getRenderer(ConfigurableWebBrowser item) {
+ return IconTableCellRenderer.ICONABLE;
+ }
+
+ @Override
+ public boolean isCellEditable(ConfigurableWebBrowser item) {
+ return !WebBrowserManager.getInstance().isPredefinedBrowser(item);
+ }
+ },
+ PATH_COLUMN_INFO};
private JPanel root;
@@ -138,7 +143,7 @@ final class BrowserSettingsPanel {
@SuppressWarnings("UnusedDeclaration")
private JComponent browsersTable;
- private ComboBox defaultBrowserComboBox;
+ private ComboBox defaultBrowserPolicyComboBox;
private TableModelEditor<ConfigurableWebBrowser> browsersEditor;
@@ -148,53 +153,55 @@ final class BrowserSettingsPanel {
alternativeBrowserPathField.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, APP_FILE_CHOOSER_DESCRIPTOR);
defaultBrowserPanel.setBorder(TitledSeparator.EMPTY_BORDER);
- //noinspection unchecked
- defaultBrowserComboBox.setModel(new EnumComboBoxModel<DefaultBrowser>(DefaultBrowser.class));
- if (BrowserLauncherAppless.canStartDefaultBrowser()) {
- defaultBrowserComboBox.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- boolean customPathEnabled = e.getItem() == DefaultBrowser.ALTERNATIVE;
- if (e.getStateChange() == ItemEvent.DESELECTED) {
- if (customPathEnabled) {
- customPathValue = alternativeBrowserPathField.getText();
- }
- }
- else if (e.getStateChange() == ItemEvent.SELECTED) {
- alternativeBrowserPathField.setEnabled(customPathEnabled);
- updateCustomPathTextFieldValue((DefaultBrowser)e.getItem());
- }
- }
- });
+ ArrayList<DefaultBrowserPolicy> defaultBrowserPolicies = new ArrayList<DefaultBrowserPolicy>();
+ if (BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy()) {
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.SYSTEM);
+ }
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.FIRST);
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.ALTERNATIVE);
- defaultBrowserComboBox.setRenderer(new ListCellRendererWrapper<DefaultBrowser>() {
- @Override
- public void customize(JList list, DefaultBrowser value, int index, boolean selected, boolean hasFocus) {
- String name;
- switch (value) {
- case SYSTEM:
- name = "System default";
- break;
- case FIRST:
- name = "First listed";
- break;
- case ALTERNATIVE:
- name = "Custom path";
- break;
- default:
- throw new IllegalStateException();
+ //noinspection Since15,unchecked
+ defaultBrowserPolicyComboBox.setModel(new ListComboBoxModel<DefaultBrowserPolicy>(defaultBrowserPolicies));
+ defaultBrowserPolicyComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ boolean customPathEnabled = e.getItem() == DefaultBrowserPolicy.ALTERNATIVE;
+ if (e.getStateChange() == ItemEvent.DESELECTED) {
+ if (customPathEnabled) {
+ customPathValue = alternativeBrowserPathField.getText();
}
+ }
+ else if (e.getStateChange() == ItemEvent.SELECTED) {
+ alternativeBrowserPathField.setEnabled(customPathEnabled);
+ updateCustomPathTextFieldValue((DefaultBrowserPolicy)e.getItem());
+ }
+ }
+ });
- setText(name);
+ defaultBrowserPolicyComboBox.setRenderer(new ListCellRendererWrapper<DefaultBrowserPolicy>() {
+ @Override
+ public void customize(JList list, DefaultBrowserPolicy value, int index, boolean selected, boolean hasFocus) {
+ String name;
+ switch (value) {
+ case SYSTEM:
+ name = "System default";
+ break;
+ case FIRST:
+ name = "First listed";
+ break;
+ case ALTERNATIVE:
+ name = "Custom path";
+ break;
+ default:
+ throw new IllegalStateException();
}
- });
- if (UIUtil.isUnderAquaLookAndFeel()) {
- defaultBrowserComboBox.setBorder(new EmptyBorder(3, 0, 0, 0));
+ setText(name);
}
- }
- else {
- defaultBrowserComboBox.setVisible(false);
+ });
+
+ if (UIUtil.isUnderAquaLookAndFeel()) {
+ defaultBrowserPolicyComboBox.setBorder(new EmptyBorder(3, 0, 0, 0));
}
clearExtractedFiles.addActionListener(new ActionListener() {
@@ -205,11 +212,11 @@ final class BrowserSettingsPanel {
});
}
- private void updateCustomPathTextFieldValue(DefaultBrowser browser) {
- if (browser == DefaultBrowser.ALTERNATIVE) {
+ private void updateCustomPathTextFieldValue(@NotNull DefaultBrowserPolicy browser) {
+ if (browser == DefaultBrowserPolicy.ALTERNATIVE) {
alternativeBrowserPathField.setText(customPathValue);
}
- else if (browser == DefaultBrowser.FIRST) {
+ else if (browser == DefaultBrowserPolicy.FIRST) {
setCustomPathToFirstListed();
}
else {
@@ -272,18 +279,18 @@ final class BrowserSettingsPanel {
.modelListener(new TableModelEditor.DataChangedListener<ConfigurableWebBrowser>() {
@Override
public void tableChanged(TableModelEvent event) {
- update(event.getFirstRow());
+ update();
}
@Override
public void dataChanged(@NotNull ColumnInfo<ConfigurableWebBrowser, ?> columnInfo, int rowIndex) {
- if (columnInfo == PATH_COLUMN_INFO) {
- update(rowIndex);
+ if (columnInfo == PATH_COLUMN_INFO || columnInfo == ACTIVE_COLUMN_INFO) {
+ update();
}
}
- private void update(int rowIndex) {
- if (rowIndex == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) {
+ private void update() {
+ if (getDefaultBrowser() == DefaultBrowserPolicy.FIRST) {
setCustomPathToFirstListed();
}
}
@@ -293,7 +300,15 @@ final class BrowserSettingsPanel {
private void setCustomPathToFirstListed() {
ListTableModel<ConfigurableWebBrowser> model = browsersEditor.getModel();
- alternativeBrowserPathField.setText(model.getRowCount() == 0 ? "" : model.getRowValue(0).getPath());
+ for (int i = 0, n = model.getRowCount(); i < n; i++) {
+ ConfigurableWebBrowser browser = model.getRowValue(i);
+ if (browser.isActive() && browser.getPath() != null) {
+ alternativeBrowserPathField.setText(browser.getPath());
+ return;
+ }
+ }
+
+ alternativeBrowserPathField.setText("");
}
@NotNull
@@ -305,12 +320,12 @@ final class BrowserSettingsPanel {
WebBrowserManager browserManager = WebBrowserManager.getInstance();
GeneralSettings generalSettings = GeneralSettings.getInstance();
- DefaultBrowser defaultBrowser = getDefaultBrowser();
- if (browserManager.getDefaultBrowserMode() != defaultBrowser || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
+ DefaultBrowserPolicy defaultBrowserPolicy = getDefaultBrowser();
+ if (browserManager.getDefaultBrowserPolicy() != defaultBrowserPolicy || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
return true;
}
- if (defaultBrowser == DefaultBrowser.ALTERNATIVE &&
+ if (defaultBrowserPolicy == DefaultBrowserPolicy.ALTERNATIVE &&
!Comparing.strEqual(generalSettings.getBrowserPath(), alternativeBrowserPathField.getText())) {
return true;
}
@@ -321,7 +336,7 @@ final class BrowserSettingsPanel {
public void apply() {
GeneralSettings settings = GeneralSettings.getInstance();
- settings.setUseDefaultBrowser(getDefaultBrowser() == DefaultBrowser.SYSTEM);
+ settings.setUseDefaultBrowser(getDefaultBrowser() == DefaultBrowserPolicy.SYSTEM);
if (alternativeBrowserPathField.isEnabled()) {
settings.setBrowserPath(alternativeBrowserPathField.getText());
@@ -330,26 +345,27 @@ final class BrowserSettingsPanel {
settings.setConfirmExtractFiles(confirmExtractFiles.isSelected());
WebBrowserManager browserManager = WebBrowserManager.getInstance();
- browserManager.defaultBrowser = getDefaultBrowser();
+ browserManager.defaultBrowserPolicy = getDefaultBrowser();
browserManager.setList(browsersEditor.apply());
}
- private DefaultBrowser getDefaultBrowser() {
- return (DefaultBrowser)defaultBrowserComboBox.getSelectedItem();
+ private DefaultBrowserPolicy getDefaultBrowser() {
+ return (DefaultBrowserPolicy)defaultBrowserPolicyComboBox.getSelectedItem();
}
public void reset() {
- GeneralSettings settings = GeneralSettings.getInstance();
-
- DefaultBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowserMode();
- defaultBrowserComboBox.setSelectedItem(defaultBrowser);
+ DefaultBrowserPolicy defaultBrowserPolicy = WebBrowserManager.getInstance().getDefaultBrowserPolicy();
+ DefaultBrowserPolicy effectiveDefaultBrowserPolicy = defaultBrowserPolicy == DefaultBrowserPolicy.SYSTEM && !BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy()
+ ? DefaultBrowserPolicy.ALTERNATIVE : defaultBrowserPolicy;
+ defaultBrowserPolicyComboBox.setSelectedItem(effectiveDefaultBrowserPolicy);
+ GeneralSettings settings = GeneralSettings.getInstance();
confirmExtractFiles.setSelected(settings.isConfirmExtractFiles());
browsersEditor.reset(WebBrowserManager.getInstance().getList());
customPathValue = settings.getBrowserPath();
- alternativeBrowserPathField.setEnabled(defaultBrowser == DefaultBrowser.ALTERNATIVE);
- updateCustomPathTextFieldValue(defaultBrowser);
+ alternativeBrowserPathField.setEnabled(effectiveDefaultBrowserPolicy == DefaultBrowserPolicy.ALTERNATIVE);
+ updateCustomPathTextFieldValue(effectiveDefaultBrowserPolicy);
}
public void selectBrowser(@NotNull WebBrowser browser) {
diff --git a/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java b/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java
index 11502b5119a9..9f48b35905ae 100644
--- a/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java
+++ b/xml/impl/src/com/intellij/ide/browsers/ConfigurableWebBrowser.java
@@ -56,7 +56,7 @@ final class ConfigurableWebBrowser extends WebBrowser {
@Override
public Icon getIcon() {
if (family == BrowserFamily.CHROME) {
- if (checkNameAndPath("Yandex")) {
+ if (WebBrowserManager.isYandexBrowser(this)) {
return AllIcons.Xml.Browsers.Yandex16;
}
else if (checkNameAndPath("Dartium") || checkNameAndPath("Chromium")) {
@@ -76,14 +76,7 @@ final class ConfigurableWebBrowser extends WebBrowser {
}
private boolean checkNameAndPath(@NotNull String what) {
- if (StringUtil.containsIgnoreCase(name, what)) {
- return true;
- }
- if (path != null) {
- int index = path.lastIndexOf('/');
- return index > 0 ? path.indexOf(what, index + 1) != -1 : path.contains(what);
- }
- return false;
+ return WebBrowserManager.checkNameAndPath(what, this);
}
@Nullable
diff --git a/xml/impl/src/com/intellij/ide/browsers/DefaultBrowserPolicy.java b/xml/impl/src/com/intellij/ide/browsers/DefaultBrowserPolicy.java
new file mode 100644
index 000000000000..4e1f0b2e0dc2
--- /dev/null
+++ b/xml/impl/src/com/intellij/ide/browsers/DefaultBrowserPolicy.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.ide.browsers;
+
+public enum DefaultBrowserPolicy {
+ SYSTEM, FIRST, ALTERNATIVE
+} \ No newline at end of file
diff --git a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
index ce51ee07eebc..0b2ba6cb18c1 100644
--- a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
+++ b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
@@ -17,10 +17,7 @@ package com.intellij.ide.browsers;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.Conditions;
-import com.intellij.openapi.util.JDOMUtil;
-import com.intellij.openapi.util.SimpleModificationTracker;
+import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
@@ -36,53 +33,75 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers
private static final Logger LOG = Logger.getInstance(WebBrowserManager.class);
// default standard browser ID must be constant across all IDE versions on all machines for all users
- private static final UUID DEFAULT_CHROME_ID = UUID.fromString("98CA6316-2F89-46D9-A9E5-FA9E2B0625B3");
+ private static final UUID PREDEFINED_CHROME_ID = UUID.fromString("98CA6316-2F89-46D9-A9E5-FA9E2B0625B3");
// public, but only internal use
- public static final UUID DEFAULT_FIREFOX_ID = UUID.fromString("A7BB68E0-33C0-4D6F-A81A-AAC1FDB870C8");
- private static final UUID DEFAULT_SAFARI_ID = UUID.fromString("E5120D43-2C3F-47EF-9F26-65E539E05186");
- private static final UUID DEFAULT_OPERA_ID = UUID.fromString("53E2F627-B1A7-4DFA-BFA7-5B83CC034776");
- private static final UUID DEFAULT_EXPLORER_ID = UUID.fromString("16BF23D4-93E0-4FFC-BFD6-CB13575177B0");
+ public static final UUID PREDEFINED_FIREFOX_ID = UUID.fromString("A7BB68E0-33C0-4D6F-A81A-AAC1FDB870C8");
+ private static final UUID PREDEFINED_SAFARI_ID = UUID.fromString("E5120D43-2C3F-47EF-9F26-65E539E05186");
+ 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 List<ConfigurableWebBrowser> PREDEFINED_BROWSERS = Arrays.asList(
+ new ConfigurableWebBrowser(PREDEFINED_CHROME_ID, BrowserFamily.CHROME),
+ new ConfigurableWebBrowser(PREDEFINED_FIREFOX_ID, BrowserFamily.FIREFOX),
+ 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)
+ );
private List<ConfigurableWebBrowser> browsers;
- DefaultBrowser defaultBrowser = DefaultBrowser.SYSTEM;
+ DefaultBrowserPolicy defaultBrowserPolicy = DefaultBrowserPolicy.SYSTEM;
public WebBrowserManager() {
- browsers = new ArrayList<ConfigurableWebBrowser>();
- browsers.add(new ConfigurableWebBrowser(DEFAULT_CHROME_ID, BrowserFamily.CHROME));
- browsers.add(new ConfigurableWebBrowser(DEFAULT_FIREFOX_ID, BrowserFamily.FIREFOX));
- browsers.add(new ConfigurableWebBrowser(DEFAULT_SAFARI_ID, BrowserFamily.SAFARI));
- browsers.add(new ConfigurableWebBrowser(DEFAULT_OPERA_ID, BrowserFamily.OPERA));
- browsers.add(new ConfigurableWebBrowser(DEFAULT_EXPLORER_ID, BrowserFamily.EXPLORER));
+ browsers = new ArrayList<ConfigurableWebBrowser>(PREDEFINED_BROWSERS);
}
public static WebBrowserManager getInstance() {
return ServiceManager.getService(WebBrowserManager.class);
}
- boolean isPredefinedBrowser(@NotNull ConfigurableWebBrowser browser) {
- UUID id = browser.getId();
- return id.equals(DEFAULT_CHROME_ID) ||
- id.equals(DEFAULT_FIREFOX_ID) ||
- id.equals(DEFAULT_SAFARI_ID) ||
- id.equals(DEFAULT_OPERA_ID) ||
- id.equals(DEFAULT_EXPLORER_ID);
+ public static boolean isYandexBrowser(@NotNull WebBrowser browser) {
+ return browser.getFamily().equals(BrowserFamily.CHROME) && (browser.getId().equals(PREDEFINED_YANDEX_ID) || checkNameAndPath("Yandex", browser));
+ }
+
+ public static boolean isDartium(@NotNull WebBrowser browser) {
+ return browser.getFamily().equals(BrowserFamily.CHROME) && checkNameAndPath("Dartium", browser);
+ }
+
+ static boolean checkNameAndPath(@NotNull String what, @NotNull WebBrowser browser) {
+ if (StringUtil.containsIgnoreCase(browser.getName(), what)) {
+ return true;
+ }
+ String path = browser.getPath();
+ if (path != null) {
+ int index = path.lastIndexOf('/');
+ return index > 0 ? path.indexOf(what, index + 1) != -1 : path.contains(what);
+ }
+ return false;
}
- public enum DefaultBrowser {
- SYSTEM, FIRST, ALTERNATIVE
+ boolean isPredefinedBrowser(@NotNull ConfigurableWebBrowser browser) {
+ UUID id = browser.getId();
+ for (ConfigurableWebBrowser predefinedBrowser : PREDEFINED_BROWSERS) {
+ if (id.equals(predefinedBrowser.getId())) {
+ return true;
+ }
+ }
+ return false;
}
@NotNull
- public DefaultBrowser getDefaultBrowserMode() {
- return defaultBrowser;
+ public DefaultBrowserPolicy getDefaultBrowserPolicy() {
+ return defaultBrowserPolicy;
}
@Override
public Element getState() {
Element state = new Element("state");
- if (defaultBrowser != DefaultBrowser.SYSTEM) {
- state.setAttribute("default", defaultBrowser.name().toLowerCase(Locale.ENGLISH));
+ if (defaultBrowserPolicy != DefaultBrowserPolicy.SYSTEM) {
+ state.setAttribute("default", defaultBrowserPolicy.name().toLowerCase(Locale.ENGLISH));
}
for (ConfigurableWebBrowser browser : browsers) {
@@ -137,19 +156,19 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers
UUID id;
switch (family) {
case CHROME:
- id = DEFAULT_CHROME_ID;
+ id = PREDEFINED_CHROME_ID;
break;
case EXPLORER:
- id = DEFAULT_EXPLORER_ID;
+ id = PREDEFINED_EXPLORER_ID;
break;
case FIREFOX:
- id = DEFAULT_FIREFOX_ID;
+ id = PREDEFINED_FIREFOX_ID;
break;
case OPERA:
- id = DEFAULT_OPERA_ID;
+ id = PREDEFINED_OPERA_ID;
break;
case SAFARI:
- id = DEFAULT_SAFARI_ID;
+ id = PREDEFINED_SAFARI_ID;
break;
default:
@@ -180,7 +199,7 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers
String defaultValue = element.getAttributeValue("default");
if (!StringUtil.isEmpty(defaultValue)) {
try {
- defaultBrowser = DefaultBrowser.valueOf(defaultValue.toUpperCase(Locale.ENGLISH));
+ defaultBrowserPolicy = DefaultBrowserPolicy.valueOf(defaultValue.toUpperCase(Locale.ENGLISH));
}
catch (IllegalArgumentException e) {
LOG.warn(e);
@@ -225,6 +244,18 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers
specificSettings));
}
+ // add removed/new predefined browsers
+ int n = list.size();
+ pb: for (ConfigurableWebBrowser predefinedBrowser : PREDEFINED_BROWSERS) {
+ //noinspection ForLoopReplaceableByForEach
+ for (int i = 0; i < n; i++) {
+ if (list.get(i).getId().equals(predefinedBrowser.getId())) {
+ continue pb;
+ }
+ }
+ list.add(predefinedBrowser);
+ }
+
setList(list);
}
@@ -349,9 +380,9 @@ public class WebBrowserManager extends SimpleModificationTracker implements Pers
}
@Nullable
- public WebBrowser getDefaultBrowser() {
+ public WebBrowser getFirstActiveBrowser() {
for (ConfigurableWebBrowser browser : browsers) {
- if (browser.isActive()) {
+ if (browser.isActive() && browser.getPath() != null) {
return browser;
}
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
index 8ec2a2e55b67..e3bf3b5e6f6f 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
@@ -151,7 +151,7 @@ public abstract class BaseOpenInBrowserAction extends DumbAwareAction {
boolean applicable = false;
WebBrowserUrlProvider provider = null;
if (request != null) {
- applicable = HtmlUtil.isHtmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile);
+ applicable = WebBrowserServiceImpl.isHtmlOrXmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile);
if (!applicable) {
provider = WebBrowserServiceImpl.getProvider(request);
applicable = provider != null;
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
index 45cf021bbef8..1ead1b6faeb4 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
@@ -16,10 +16,7 @@
package com.intellij.ide.browsers.actions;
import com.intellij.ide.GeneralSettings;
-import com.intellij.ide.browsers.OpenInBrowserRequest;
-import com.intellij.ide.browsers.WebBrowser;
-import com.intellij.ide.browsers.WebBrowserManager;
-import com.intellij.ide.browsers.WebBrowserUrlProvider;
+import com.intellij.ide.browsers.*;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
@@ -68,10 +65,11 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
@Nullable
private static WebBrowser findUsingBrowser() {
WebBrowserManager browserManager = WebBrowserManager.getInstance();
- if (browserManager.getDefaultBrowserMode() == WebBrowserManager.DefaultBrowser.FIRST) {
- return browserManager.getDefaultBrowser();
+ DefaultBrowserPolicy defaultBrowserPolicy = browserManager.getDefaultBrowserPolicy();
+ if (defaultBrowserPolicy == DefaultBrowserPolicy.FIRST || (defaultBrowserPolicy == DefaultBrowserPolicy.SYSTEM && !BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy())) {
+ return browserManager.getFirstActiveBrowser();
}
- else if (browserManager.getDefaultBrowserMode() == WebBrowserManager.DefaultBrowser.ALTERNATIVE) {
+ else if (defaultBrowserPolicy == DefaultBrowserPolicy.ALTERNATIVE) {
String path = GeneralSettings.getInstance().getBrowserPath();
if (!StringUtil.isEmpty(path)) {
WebBrowser browser = browserManager.findBrowserById(path);
diff --git a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
index 5cd056f869d9..3d0451d71b3d 100644
--- a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
+++ b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
@@ -18,6 +18,10 @@ package com.intellij.ide.browsers.impl;
import com.intellij.ide.browsers.OpenInBrowserRequest;
import com.intellij.ide.browsers.WebBrowserService;
import com.intellij.ide.browsers.WebBrowserUrlProvider;
+import com.intellij.lang.Language;
+import com.intellij.lang.html.HTMLLanguage;
+import com.intellij.lang.xhtml.XHTMLLanguage;
+import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.impl.http.HttpVirtualFile;
@@ -34,6 +38,11 @@ import java.util.Collection;
import java.util.Collections;
public class WebBrowserServiceImpl extends WebBrowserService {
+ public static boolean isHtmlOrXmlFile(@NotNull PsiElement element) {
+ Language language = element.getLanguage();
+ return language == HTMLLanguage.INSTANCE || language == XHTMLLanguage.INSTANCE || language == XMLLanguage.INSTANCE;
+ }
+
@NotNull
@Override
public Collection<Url> getUrlsToOpen(@NotNull OpenInBrowserRequest request, boolean preferLocalUrl) throws WebBrowserUrlProvider.BrowserException {
@@ -42,7 +51,7 @@ public class WebBrowserServiceImpl extends WebBrowserService {
return Collections.singleton(Urls.newFromVirtualFile(virtualFile));
}
- if (!preferLocalUrl || !HtmlUtil.isHtmlFile(request.getFile())) {
+ if (!preferLocalUrl || !isHtmlOrXmlFile(request.getFile())) {
WebBrowserUrlProvider provider = getProvider(request);
if (provider != null) {
if (request.getResult() != null) {