35
35
import org .openqa .selenium .remote .server .ActiveSessions ;
36
36
import org .openqa .selenium .remote .server .CommandHandler ;
37
37
import org .openqa .selenium .remote .server .NewSessionPayload ;
38
+ import org .openqa .selenium .remote .server .NewSessionPipeline ;
39
+ import org .openqa .selenium .remote .server .ServicedSession ;
40
+ import org .openqa .selenium .remote .server .SessionFactory ;
38
41
import org .openqa .selenium .remote .server .log .LoggingManager ;
42
+ import org .openqa .selenium .remote .service .DriverService ;
39
43
40
44
import java .io .IOException ;
41
45
import java .io .InputStreamReader ;
42
46
import java .io .Reader ;
43
- import java .util .Objects ;
47
+ import java .util .Optional ;
44
48
import java .util .logging .Level ;
49
+ import java .util .stream .Stream ;
45
50
46
51
public class BeginSession implements CommandHandler {
47
52
48
- private final ActiveSessionFactory sessionFactory ;
53
+ private final NewSessionPipeline pipeline ;
49
54
private final ActiveSessions allSessions ;
50
55
51
56
public BeginSession (ActiveSessions allSessions ) {
57
+ SessionFactory fallback = Stream .of (
58
+ "org.openqa.selenium.chrome.ChromeDriverService" ,
59
+ "org.openqa.selenium.firefox.GeckoDriverService" ,
60
+ "org.openqa.selenium.edge.EdgeDriverService" ,
61
+ "org.openqa.selenium.ie.InternetExplorerDriverService" ,
62
+ "org.openqa.selenium.safari.SafariDriverService" )
63
+ .filter (name -> {
64
+ try {
65
+ Class .forName (name ).asSubclass (DriverService .class );
66
+ return true ;
67
+ } catch (ReflectiveOperationException e ) {
68
+ return false ;
69
+ }
70
+ })
71
+ .findFirst ()
72
+ .map (serviceName -> (SessionFactory ) new ServicedSession .Factory (serviceName ))
73
+ .orElse ((dialects , caps ) -> Optional .empty ());
74
+
52
75
this .allSessions = allSessions ;
53
- this .sessionFactory = new ActiveSessionFactory ();
76
+ this .pipeline = NewSessionPipeline .builder ()
77
+ .add (new ActiveSessionFactory ())
78
+ .fallback (fallback )
79
+ .create ();
54
80
}
55
81
56
82
@ Override
@@ -70,19 +96,7 @@ public void execute(HttpRequest req, HttpResponse resp) throws IOException {
70
96
req .consumeContentStream (),
71
97
req .getContentEncoding ());
72
98
NewSessionPayload payload = new NewSessionPayload (contentLength , reader )) {
73
- session = payload .stream ()
74
- .map (caps -> {
75
- try {
76
- return sessionFactory .createSession (payload .getDownstreamDialects (), caps );
77
- } catch (SessionNotCreatedException e ) {
78
- // Do nothing. We'll complain at the end.
79
- return null ;
80
- }
81
- })
82
- .filter (Objects ::nonNull )
83
- .findFirst ()
84
- .orElseThrow (
85
- () -> new SessionNotCreatedException ("Unable to create session: " + payload ));
99
+ session = pipeline .createNewSession (payload );
86
100
allSessions .put (session );
87
101
}
88
102
0 commit comments