blob: 4a56f5f983212f12bc47f61ccf9b74220fb00d79 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../resources/inspector-test.js"></script>
<script>
function triggerBeaconWith204Response() {
navigator.sendBeacon("resources/beacon.php?status=204");
}
function triggerBeaconWith404Response() {
navigator.sendBeacon("resources/beacon.php?status=404");
}
function triggerBeaconWithData() {
navigator.sendBeacon("resources/beacon.php", "SENDING-DATA");
}
// ----
function test()
{
let suite = InspectorTest.createAsyncSuite("Resource.Type.Beacon");
function addTestCase({name, description, expression, resourceHandler}) {
suite.addTestCase({
name, description,
test(resolve, reject) {
let resource = null;
InspectorTest.evaluateInPage(expression);
WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded)
.then((event) => {
resource = event.data.resource;
alwaysTest(resource);
if (resource.isLoading()) {
return Promise.race([
resource.awaitEvent(WI.Resource.Event.LoadingDidFinish),
resource.awaitEvent(WI.Resource.Event.LoadingDidFail),
]);
}
})
.then(() => { resourceHandler(resource); })
.then(resolve, reject);
}
});
}
function alwaysTest(resource) {
InspectorTest.expectEqual(resource.type, WI.Resource.Type.Beacon, "Resource should be Beacon type.");
InspectorTest.expectEqual(resource.requestMethod, "POST", "Resource should be a POST request.");
}
addTestCase({
name: "Resource.Type.Beacon.204",
description: "Send a beacon that gets a 204 response.",
expression: "triggerBeaconWith204Response()",
resourceHandler(resource) {
InspectorTest.expectEqual(resource.statusCode, 204, "Resource should have a 204 response.");
InspectorTest.expectThat(!resource.requestData, "Resource should not have request data.");
}
});
addTestCase({
name: "Resource.Type.Beacon.404",
description: "Send a beacon that gets a 404 response.",
expression: "triggerBeaconWith404Response()",
resourceHandler(resource) {
InspectorTest.expectEqual(resource.statusCode, 404, "Resource should have a 404 response.");
InspectorTest.expectThat(!resource.requestData, "Resource should not have request data.");
}
});
addTestCase({
name: "Resource.Type.Beacon.WithData",
description: "Send a beacon that gets a 404 response.",
expression: "triggerBeaconWithData()",
resourceHandler(resource) {
InspectorTest.expectEqual(resource.statusCode, 200, "Resource should have a 200 response.");
InspectorTest.expectEqual(resource.requestData, "SENDING-DATA", "Resource should have 'SENDING-DATA' request data.");
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for Resource.Type.Beacon.</p>
</body>
</html>