Skip to content

Commit adb251b

Browse files
committed
Allow the new session pipeline capabilities to be amended
1 parent 5d0e994 commit adb251b

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ private static Map<String, Object> toMap(Object obj) {
399399
.collect(ImmutableMap.toImmutableMap(e -> String.valueOf(e.getKey()), Map.Entry::getValue));
400400
}
401401

402-
public Stream<Capabilities> stream() throws IOException {
402+
public Stream<ImmutableCapabilities> stream() throws IOException {
403403
Stream<? extends Map<String, Object>> mapStream;
404404

405405
if (getDownstreamDialects().contains(Dialect.W3C)) {

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

+22-6
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,21 @@
1010
import java.util.List;
1111
import java.util.Objects;
1212
import java.util.Optional;
13+
import java.util.function.Function;
1314

1415
public class NewSessionPipeline {
1516

1617
private final List<SessionFactory> factories;
1718
private final SessionFactory fallback;
19+
private final List<Function<ImmutableCapabilities, ImmutableCapabilities>> mutators;
1820

19-
private NewSessionPipeline(List<SessionFactory> factories, SessionFactory fallback) {
21+
private NewSessionPipeline(
22+
List<SessionFactory> factories,
23+
SessionFactory fallback,
24+
List<Function<ImmutableCapabilities, ImmutableCapabilities>> mutators) {
2025
this.factories = factories;
2126
this.fallback = fallback;
27+
this.mutators = mutators;
2228
}
2329

2430
public static Builder builder() {
@@ -27,6 +33,12 @@ public static Builder builder() {
2733

2834
public ActiveSession createNewSession(NewSessionPayload payload) throws IOException {
2935
return payload.stream()
36+
.map(caps -> {
37+
for (Function<ImmutableCapabilities, ImmutableCapabilities> mutator : mutators) {
38+
caps = mutator.apply(caps);
39+
}
40+
return caps;
41+
})
3042
.map(caps -> factories.stream()
3143
.map(factory -> factory.apply(payload.getDownstreamDialects(), caps))
3244
.filter(Optional::isPresent)
@@ -45,26 +57,30 @@ public ActiveSession createNewSession(NewSessionPayload payload) throws IOExcept
4557
public static class Builder {
4658
private List<SessionFactory> factories = new LinkedList<>();
4759
private SessionFactory fallback = (dialects, caps) -> Optional.empty();
60+
private List<Function<ImmutableCapabilities, ImmutableCapabilities>> mutators = new LinkedList<>();
4861

4962
private Builder() {
5063
// Private class
5164
}
5265

5366
public Builder add(SessionFactory factory) {
5467
factories.add(Objects.requireNonNull(factory, "Factory must not be null"));
55-
// for (SessionFactory fac : more) {
56-
// factories.add(Objects.requireNonNull(fac, "Factory must not be null"));
57-
// }
5868
return this;
5969
}
6070

6171
public Builder fallback(SessionFactory factory) {
62-
fallback = factory;
72+
fallback = Objects.requireNonNull(factory, "Fallback must not be null");
73+
return this;
74+
}
75+
76+
public Builder addCapabilitiesMutator(
77+
Function<ImmutableCapabilities, ImmutableCapabilities> mutator) {
78+
mutators.add(Objects.requireNonNull(mutator, "Mutator must not be null"));
6379
return this;
6480
}
6581

6682
public NewSessionPipeline create() {
67-
return new NewSessionPipeline(ImmutableList.copyOf(factories), fallback);
83+
return new NewSessionPipeline(ImmutableList.copyOf(factories), fallback, mutators);
6884
}
6985
}
7086
}

0 commit comments

Comments
 (0)