blob: f5a59cbb0725db930784bcb3ccbb916f29b4cf41 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../resources/inspector-test.js"></script>
<script src="resources/resource-size-test.js"></script>
<script>
function triggerNetworkLoadWithRequestData() {
let url = "resources/data.json?" + Math.random();
let headerString512Bytes = "12345678";
for (i = 0; i < 6; ++i)
headerString512Bytes += headerString512Bytes;
fetch(url, {
method: "POST",
headers: {
"X-Header-1": headerString512Bytes, // 512 + 10 + ":" + "\r\n" whitespace
"X-Header-2": headerString512Bytes, // 512 + 10 + ":" + "\r\n" whitespace
},
body: headerString512Bytes + headerString512Bytes + "abc" // (512 + 512 + 3) = 1027.
}).then((response) => {
return response.text();
}).then(() => {
TestPage.dispatchEventToFrontend("LoadComplete");
});
}
function test()
{
let suite = InspectorTest.createAsyncSuite("Resource.Size.Network");
addResourceSizeTest(suite, {
name: "Resource.Size.Network.text",
description: "Sizes of a plain text resource",
url: "resources/lorem.txt?" + Math.random(),
statusCode: 200,
compressed: false,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.text.empty",
description: "Sizes of an empty text resource",
url: "resources/empty.txt?" + Math.random(),
statusCode: 200,
compressed: false,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.text.gzipped",
description: "Sizes of a gzipped text resource",
url: "resources/gzipped-lorem.php?" + Math.random(),
statusCode: 200,
compressed: true,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.text.gzipped.no-content-length",
description: "Sizes of a gzipped text resource without a content-length attribute.",
url: "resources/gzipped-lorem-no-content-length.php?" + Math.random(),
statusCode: 200,
compressed: true,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.image",
description: "Sizes of an image resource",
url: "/resources/square100.png?" + Math.random(),
statusCode: 200,
compressed: false,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.404",
description: "Sizes of a 404 response.",
url: "resources/404.php?" + Math.random(),
statusCode: 404,
compressed: false,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
});
addResourceSizeTest(suite, {
name: "Resource.Size.Network.requestData",
description: "Sizes of a resource with request data",
statusCode: 200,
compressed: false,
responseSource: WI.Resource.ResponseSource.Network,
headers: true,
resourceLoader() {
InspectorTest.evaluateInPage(`triggerNetworkLoadWithRequestData()`);
return Promise.all([
WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded),
InspectorTest.awaitEvent("LoadComplete"),
]).then(([resourceWasAddedEvent, loadCompleteEvent]) => {
return resourceWasAddedEvent.data.resource;
});
},
extraChecks(resource) {
let minimumRequestHeadersSize = 512 + 10 + 512 + 10 + 16;
InspectorTest.expectGreaterThan(resource.requestHeadersTransferSize, minimumRequestHeadersSize, `requestHeadersTransferSize should be > ${minimumRequestHeadersSize} bytes.`);
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test for Resource size values (transfer size, decoded size, header size, request and response) for resources served over the network.</p>
</body>
</html>