Commit d0376dda authored by Nils Ohlmeier [:drno]'s avatar Nils Ohlmeier [:drno]
Browse files

Bug 1456417: made MLineIndex nullable. r=bwc,smaug

Differential Revision: https://phabricator.services.mozilla.com/D10807

--HG--
extra : moz-landing-system : lando
parent 2344e26c
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -1192,22 +1192,17 @@ class RTCPeerConnection {

  // TODO: Implement processing for end-of-candidates (bug 1318167)
  addIceCandidate(cand, onSucc, onErr) {
    if (cand === null) {
      throw new this._win.DOMException(
        "Empty candidate can not be added.",
        "TypeError");
    }
    return this._auto(onSucc, onErr, () => cand && this._addIceCandidate(cand));
  }

  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 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;
@@ -1713,7 +1708,7 @@ class PeerConnectionObserver {
    const reasonName = [
      "",
      "InternalError",
      "InvalidCandidateError",
      "InternalError",
      "InvalidParameterError",
      "InvalidStateError",
      "InvalidSessionDescriptionError",
@@ -1721,6 +1716,8 @@ class PeerConnectionObserver {
      "InternalError",
      "IncompatibleMediaStreamTrackError",
      "InternalError",
      "TypeError",
      "OperationError",
    ];
    let name = reasonName[Math.min(code, reasonName.length - 1)];
    return new this._dompc._win.DOMException(message, name);
+3 −1
Original line number Diff line number Diff line
@@ -52,5 +52,7 @@ interface IPeerConnection : nsISupports
  const unsigned long kIncompatibleSessionDescription   = 6;
  const unsigned long kIncompatibleMediaStreamTrack     = 8;
  const unsigned long kInternalError                    = 9;
  const unsigned long kMaxErrorType                     = 9; // Same as final error
  const unsigned long kTypeError                        = 10;
  const unsigned long kOperationError                   = 11;
  const unsigned long kMaxErrorType                     = 11; // Same as final error
};
+0 −1
Original line number Diff line number Diff line
@@ -104,7 +104,6 @@ skip-if = toolkit == 'android' # no screenshare or windowshare on android
[test_getUserMedia_trackCloneCleanup.html]
[test_getUserMedia_trackEnded.html]
[test_getUserMedia_peerIdentity.html]
[test_peerConnection_addIceCandidate.html]
[test_peerConnection_addtrack_removetrack_events.html]
skip-if = android_version == '18' # android(Bug 1189784, timeouts on 4.3 emulator)
[test_peerConnection_audioCodecs.html]
+0 −106
Original line number Diff line number Diff line
<!DOCTYPE HTML>
<html>
<head>
  <script type="application/javascript" src="pc.js"></script>
</head>
<body>
<pre id="test">
<script type="application/javascript">
  createHTML({
    bug: "1087551",
    title: "addIceCandidate behavior (local and remote) including invalid data"
  });

  var test;
  runNetworkTest(function () {
    test = new PeerConnectionTest();
    test.setMediaConstraints([{audio: true}], [{audio: true}]);
    test.chain.removeAfter("PC_LOCAL_GET_ANSWER");

    test.chain.insertAfter("PC_LOCAL_SET_LOCAL_DESCRIPTION", [
      function PC_LOCAL_ADD_CANDIDATE_EARLY(test) {
        var candidate = {
          candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
          sdpMLineIndex: 0};
        return test.pcLocal._pc.addIceCandidate(candidate).then(
          generateErrorCallback("addIceCandidate should have failed."),
          err => {
            is(err.name, "InvalidStateError", "Error is InvalidStateError");
          });
        }
    ]);
    test.chain.insertAfter("PC_REMOTE_SET_LOCAL_DESCRIPTION", [
      function PC_REMOTE_ADD_CANDIDATE_INVALID_INDEX(test) {
        var invalid_index = new RTCIceCandidate(
          {candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
           sdpMLineIndex: 2});
        return test.pcRemote._pc.addIceCandidate(invalid_index)
        .then(
          generateErrorCallback("addIceCandidate should have failed."),
          err => {
            is(err.name, "InvalidCandidateError", "Error is InvalidCandidateError");
          }
        );
      },
      function PC_REMOTE_ADD_BOGUS_CANDIDATE(test) {
        var bogus = new RTCIceCandidate(
          {candidate:"Pony Lords, jump!",
           sdpMLineIndex: 0});
        return test.pcRemote._pc.addIceCandidate(bogus)
        .then(
          generateErrorCallback("addIceCandidate should have failed."),
          err => {
            is(err.name, "InvalidCandidateError", "Error is InvalidCandidateError");
          }
        );
      },
      function PC_REMOTE_ADD_MISSING_MID_AND_MISSING_INDEX(test) {
        var broken = new RTCIceCandidate(
          {candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host"});
        return test.pcRemote._pc.addIceCandidate(broken)
        .then(
          generateErrorCallback("addIceCandidate should have failed."),
          err => {
            is(err.name, "TypeError", "Error is TypeError");
          }
        );
      },
      function PC_REMOTE_ADD_VALID_CANDIDATE(test) {
        var candidate = {
          candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
          sdpMLineIndex: 0};
        return test.pcRemote._pc.addIceCandidate(candidate)
        .then(() => ok(true, "Successfully added valid ICE candidate"));
      },
      // bug 1095793
      function PC_REMOTE_ADD_MISMATCHED_MID_AND_LEVEL_CANDIDATE(test) {
        var bogus = new mozRTCIceCandidate(
          {candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
           sdpMLineIndex: 0,
           sdpMid: "1"});
        return test.pcRemote._pc.addIceCandidate(bogus)
        .then(generateErrorCallback("addIceCandidate should have failed."),
              err => is(err.name, "InvalidCandidateError", "Error is InvalidCandidateError"));
      },
      function PC_REMOTE_ADD_MID_AND_MISSING_INDEX(test) {
        var candidate = new RTCIceCandidate(
          {candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
           sdpMid: "0"});
        return test.pcRemote._pc.addIceCandidate(candidate)
        .then(() => ok(true, "Successfully added valid ICE candidate"));
      },
      function PC_REMOTE_ADD_MATCHING_MID_AND_LEVEL_CANDIDATE(test) {
        var candidate = new RTCIceCandidate(
          {candidate:"candidate:1 1 UDP 2130706431 192.168.2.1 50005 typ host",
           sdpMLineIndex: 0,
           sdpMid: "0"});
        return test.pcRemote._pc.addIceCandidate(candidate)
        .then(() => ok(true, "Successfully added valid ICE candidate with matching mid and level"));
      }
    ]);
    test.run();
  });
</script>
</pre>
</body>
</html>
+3 −3
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
 *
 * Do not confuse with RTCPeerConnection. This interface is purely for
 * communication between the PeerConnection JS DOM binding and the C++
 * implementation in SIPCC.
 * implementation.
 *
 * See media/webrtc/signaling/include/PeerConnectionImpl.h
 *
@@ -91,9 +91,9 @@ interface PeerConnectionImpl {
   * into the SDP.
   */
  [Throws]
  void addIceCandidate(DOMString candidate, DOMString mid, unsigned short level);
  void addIceCandidate(DOMString candidate, DOMString mid, unsigned short? level);

  /* Puts the SIPCC engine back to 'kIdle', shuts down threads, deletes state */
  /* Shuts down threads, deletes state */
  [Throws]
  void close();

Loading