summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html')
-rw-r--r--testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html59
1 files changed, 50 insertions, 9 deletions
diff --git a/testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html b/testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html
index e39b985bef..a28275047e 100644
--- a/testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html
+++ b/testing/web-platform/tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html
@@ -13,8 +13,7 @@ promise_test(async t => {
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
pc1.addTransceiver('audio', { direction: 'recvonly' });
- await initialOfferAnswerWithIceGatheringStateTransitions(
- pc1, pc2);
+ await initialOfferAnswerWithIceGatheringStateTransitions(pc1, pc2);
await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
await iceGatheringStateTransitions(pc1, 'gathering', 'complete');
expectNoMoreGatheringStateChanges(t, pc1);
@@ -23,31 +22,73 @@ promise_test(async t => {
}, 'rolling back an ICE restart when gathering is complete should not result in iceGatheringState changes');
promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc2.close());
+ pc1.createDataChannel('test');
+ await initialOfferAnswerWithIceGatheringStateTransitions(pc1, pc2);
+ await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
+ await iceGatheringStateTransitions(pc1, 'gathering', 'complete');
+ expectNoMoreGatheringStateChanges(t, pc1);
+ await pc1.setLocalDescription({type: 'rollback'});
+ await new Promise(r => t.step_timeout(r, 1000));
+}, 'rolling back an ICE restart when gathering is complete should not result in iceGatheringState changes (DataChannel case)');
+
+promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
pc.addTransceiver('audio', { direction: 'recvonly' });
- await pc.setLocalDescription(
- await pc.createOffer());
+ await pc.setLocalDescription();
await iceGatheringStateTransitions(pc, 'gathering', 'complete');
+ const backToNew = iceGatheringStateTransitions(pc, 'new');
await pc.setLocalDescription({type: 'rollback'});
- await iceGatheringStateTransitions(pc, 'new');
+ await backToNew;
}, 'setLocalDescription(rollback) of original offer should cause iceGatheringState to reach "new" when starting in "complete"');
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
+ pc.createDataChannel('test');
+ await pc.setLocalDescription();
+ await iceGatheringStateTransitions(pc, 'gathering', 'complete');
+ const backToNew = iceGatheringStateTransitions(pc, 'new');
+ await pc.setLocalDescription({type: 'rollback'});
+ await backToNew;
+}, 'setLocalDescription(rollback) of original offer should cause iceGatheringState to reach "new" when starting in "complete" (DataChannel case)');
+
+promise_test(async t => {
+ const pc = new RTCPeerConnection();
+ t.add_cleanup(() => pc.close());
pc.addTransceiver('audio', { direction: 'recvonly' });
- await pc.setLocalDescription(
- await pc.createOffer());
+ await pc.setLocalDescription();
await iceGatheringStateTransitions(pc, 'gathering');
+ const backToNew = Promise.allSettled([
+ iceGatheringStateTransitions(pc, 'new'),
+ iceGatheringStateTransitions(pc, 'complete', 'new')]);
await pc.setLocalDescription({type: 'rollback'});
// We might go directly to 'new', or we might go to 'complete' first,
// depending on timing. Allow either.
- const results = await Promise.allSettled([
+ const results = await backToNew;
+ assert_true(results.some(result => result.status == 'fulfilled'),
+ 'ICE gathering state should go back to "new", possibly through "complete"');
+}, 'setLocalDescription(rollback) of original offer should cause iceGatheringState to reach "new" when starting in "gathering"');
+
+promise_test(async t => {
+ const pc = new RTCPeerConnection();
+ t.add_cleanup(() => pc.close());
+ pc.createDataChannel('test');
+ await pc.setLocalDescription();
+ await iceGatheringStateTransitions(pc, 'gathering');
+ const backToNew = Promise.allSettled([
iceGatheringStateTransitions(pc, 'new'),
iceGatheringStateTransitions(pc, 'complete', 'new')]);
+ await pc.setLocalDescription({type: 'rollback'});
+ // We might go directly to 'new', or we might go to 'complete' first,
+ // depending on timing. Allow either.
+ const results = await backToNew;
assert_true(results.some(result => result.status == 'fulfilled'),
'ICE gathering state should go back to "new", possibly through "complete"');
-}, 'setLocalDescription(rollback) of original offer should cause iceGatheringState to reach "new" when starting in "gathering"');
+}, 'setLocalDescription(rollback) of original offer should cause iceGatheringState to reach "new" when starting in "gathering" (DataChannel case)');
</script>