зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1629565: Test that we do not transition to "gathering" on a simple reoffer. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D72236
This commit is contained in:
Родитель
606eb34163
Коммит
0e6e49d74d
|
@ -84,10 +84,53 @@
|
||||||
assert_unreached(`Unhandled rejection ${err.name}: ${err.message}`)));
|
assert_unreached(`Unhandled rejection ${err.name}: ${err.message}`)));
|
||||||
}, 'iceGatheringState should eventually become complete after setLocalDescription');
|
}, 'iceGatheringState should eventually become complete after setLocalDescription');
|
||||||
|
|
||||||
|
const iceGatheringStateTransitions = async (pc, ...states) => {
|
||||||
|
for (const state of states) {
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
pc.addEventListener('icegatheringstatechange', () => {
|
||||||
|
if (pc.iceGatheringState == state) {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject(`Unexpected gathering state: ${pc.iceGatheringState}, was expecting ${state}`);
|
||||||
|
}
|
||||||
|
}, {once: true});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const initialOfferAnswer = async (pc1, pc2, offerOptions) => {
|
||||||
|
await pc1.setLocalDescription(
|
||||||
|
await pc1.createOffer(offerOptions));
|
||||||
|
const pc1Transitions = iceGatheringStateTransitions(pc1, 'gathering', 'complete');
|
||||||
|
await pc2.setRemoteDescription(pc1.localDescription);
|
||||||
|
await pc2.setLocalDescription(await pc2.createAnswer());
|
||||||
|
const pc2Transitions = iceGatheringStateTransitions(pc2, 'gathering', 'complete');
|
||||||
|
await pc1.setRemoteDescription(pc2.localDescription);
|
||||||
|
|
||||||
|
await pc1Transitions;
|
||||||
|
await pc2Transitions;
|
||||||
|
};
|
||||||
|
|
||||||
const expectNoMoreGatheringStateChanges = async (t, pc) => {
|
const expectNoMoreGatheringStateChanges = async (t, pc) => {
|
||||||
pc.onicegatheringstatechange = t.step_func(() => assert_unreached('Should not get an icegatheringstatechange right now!'));
|
pc.onicegatheringstatechange = t.step_func(() => assert_unreached('Should not get an icegatheringstatechange right now!'));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const pc1 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc1.close());
|
||||||
|
const pc2 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc2.close());
|
||||||
|
await initialOfferAnswer(pc1, pc2, {offerToReceiveAudio:true});
|
||||||
|
|
||||||
|
expectNoMoreGatheringStateChanges(t, pc1);
|
||||||
|
expectNoMoreGatheringStateChanges(t, pc2);
|
||||||
|
|
||||||
|
await pc1.setLocalDescription(await pc1.createOffer());
|
||||||
|
await pc2.setLocalDescription(await pc2.createOffer());
|
||||||
|
|
||||||
|
await new Promise(r => t.step_timeout(r, 500));
|
||||||
|
}, 'setLocalDescription(reoffer) with no new transports should not cause iceGatheringState to change');
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
const pc1 = new RTCPeerConnection();
|
const pc1 = new RTCPeerConnection();
|
||||||
t.add_cleanup(() => pc1.close());
|
t.add_cleanup(() => pc1.close());
|
||||||
|
|
Загрузка…
Ссылка в новой задаче