w3c / webrtc-pc

WebRTC 1.0 API
https://w3c.github.io/webrtc-pc/
Other
433 stars 115 forks source link

RTCSessionDescriptionInit vs "local" RTCLocalSessionDescriptionInit #2940

Closed jarrodcolburn closed 2 months ago

jarrodcolburn commented 4 months ago

As mentioned in https://github.com/w3c/webrtc-pc/issues/2528 "cost of some spec duplication. (a new RTCLocalSessionDescriptionInit)."

Problem: Dart Language web bindings which are generated from IDL is having an issue where RTCLocalSessionDescriptionInit and RTCSessionDescriptionInit are unique, and neither class implements the other. This seems inconsistent with MDN and actual usage.

Any help would be greatly appreciated in editing the doc @henbos @Orphis

jan-ivar commented 4 months ago

RTCSessionDescriptionInit differs from RTCLocalSessionDescriptionInit by its type member being required:

dictionary RTCSessionDescriptionInit {
  required RTCSdpType type;
  DOMString sdp = "";
};

vs.

dictionary RTCLocalSessionDescriptionInit {
  RTCSdpType type;
  DOMString sdp = "";
};

This is what allows description to be optional in sLD but not in sRD:

  Promise<undefined> setLocalDescription(optional RTCLocalSessionDescriptionInit description = {});
  Promise<undefined> setRemoteDescription(RTCSessionDescriptionInit description);

...which is observable:

pc.setLocalDescription(); // fine
pc.setLocalDescription({type: "rollback"}); // fine
pc.setRemoteDescription({type: "rollback"}); // also fine
pc.setRemoteDescription(); // TypeError

RTCPeerConnection.prototype.setLocalDescription.length // 0
RTCPeerConnection.prototype.setRemoteDescription.length // 1

So this is by design.

Problem: Dart Language web bindings which are generated from IDL is having an https://github.com/dart-lang/web/issues/178 where RTCLocalSessionDescriptionInit and RTCSessionDescriptionInit are unique, and neither class implements the other. This seems inconsistent with MDN and actual usage.

WebIDL dictionaries are not classes or interfaces: "an operation that accepts a dictionary as an argument will perform a one-time conversion from the given JavaScript value into the dictionary, based on the current properties of the JavaScript object"

IOW member-compatible inputs are valid, making RTCSessionDescriptionInit valid input to a method expecting RTCLocalSessionDescriptionInit.

If the Dart Language web bindings cannot express this then that seems like a limitation of those bindings.

jan-ivar commented 2 months ago

Closing as answered. Please reopen if you have further questions.