| 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>
|
|
|