<!doctype html>
<meta charset=utf-8>
<title>RTCDataChannel.prototype.send for blobs</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
promise_test(async t => {
    [channel1, channel2] = await createDataChannelPair();

    let done;
    const promise = new Promise(resolve => done = resolve);

    const data1 = new Blob(['blob']);
    const data1Size = data1.size;
    const data2 = new ArrayBuffer(8);
    const data2Size = data2.byteLength;

    let firstMessage = true;

    channel2.binaryType = "arraybuffer";
    channel2.onmessage = t.step_func((e) => {
        if (firstMessage) {
            assert_equals(e.data.byteLength, data1Size);
            firstMessage = false;
            return;
        }
        assert_equals(e.data.byteLength, data2Size);
        done();
    });

    channel1.send(data1);
    channel1.send(data2);

    return promise;
}, 'Data channel should send data following the order of the send call');
</script>
