Skip to content

Commit

Permalink
Support Grid custom capability mutators
Browse files Browse the repository at this point in the history
Custom capability mutators(with ordering priority) can be placed as part of Grid setup and will be used.

Fixes SeleniumHQ#13628
  • Loading branch information
Purus committed Mar 10, 2024
1 parent 124a3cc commit c6ea843
Showing 1 changed file with 21 additions and 7 deletions.
Expand Up @@ -22,25 +22,28 @@

import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.ServiceLoader;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

public class CapabilitiesMutatorService {
Capabilities stereotype;
private List<CapabilityMutator> customMutators;
private final List<CapabilityMutator> customMutators = new CopyOnWriteArrayList<>();

private static final Comparator<CapabilityMutator> MUTATOR_COMPARATOR =
Comparator.comparingInt(CapabilityMutator::getOrder).reversed();

public CapabilitiesMutatorService(Capabilities stereotype) {
this.stereotype = stereotype;

ServiceLoader<CapabilityMutator> loader = ServiceLoader.load(CapabilityMutator.class);

customMutators = StreamSupport.stream(loader.spliterator(), false)
.sorted(Comparator.comparingInt(CapabilityMutator::getOrder).reversed())
.collect(Collectors.toList());
loadAllCustomMutators();
}

public Capabilities getMutatedCapabilities(Capabilities desiredCapabilities) {
Objects.requireNonNull(desiredCapabilities, "desiredCapabilities must not be null");

// Always apply this default capability mutator before applying any other mutator
SessionCapabilitiesMutator defaultMutator = new SessionCapabilitiesMutator(stereotype);
Capabilities newCapability = defaultMutator.apply(desiredCapabilities);
Expand All @@ -52,9 +55,20 @@ public Capabilities getMutatedCapabilities(Capabilities desiredCapabilities) {
return newCapability;
}

private void loadAllCustomMutators() {
ServiceLoader<CapabilityMutator> loader = ServiceLoader.load(CapabilityMutator.class);

List<CapabilityMutator> allMutators = StreamSupport.stream(loader.spliterator(), false)
.sorted(MUTATOR_COMPARATOR)
.collect(Collectors.toList());

customMutators.addAll(allMutators);
}

@VisibleForTesting
void setCustomMutators(List<CapabilityMutator> mutators) {
customMutators = mutators;
customMutators.clear();
customMutators.addAll(mutators);
}

@VisibleForTesting
Expand Down

0 comments on commit c6ea843

Please sign in to comment.