Bug 1332826: return error when calling addIceCandidate before setRemoteDescription. r?jib draft
authorNils Ohlmeier [:drno] <drno@ohlmeier.org>
Sat, 21 Jan 2017 01:12:46 -0800
changeset 465919 f2d94c988b9b02d5e72b7dc1fb23017dc5315741
parent 465918 b772206648a0a52b7cfe812a8258ddc84151985e
child 543280 7b3351400b4af751490ac1516b4c950bec56256f
push id42745
push userdrno@ohlmeier.org
push dateWed, 25 Jan 2017 01:02:51 +0000
reviewersjib
bugs1332826
milestone54.0a1
Bug 1332826: return error when calling addIceCandidate before setRemoteDescription. r?jib MozReview-Commit-ID: LYeDkr5G7Tx
dom/media/PeerConnection.js
--- a/dom/media/PeerConnection.js
+++ b/dom/media/PeerConnection.js
@@ -1032,21 +1032,28 @@ class RTCPeerConnection {
 
   async _addIceCandidate({ candidate, sdpMid, sdpMLineIndex }) {
     this._checkClosed();
     if (sdpMid === null && sdpMLineIndex === null) {
       throw new this._win.DOMException(
           "Invalid candidate (both sdpMid and sdpMLineIndex are null).",
           "TypeError");
     }
-    return await this._chain(() => new Promise((resolve, reject) => {
-      this._onAddIceCandidateSuccess = resolve;
-      this._onAddIceCandidateError = reject;
-      this._impl.addIceCandidate(candidate, sdpMid || "", sdpMLineIndex);
-    }));
+    return await this._chain(() => {
+      if (!this.remoteDescription) {
+        throw new this._win.DOMException(
+            "setRemoteDescription needs to called before addIceCandidate",
+            "InvalidStateError");
+      }
+      return new Promise((resolve, reject) => {
+        this._onAddIceCandidateSuccess = resolve;
+        this._onAddIceCandidateError = reject;
+        this._impl.addIceCandidate(candidate, sdpMid || "", sdpMLineIndex);
+      });
+    });
   }
 
   addStream(stream) {
     stream.getTracks().forEach(track => this.addTrack(track, stream));
   }
 
   addTrack(track, stream) {
     if (stream.currentTime === undefined) {