<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Testing ICE candidate filtering when using data channel</title>
    <script src="../../resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
promise_test(async (test) => {
    let pc = new RTCPeerConnection();
    pc.createDataChannel('sendDataChannel');
    let offer = await pc.createOffer();
    pc.setLocalDescription(offer);
    // This test is a bit racy, we are trying to have network process crash between the time it receives a monitor start request and the time it answers that request.
    if (window.testRunner && testRunner.terminateNetworkProcess) {
       setTimeout(() => testRunner.terminateNetworkProcess(), 0);

        await new Promise(resolve => setTimeout(resolve, 50));

        let hasResponse = false;
        while (!hasResponse) {
            const response = await fetch(".").then(r => r, () => { return { status : -1 } });
            hasResponse = response.status !== -1;
        }
    }

    let pc2 = new RTCPeerConnection();
    pc2.createDataChannel('sendDataChannel');

    const iceCandidatePromise = new Promise((resolve, reject)  => {
        pc2.onicecandidate = resolve;
        setTimeout(() => reject('ice candidate event time out'), 10000);
    });

    offer = await pc2.createOffer();
    pc2.setLocalDescription(offer);
    return iceCandidatePromise;
}, "Gathering ICE candidates from a data channel while network process is crashing");
    </script>
  </body>
</html>
