<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>

function fetchAndAbort() {
    let abortController = new AbortController;
    fetch("resources/data.json", { signal: abortController.signal });
    abortController.abort();
}

function test()
{
    let suite = ProtocolTest.createAsyncSuite("Network.InterceptAbortedRequest");

    InspectorProtocol.sendCommand("Network.enable");
    InspectorProtocol.sendCommand("Network.setInterceptionEnabled", {enabled: true});
    InspectorProtocol.sendCommand("Network.addInterception", {
        url: "resources/data\.json",
        stage: /* Network.NetworkStage */ "request",
        isRegex: true,
    });

    suite.addTestCase({
        name: "Network.InterceptAbortedRequest.Response",
        description: "Tests request interception that fulfills aborted request",
        async test() {
            ProtocolTest.log("Triggering load...");
            let [requestInterceptedEvent] = await Promise.all([
                InspectorProtocol.awaitEvent({event: "Network.requestIntercepted"}),
                ProtocolTest.evaluateInPage(`fetchAndAbort()`),
            ]);

            ProtocolTest.log("Intercepting with response...");
            await ProtocolTest.expectException(async () => {
                await InspectorProtocol.awaitCommand({
                    method: "Network.interceptRequestWithResponse",
                    params: {
                        requestId: requestInterceptedEvent.params.requestId,
                        content: "FAIL",
                        base64Encoded: false,
                        mimeType: "text/plain",
                        status: 200,
                        statusText: "OK",
                        headers: {},
                    },
                });
            });
        },
    });

    suite.addTestCase({
        name: "Network.InterceptAbortedRequest.Error",
        description: "Tests request interception that rejects aborted request",
        async test() {
            ProtocolTest.log("Triggering load...");
            let [requestInterceptedEvent] = await Promise.all([
                InspectorProtocol.awaitEvent({event: "Network.requestIntercepted"}),
                ProtocolTest.evaluateInPage(`fetchAndAbort()`),
            ]);

            ProtocolTest.log("Intercepting with error...");
            await ProtocolTest.expectException(async () => {
                await InspectorProtocol.awaitCommand({
                    method: "Network.interceptRequestWithError",
                    params: {
                        requestId: requestInterceptedEvent.params.requestId,
                        errorType: /* Network.ResourceErrorType */ "General",
                    },
                });
            });
        },
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test request interception of the aborted request.</p>
</body>
</html>
