- From: Anant Narayanan <anant@mozilla.com>
- Date: Fri, 12 Oct 2012 12:47:37 -0700
- To: public-webrtc@w3.org
All, The specification is currently not very clear on handling error conditions. There are two primary ways in which we can signal errors to content: exceptions and failure callbacks. In general, a rule of thumb we've been following while implementing the spec in Firefox is to raise exceptions for anything that can be detected as an error in a synchronous manner (i.e. in <50ms). For error conditions that take longer to detect, we invoke the failure callback with an appropriate string. Concretely, this would mean, as an example: pc.createOffer("haha", "this is not a callback"); will generate an exception, since it is very easy to detect that the first parameter is not a RTCSessionDescription and the second parameter is not a function. However, a call like: pc.setLocalDescription({ type: "offer", sdp: "...valid SDP..." }, onSuccess, onError); will invoke the failure callback if the SDP is syntactically correct but semantically wrong. There are some ambiguous areas, like: pc.createOffer({ type: "offer", sdp: "a: not valid sdp\n" }, onSuccess, onError); In theory, it is possible to detect that the SDP is syntactically invalid in a synchronous manner, but it also means we need to have a SDP parser available as close to the DOM implementation as possible. In Firefox, that is not the case, therefore we invoke the failure callback in this particular case. In general, where there is ambiguity we favour invoking the failure callback over throwing an exception. Exceptions are only used for the "obviously" wrong input parameters. Because failure callbacks are likely to be more often used than exceptions, omitting a failure callback could lead to painful debugging scenarios where an error has occurred but the content does not know why. In light of this, I would also like to propose making failure callbacks mandatory (they aren't currently, but in the Firefox implementation they are). This part of the proposal is distinct from the previous suggestions, but is still something I'd like to see happen, because it promotes code hygiene. While writing example code for WebRTC, I have found it immensely useful when Firefox throws an exception because I haven't provided a failure callback. I'd like to take this general idea and write down the exact behavior for each error condition, but before undertaking that, it would be great to hear feedback on whether this seems like a reasonable direction to go in. Regards, -Anant
Received on Friday, 12 October 2012 19:47:57 UTC