summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html
blob: 8c12a50942c15bb220ed85e8cd3e5817f0fb4df1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE HTML>
<html>
<head>
  <script type="application/javascript" src="pc.js"></script>
</head>
<body>
<pre id="test">
<script type="application/javascript">
  createHTML({
    bug: "1264479",
    title: "PeerConnection verify current and pending descriptions in legacy mode"
  });

  // Mostly covered by WPT tests these days, except for in our legacy mode

  const isSimilarDescription = (d1, d2, msg) => {
    isnot(d1, d2, msg + " — not the same object");
    is(d1.type, d2.type, msg + " — but same type");
    is(d1.sdp, d2.sdp, msg + " — and same sdp");
  }

  runNetworkTest(async () => {
    await SpecialPowers.pushPrefEnv({
      set: [['media.peerconnection.description.legacy.enabled', true]]
    });

    const pc1 = new RTCPeerConnection();
    const pc2 = new RTCPeerConnection();

    const add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
    pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
    pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());

    const v1 = createMediaElement('video', 'v1');
    const v2 = createMediaElement('video', 'v2');

    const stream = await navigator.mediaDevices.getUserMedia({
      video: true, audio: true
    });
    v1.srcObject = stream;
    for (const track of stream.getTracks()) {
      pc1.addTrack(track, stream);
    }
    await pc1.setLocalDescription();
    is(pc1.currentLocalDescription, null, "pc1 currentLocalDescription is null");
    ok(pc1.pendingLocalDescription, "pc1 pendingLocalDescription is set");
    ok(pc1.localDescription, "pc1 localDescription is set");
    isSimilarDescription(pc1.pendingLocalDescription, pc1.pendingLocalDescription, "pendingLocalDescription");
    isSimilarDescription(pc1.localDescription, pc1.localDescription, "localDescription");
    isSimilarDescription(pc1.localDescription, pc1.pendingLocalDescription, "local and pending");

    await pc2.setRemoteDescription(pc1.localDescription);
    is(pc2.currentRemoteDescription, null, "pc2 currentRemoteDescription is null");
    ok(pc2.pendingRemoteDescription, "pc2 pendingRemoteDescription is set");
    ok(pc2.remoteDescription, "pc2 remoteDescription is set");
    isSimilarDescription(pc2.pendingRemoteDescription, pc2.pendingRemoteDescription, "pendingRemoteDescription");
    isSimilarDescription(pc2.remoteDescription, pc2.remoteDescription, "remoteDescription");
    isSimilarDescription(pc2.remoteDescription, pc2.pendingRemoteDescription, "remote and pending");

    await pc2.setLocalDescription();
    ok(pc2.currentLocalDescription, "pc2 currentLocalDescription is set");
    is(pc2.pendingLocalDescription, null, "pc2 pendingLocalDescription is null");
    ok(pc2.localDescription, "pc2 localDescription is set");
    isSimilarDescription(pc2.currentLocalDescription, pc2.currentLocalDescription, "currentLocalDescription");
    isSimilarDescription(pc2.localDescription, pc2.localDescription, "localDescription");
    isSimilarDescription(pc2.localDescription, pc2.currentLocalDescription, "local and current");

    await pc1.setRemoteDescription(pc2.localDescription);
    ok(pc1.currentRemoteDescription, "pc1 currentRemoteDescription is set");
    is(pc1.pendingRemoteDescription, null, "pc1 pendingRemoteDescription is null");
    ok(pc1.remoteDescription, "pc1 remoteDescription is set");
    isSimilarDescription(pc1.currentRemoteDescription, pc1.currentRemoteDescription, "currentRemoteDescription");
    isSimilarDescription(pc1.remoteDescription, pc1.remoteDescription, "remoteDescription");
    isSimilarDescription(pc1.remoteDescription, pc1.currentRemoteDescription, "remote and current");
  });
</script>
</pre>
</body>
</html>