Skip to content

Commit 61a970e

Browse files
committed
cp
1 parent f0ec7d9 commit 61a970e

File tree

1 file changed

+37
-17
lines changed

1 file changed

+37
-17
lines changed

java/server/src/org/openqa/selenium/remote/server/ActiveSessionFactory.java

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Map;
2222
import java.util.Objects;
2323
import java.util.ServiceLoader;
24+
import java.util.function.Function;
2425
import java.util.function.Predicate;
2526
import java.util.logging.Logger;
2627
import java.util.regex.Pattern;
@@ -34,12 +35,11 @@ public class ActiveSessionFactory {
3435

3536
private final static Logger LOG = Logger.getLogger(ActiveSessionFactory.class.getName());
3637

37-
private final static Predicate<String> CLASS_EXISTS = name -> {
38+
private final static Function<String, Class<?>> CLASS_EXISTS = name -> {
3839
try {
39-
Class.forName(name);
40-
return true;
40+
return Class.forName(name);
4141
} catch (ClassNotFoundException cnfe) {
42-
return false;
42+
return null;
4343
}
4444
};
4545

@@ -48,6 +48,16 @@ public class ActiveSessionFactory {
4848
public ActiveSessionFactory() {
4949
Map<Predicate<Capabilities>, SessionFactory> builder = new LinkedHashMap<>();
5050

51+
bind(
52+
builder,
53+
"org.openqa.selenium.firefox.FirefoxDriver",
54+
caps -> {
55+
Object marionette = caps.getCapability("marionette");
56+
57+
return marionette instanceof Boolean && !(Boolean) marionette;
58+
},
59+
firefox());
60+
5161
ImmutableMap.<Predicate<Capabilities>, String>builder()
5262
.put(browserName(chrome()), "org.openqa.selenium.chrome.ChromeDriverService")
5363
.put(containsKey("chromeOptions"), "org.openqa.selenium.chrome.ChromeDriverService")
@@ -64,21 +74,11 @@ public ActiveSessionFactory() {
6474
.put(containsKey(Pattern.compile("^safari\\..*")), "org.openqa.selenium.safari.SafariDriverService")
6575
.build()
6676
.entrySet().stream()
67-
.filter(e -> CLASS_EXISTS.test(e.getValue()))
77+
.filter(e -> CLASS_EXISTS.apply(e.getValue()) != null)
6878
.forEach(e -> builder.put(e.getKey(), new ServicedSession.Factory(e.getValue())));
6979

7080
// Attempt to bind the htmlunitdriver if it's present.
71-
try {
72-
Class<? extends WebDriver>
73-
clazz =
74-
Class.forName("org.openqa.selenium.htmlunit.HtmlUnitDriver")
75-
.asSubclass(WebDriver.class);
76-
builder.put(
77-
browserName(htmlUnit()),
78-
new InMemorySession.Factory(new DefaultDriverProvider(htmlUnit(), clazz)));
79-
} catch (ReflectiveOperationException ignored) {
80-
// Just carry on. Everything is fine.
81-
}
81+
bind(builder, "org.openqa.selenium.htmlunit.HtmlUnitDriver", browserName(htmlUnit()), htmlUnit());
8282

8383
// Allow user-defined factories to override default ones
8484
StreamSupport.stream(ServiceLoader.load(DriverProvider.class).spliterator(), false)
@@ -92,7 +92,7 @@ public ActiveSessionFactory() {
9292
"org.openqa.selenium.edge.EdgeDriverService",
9393
"org.openqa.selenium.ie.InternetExplorerDriverService",
9494
"org.openqa.selenium.safari.SafariDriverService")
95-
.filter(CLASS_EXISTS)
95+
.filter(name -> CLASS_EXISTS.apply(name) != null)
9696
.findFirst()
9797
.ifPresent(
9898
serviceName -> {
@@ -103,6 +103,26 @@ public ActiveSessionFactory() {
103103
this.factories = ImmutableMap.copyOf(builder);
104104
}
105105

106+
private void bind(
107+
Map<Predicate<Capabilities>, SessionFactory> builder,
108+
String className,
109+
Predicate<Capabilities> predicate,
110+
Capabilities capabilities) {
111+
try {
112+
Class<?> clazz = CLASS_EXISTS.apply(className);
113+
if (clazz == null) {
114+
return;
115+
}
116+
117+
Class<? extends WebDriver> driverClass = clazz.asSubclass(WebDriver.class);
118+
builder.put(
119+
predicate,
120+
new InMemorySession.Factory(new DefaultDriverProvider(capabilities, driverClass)));
121+
} catch (ClassCastException ignored) {
122+
// Just carry on. Everything is fine.
123+
}
124+
}
125+
106126
private static Predicate<Capabilities> browserName(Capabilities caps) {
107127
return toCompare -> caps.getBrowserName().equals(toCompare.getBrowserName());
108128
}

0 commit comments

Comments
 (0)