1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 | package Torello.Browser;
import static Torello.Java.C.BYELLOW;
import static Torello.Java.C.RESET;
import Torello.Java.JSON.ReadJSON;
import Torello.JavaDoc.LinkJavaSource;
import Torello.Browser.WebSocketSender;
import NeoVisionaries.WebSockets.WebSocketException;
import java.io.IOException;
import java.util.stream.Stream;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.Objects;
import javax.json.JsonObject;
/**
* A Connection to a Browser, rather than an individual Page within the Browser.
* <EMBED CLASS='external-html' DATA-FILE-ID=PAGE_CONN>
*/
@Torello.JavaDoc.CSSLinks(FileNames="BrowserAndPageConn.css")
public class BrowserConn
{
// ********************************************************************************************
// ********************************************************************************************
// PUBLIC FIELDS
// ********************************************************************************************
// ********************************************************************************************
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_BROWSER> */
public final String browser;
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_PROT_VER> */
public final String protocolVersion;
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_USER_AGENT> */
public final String userAgent;
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_V8_VERSION> */
public final String v8Version;
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_WEBKIT_VER> */
public final String webkitVersion;
/** <EMBED CLASS='external-html' DATA-FILE-ID=BC_WS_DEBUG_URL> */
public final String webSocketDebuggerUrl;
// ********************************************************************************************
// ********************************************************************************************
// Constructors
// ********************************************************************************************
// ********************************************************************************************
public BrowserConn(
final String browser,
final String protocolVersion,
final String userAgent,
final String v8Version,
final String webkitVersion,
final String webSocketDebuggerUrl
)
{
Objects.requireNonNull(webSocketDebuggerUrl, "webSocketDebuggerUrl is null");
this.browser = browser;
this.protocolVersion = protocolVersion;
this.userAgent = userAgent;
this.v8Version = v8Version;
this.webkitVersion = webkitVersion;
this.webSocketDebuggerUrl = webSocketDebuggerUrl;
}
public BrowserConn(final JsonObject jo)
{
this.browser = ReadJSON.getString(jo, "Browser", false, true);
this.protocolVersion = ReadJSON.getString(jo, "Protocol-Version", false, true);
this.userAgent = ReadJSON.getString(jo, "User-Agent", false, true);
this.v8Version = ReadJSON.getString(jo, "V8-Version", true, false);
this.webkitVersion = ReadJSON.getString(jo, "WebKit-Version", true, false);
this.webSocketDebuggerUrl =
ReadJSON.getString(jo, "webSocketDebuggerUrl", false, true);
}
// ********************************************************************************************
// ********************************************************************************************
// Build Methods
// ********************************************************************************************
// ********************************************************************************************
/**
* Creates a {@link WebSocketSender} connected to the {@link #webSocketDebuggerUrl} for this
* tab. This URL is the endpoint that speaks the Chrome DevTools Protocol (CDP).
*
* @param eventHandler <EMBED CLASS='external-html' DATA-FILE-ID=PCBC_EVENT_H>
* @param rdpErrorHandler <EMBED CLASS='external-html' DATA-FILE-ID=PCBC_RDP_ERR_H>
* @param browserErrorHandler <EMBED CLASS='external-html' DATA-FILE-ID=PCBC_BROWSER_ERR_H>
*/
public WebSocketSender createSender(
final Consumer<BrowserEvent> eventHandler,
final Consumer<RDPError> rdpErrorHandler,
final Consumer<BrowserError> browserErrorHandler
)
throws IOException, WebSocketException
{
return new WebSocketSender
(this.webSocketDebuggerUrl, eventHandler, rdpErrorHandler, browserErrorHandler);
}
/**
* Retrieves the WebSocketDebugger URL for the main browser instance.
* This queries {@code /json/version} and parses the result into an instance.
*
* @param port The DevTools port Chrome is listening on (default is 9222 if {@code null}).
* @param quiet If {@code false}, debug output is printed to the console.
* @return A {@code BrowserConn} instance representing the browser-level connection.
*/
@LinkJavaSource(handle="BCBuilder")
public static BrowserConn getBrowserConn(Integer port, boolean quiet)
{ return BCBuilder.getBrowserConn(port, quiet); }
// ********************************************************************************************
// ********************************************************************************************
// java.lang.Object Methods
// ********************************************************************************************
// ********************************************************************************************
@LinkJavaSource(handle="BCHelper", name="toString")
public String toString() { return BCHelper.toString(this); }
@LinkJavaSource(handle="BCHelper", name="hashCode")
public int hashCode() { return BCHelper.hashCode(this); }
@LinkJavaSource(handle="BCHelper", name="equals")
public boolean equals(Object o) { return BCHelper.equals(this, o); }
@LinkJavaSource(handle="BCHelper", name="clone")
public BrowserConn clone() { return BCHelper.clone(this); }
}
|