blob: ee64b463ee22aca1b68e6875e124425c9e43743f (
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<!doctype html>
<!--
This test uses data only, and thus does not require fake media devices.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RTCPeerConnection Data-Only Connection Test with Promises</title>
</head>
<body>
<div id="log"></div>
<h2>iceConnectionState info</h2>
<div id="stateinfo">
</div>
<!-- These files are in place when executing on W3C. -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="text/javascript">
var test = async_test('Can set up a basic WebRTC call with only data using promises.');
var gFirstConnection = null;
var gSecondConnection = null;
var onIceCandidateToFirst = test.step_func(function(event) {
gSecondConnection.addIceCandidate(event.candidate);
});
var onIceCandidateToSecond = test.step_func(function(event) {
gFirstConnection.addIceCandidate(event.candidate);
});
var onIceConnectionStateChange = test.step_func(function(event) {
assert_equals(event.type, 'iceconnectionstatechange');
var stateinfo = document.getElementById('stateinfo');
stateinfo.innerHTML = 'First: ' + gFirstConnection.iceConnectionState
+ '<br>Second: ' + gSecondConnection.iceConnectionState;
// Note: All these combinations are legal states indicating that the
// call has connected. All browsers should end up in completed/completed,
// but as of this moment, we've chosen to terminate the test early.
// TODO: Revise test to ensure completed/completed is reached.
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
});
// This function starts the test.
test.step(function() {
gFirstConnection = new RTCPeerConnection(null);
test.add_cleanup(() => gFirstConnection.close());
gFirstConnection.onicecandidate = onIceCandidateToFirst;
gFirstConnection.oniceconnectionstatechange = onIceConnectionStateChange;
gSecondConnection = new RTCPeerConnection(null);
test.add_cleanup(() => gSecondConnection.close());
gSecondConnection.onicecandidate = onIceCandidateToSecond;
gSecondConnection.oniceconnectionstatechange = onIceConnectionStateChange;
// The createDataChannel is necessary and sufficient to make
// sure the ICE connection be attempted.
gFirstConnection.createDataChannel('channel');
var atStep = 'Create offer';
gFirstConnection.createOffer()
.then(function(offer) {
atStep = 'Set local description at first';
return gFirstConnection.setLocalDescription(offer);
})
.then(function() {
atStep = 'Set remote description at second';
return gSecondConnection.setRemoteDescription(
gFirstConnection.localDescription);
})
.then(function() {
atStep = 'Create answer';
return gSecondConnection.createAnswer();
})
.then(function(answer) {
atStep = 'Set local description at second';
return gSecondConnection.setLocalDescription(answer);
})
.then(function() {
atStep = 'Set remote description at first';
return gFirstConnection.setRemoteDescription(
gSecondConnection.localDescription);
})
.then(function() {
atStep = 'Negotiation completed';
})
.catch(test.step_func(function(e) {
assert_unreached('Error ' + e.name + ': ' + e.message +
' happened at step ' + atStep);
}));
});
</script>
</body>
</html>
|