Skip to content

Commit a64a19f

Browse files
author
aohana
committed
added ResourceTiming parser in CDP Network
1 parent 565006f commit a64a19f

File tree

3 files changed

+150
-18
lines changed

3 files changed

+150
-18
lines changed

java/client/src/org/openqa/selenium/devtools/network/model/ResourceTiming.java

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717

1818
package org.openqa.selenium.devtools.network.model;
1919

20+
import static java.util.Objects.requireNonNull;
21+
22+
import org.openqa.selenium.json.JsonInput;
23+
2024
/**
2125
* Timing information for the request
2226
*/
@@ -54,6 +58,32 @@ public class ResourceTiming {
5458

5559
private Double receiveHeadersEnd;
5660

61+
public ResourceTiming(Double requestTime, Double proxyStart, Double proxyEnd,
62+
Double dnsStart, Double dnsEnd, Double connectStart,
63+
Double connectEnd, Double sslStart, Double sslEnd,
64+
Double workerStart, Double workerReady, Double sendStart,
65+
Double sendEnd, Double pushStart, Double pushEnd,
66+
Double receiveHeadersEnd) {
67+
this.requestTime = requireNonNull(requestTime, "'requestTime' is required for ResourceTiming");
68+
this.proxyStart = requireNonNull(proxyStart, "'proxyStart' is required for ResourceTiming");
69+
this.proxyEnd = requireNonNull(proxyEnd, "'proxyEnd' is required for ResourceTiming");
70+
this.dnsStart = requireNonNull(dnsStart, "'dnsStart' is required for ResourceTiming");
71+
this.dnsEnd = requireNonNull(dnsEnd, "'dnsEnd' is required for ResourceTiming");
72+
this.connectStart =
73+
requireNonNull(connectStart, "'connectStart' is required for ResourceTiming");
74+
this.connectEnd = requireNonNull(connectEnd, "'connectEnd' is required for ResourceTiming");
75+
this.sslStart = requireNonNull(sslStart, "'sslStart' is required for ResourceTiming");
76+
this.sslEnd = requireNonNull(sslEnd, "'sslEnd' is required for ResourceTiming");
77+
this.workerStart = workerStart;
78+
this.workerReady = workerReady;
79+
this.sendStart = requireNonNull(sendStart, "'sendStart' is required for ResourceTiming");
80+
this.sendEnd = requireNonNull(sendEnd, "'sendEnd' is required for ResourceTiming");
81+
this.pushStart = pushStart;
82+
this.pushEnd = pushEnd;
83+
this.receiveHeadersEnd =
84+
requireNonNull(receiveHeadersEnd, "'receiveHeadersEnd' is required for ResourceTiming");
85+
}
86+
5787
/**
5888
* Timing's requestTime is a baseline in seconds, while the other numbers are ticks in
5989
* milliseconds relatively to this requestTime.
@@ -219,4 +249,101 @@ public Double getReceiveHeadersEnd() {
219249
public void setReceiveHeadersEnd(Double receiveHeadersEnd) {
220250
this.receiveHeadersEnd = receiveHeadersEnd;
221251
}
252+
253+
private static ResourceTiming fromJson(JsonInput input) {
254+
255+
input.beginObject();
256+
257+
Double requestTime = null;
258+
259+
Double proxyStart = null;
260+
261+
Double proxyEnd = null;
262+
263+
Double dnsStart = null;
264+
265+
Double dnsEnd = null;
266+
267+
Double connectStart = null;
268+
269+
Double connectEnd = null;
270+
271+
Double sslStart = null;
272+
273+
Double sslEnd = null;
274+
275+
Double workerStart = null;
276+
277+
Double workerReady = null;
278+
279+
Double sendStart = null;
280+
281+
Double sendEnd = null;
282+
283+
Double pushStart = null;
284+
285+
Double pushEnd = null;
286+
287+
Double receiveHeadersEnd = null;
288+
289+
while (input.hasNext()) {
290+
switch (input.nextName()) {
291+
case "requestTime":
292+
requestTime = input.read(Double.class);
293+
break;
294+
case "proxyStart":
295+
proxyStart = input.read(Double.class);
296+
break;
297+
case "proxyEnd":
298+
proxyEnd = input.read(Double.class);
299+
break;
300+
case "dnsStart":
301+
dnsStart = input.read(Double.class);
302+
break;
303+
case "dnsEnd":
304+
dnsEnd = input.read(Double.class);
305+
break;
306+
case "connectStart":
307+
connectStart = input.read(Double.class);
308+
break;
309+
case "connectEnd":
310+
connectEnd = input.read(Double.class);
311+
break;
312+
case "sslStart":
313+
sslStart = input.read(Double.class);
314+
break;
315+
case "sslEnd":
316+
sslEnd = input.read(Double.class);
317+
break;
318+
case "workerStart":
319+
workerStart = input.read(Double.class);
320+
break;
321+
case "workerReady":
322+
workerReady = input.read(Double.class);
323+
break;
324+
case "sendStart":
325+
sendStart = input.read(Double.class);
326+
break;
327+
case "sendEnd":
328+
sendEnd = input.read(Double.class);
329+
break;
330+
case "pushStart":
331+
pushStart = input.read(Double.class);
332+
break;
333+
case "pushEnd":
334+
pushEnd = input.read(Double.class);
335+
break;
336+
case "receiveHeadersEnd":
337+
receiveHeadersEnd = input.read(Double.class);
338+
break;
339+
default:
340+
input.skipValue();
341+
break;
342+
}
343+
}
344+
345+
return new ResourceTiming(requestTime, proxyStart, proxyEnd, dnsStart, dnsEnd, connectStart,
346+
connectEnd, sslStart, sslEnd, workerStart, workerReady, sendStart,
347+
sendEnd, pushStart, pushEnd, receiveHeadersEnd);
348+
}
222349
}

java/client/src/org/openqa/selenium/devtools/network/model/Response.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,9 @@ private static Response fromJson(JsonInput input) {
466466
case "securityDetails":
467467
securityDetails = input.read(SecurityDetails.class);
468468
break;
469+
case "timing":
470+
timing = input.read(ResourceTiming.class);
471+
break;
469472
default:
470473
input.skipValue();
471474
break;

java/client/test/org/openqa/selenium/devtools/ChromeDevToolsNetworkTest.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,6 @@
1818
package org.openqa.selenium.devtools;
1919

2020

21-
import com.google.common.collect.ImmutableList;
22-
import com.google.common.collect.ImmutableMap;
23-
import org.junit.Assert;
24-
import org.junit.Test;
25-
import org.openqa.selenium.By;
26-
import org.openqa.selenium.Cookie;
27-
import org.openqa.selenium.devtools.network.model.BlockedReason;
28-
import org.openqa.selenium.devtools.network.model.ConnectionType;
29-
import org.openqa.selenium.devtools.network.model.InterceptionStage;
30-
import org.openqa.selenium.devtools.network.model.RequestId;
31-
import org.openqa.selenium.devtools.network.model.RequestPattern;
32-
import org.openqa.selenium.devtools.network.model.ResourceType;
33-
import org.openqa.selenium.devtools.network.model.ResponseBody;
34-
import org.openqa.selenium.remote.http.HttpMethod;
35-
36-
import java.util.List;
37-
import java.util.Optional;
38-
3921
import static org.junit.Assert.assertEquals;
4022
import static org.junit.Assert.assertTrue;
4123
import static org.openqa.selenium.devtools.network.Network.clearBrowserCache;
@@ -75,6 +57,25 @@
7557
import static org.openqa.selenium.devtools.network.Network.webSocketFrameReceived;
7658
import static org.openqa.selenium.devtools.network.Network.webSocketFrameSent;
7759

60+
import com.google.common.collect.ImmutableList;
61+
import com.google.common.collect.ImmutableMap;
62+
63+
import org.junit.Assert;
64+
import org.junit.Test;
65+
import org.openqa.selenium.By;
66+
import org.openqa.selenium.Cookie;
67+
import org.openqa.selenium.devtools.network.model.BlockedReason;
68+
import org.openqa.selenium.devtools.network.model.ConnectionType;
69+
import org.openqa.selenium.devtools.network.model.InterceptionStage;
70+
import org.openqa.selenium.devtools.network.model.RequestId;
71+
import org.openqa.selenium.devtools.network.model.RequestPattern;
72+
import org.openqa.selenium.devtools.network.model.ResourceType;
73+
import org.openqa.selenium.devtools.network.model.ResponseBody;
74+
import org.openqa.selenium.remote.http.HttpMethod;
75+
76+
import java.util.List;
77+
import java.util.Optional;
78+
7879
public class ChromeDevToolsNetworkTest extends DevToolsTestBase {
7980

8081
@Test
@@ -181,6 +182,7 @@ public void verifySearchInResponseBody() {
181182

182183
devTools.addListener(responseReceived(), responseReceived -> {
183184
Assert.assertNotNull(responseReceived);
185+
Assert.assertNotNull(responseReceived.getResponse().getTiming());
184186
requestIds[0] = responseReceived.getRequestId();
185187
});
186188

0 commit comments

Comments
 (0)