Index: third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network-data-length.html |
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network-data-length.html b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network-data-length.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..76baf8c9ea955c48f8ada47c7d53d797bf0e0f33 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network-data-length.html |
@@ -0,0 +1,136 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../inspector-protocol/inspector-protocol-test.js"></script> |
+<script> |
+function test() |
+{ |
+ // When chunk encoded the last chunk will always be 5 bytes "0\r\n\r\n" and |
+ // we do not receive a dataReceived event and instead it's in loadingFinished event. |
+ const HTTP_CLOSING_CHUNK_SIZE = 5; |
+ |
+ |
+ InspectorTest.eventHandler["Network.requestWillBeSent"] = onRequestWillBeSent; |
+ InspectorTest.eventHandler["Network.responseReceived"] = onResponseReceived; |
+ InspectorTest.eventHandler["Network.loadingFinished"] = onLoadingFinished; |
+ InspectorTest.eventHandler["Network.dataReceived"] = onDataReceived; |
+ |
+ var requestsMap = new Map(); |
+ var pendingRequests = 0; |
+ |
+ function enableNetwork() |
+ { |
+ InspectorTest.log("Test started"); |
+ InspectorTest.sendCommand("Network.enable", {}, didEnableNetwork); |
+ } |
+ |
+ function didEnableNetwork(messageObject) |
+ { |
+ if (messageObject.error) { |
+ InspectorTest.log("FAIL: Couldn't enable network agent" + messageObject.error.message); |
+ InspectorTest.completeTest(); |
+ return; |
+ } |
+ InspectorTest.log("Network agent enabled"); |
+ sendRequest("/inspector-protocol/resources/data-xfer-resource.php?" + |
+ "redirect=1"); |
+ sendRequest("/inspector-protocol/resources/data-xfer-resource.php?" + |
+ "cached=1"); |
+ sendRequest("/inspector-protocol/resources/data-xfer-resource.php?" + |
+ "size=4&" + |
+ "flush_header_with_x_bytes=1&" + |
+ "wait_after_headers_packet=25&" + |
+ "flush_every=1&" + |
+ "wait_every_x_bytes=1&" + |
+ "wait_duration_every_x_bytes=25"); |
+ sendRequest("/inspector-protocol/resources/data-xfer-resource.php?" + |
+ "size=4&" + |
+ "flush_header_with_x_bytes=1&" + |
+ "wait_after_headers_packet=25&" + |
+ "flush_every=1&" + |
+ "wait_every_x_bytes=1&" + |
+ "wait_duration_every_x_bytes=25"); |
+ } |
+ |
+ function onRequestWillBeSent(event) |
+ { |
+ var params = event.params; |
+ if (requestsMap.has(params.requestId)) { |
+ // is redirect. |
+ var request = requestsMap.get(params.requestId); |
+ request.reportedTotalSize += params.redirectResponse.encodedDataLength; |
+ request.redirected = true; |
+ // This is to store it, but not reuse it. |
+ requestsMap.set(Symbol(params.requestId), request); |
+ } |
+ requestsMap.set(params.requestId, { |
+ url: params.request.url, |
+ isChunked: null, |
+ isH2: null, |
+ headersSize: 0, |
+ receivedDataSize: 0, |
+ reportedTotalSize: 0, |
+ redirected: false |
+ }); |
+ } |
+ |
+ function onResponseReceived(event) |
+ { |
+ var params = event.params; |
+ var isH2 = params.response.protocol === "h2"; |
+ var request = requestsMap.get(params.requestId); |
+ request.isChunked = isH2 || (params.response.headers["Transfer-Encoding"] === "chunked"); |
+ request.isH2 = isH2; |
+ request.headersSize = params.response.encodedDataLength; |
+ } |
+ |
+ function onDataReceived(event) |
+ { |
+ var params = event.params; |
+ var request = requestsMap.get(params.requestId); |
+ request.receivedDataSize += params.encodedDataLength; |
+ } |
+ |
+ function onLoadingFinished(event) |
+ { |
+ var params = event.params; |
+ var request = requestsMap.get(params.requestId); |
+ request.reportedTotalSize += params.encodedDataLength; |
+ pendingRequests--; |
+ if (pendingRequests <= 0) { |
+ printResults(); |
+ InspectorTest.completeTest(); |
+ } |
+ } |
+ |
+ function sendRequest(url) |
+ { |
+ expression = "fetch('" + url + "')"; |
+ InspectorTest.sendCommand( "Runtime.evaluate", { "expression": expression } ); |
+ pendingRequests++; |
+ } |
+ |
+ function printResults() |
+ { |
+ var requests = Array.from(requestsMap.values()); |
+ requests.sort( (a, b) => a.url < b.url ? 1 : -1 ); |
+ InspectorTest.log(""); |
+ for (var request of requests) { |
+ InspectorTest.log("url: " + request.url); |
+ InspectorTest.log(" isChunked: " + request.isChunked); |
+ InspectorTest.log(" isH2: " + request.isH2); |
+ InspectorTest.log(" redirected: " + request.redirected); |
+ InspectorTest.log(" headersSize: " + request.headersSize); |
+ InspectorTest.log(" receivedDataSize: " + request.receivedDataSize); |
+ InspectorTest.log(" reportedTotalSize: " + request.reportedTotalSize); |
+ InspectorTest.log(""); |
+ } |
+ } |
+ |
+ enableNetwork(); |
+} |
+</script> |
+</head> |
+<body onload="runTest();"> |
+<p>Ensures that data and header length sent from protocol is proper sizes</p> |
+</body> |