Index: content/test/data/media/peerconnection-call.html |
diff --git a/content/test/data/media/peerconnection-call.html b/content/test/data/media/peerconnection-call.html |
index 814f5f18c9cfaa3c42d824a9b13638f0f2c551b5..6a9219d980097c0674d2607a88cb17db923eceb4 100644 |
--- a/content/test/data/media/peerconnection-call.html |
+++ b/content/test/data/media/peerconnection-call.html |
@@ -27,10 +27,13 @@ |
} |
// First calls without streams on any connections, and then adds a stream |
- // to peer connection 1 which gets sent to peer connection 2. |
- function makeEmptyCallThenAddOneStreamAndRenegotiate(constraints) { |
+ // to peer connection 1 which gets sent to peer connection 2. We must wait |
+ // for the first negotiation to complete before starting the second one, which |
+ // is why we wait until the connection is stable before re-negotiating. |
+ function callEmptyThenAddOneStreamAndRenegotiate(constraints) { |
createConnections(null); |
negotiate(); |
+ waitForConnectionToStabilize(gFirstConnection); |
navigator.webkitGetUserMedia(constraints, |
addStreamToTheFirstConnectionAndNegotiate, printGetUserMediaError); |
// Only the first connection is sending here. |
@@ -52,7 +55,7 @@ |
function callWithDataOnly() { |
createConnections({optional:[{RtpDataChannels: true}]}); |
setupDataChannel(); |
- gFirstConnection.createOffer(onOfferCreated); |
+ negotiate(); |
} |
// Test call with audio, video and a data channel. |
@@ -70,7 +73,7 @@ |
function callWithDataAndLaterAddMedia() { |
createConnections({optional:[{RtpDataChannels: true}]}); |
setupDataChannel(); |
- gFirstConnection.createOffer(onOfferCreated); |
+ negotiate(); |
// Set an event handler for when the data channel has been closed. |
setAllEventsOccuredHandler(function() { |
@@ -208,7 +211,7 @@ |
firstDataChannel.onmessage = function(event) { |
expectEquals(event.data, sendDataString); |
firstDataChannel.close(); |
- gFirstConnection.createOffer(onOfferCreated); |
+ negotiate(); |
} |
// When |firstDataChannel| transition to closed state, the test pass. |
@@ -291,6 +294,11 @@ |
} |
function negotiate() { |
+ // Not stable = negotiation is ongoing. The behavior of re-negotiating while |
+ // a negotiation is ongoing is more or less undefined, so avoid this. |
+ if (gFirstConnection.signalingState != 'stable') |
+ throw 'You can only negotiate when the connection is stable!'; |
+ |
gFirstConnection.createOffer(onOfferCreated); |
} |