- From: Arnaud Morin <arnaud1.morin@orange.com>
- Date: Fri, 22 Feb 2013 09:15:11 +0100
- To: Justin Uberti <juberti@google.com>
- CC: "Cullen Jennings (fluffy)" <fluffy@cisco.com>, "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <5127290F.1020800@orange.com>
Hi, Why not using callback errors all the time? This way, the developer only need to take care of callback methods to handle error. FMHO, the line between "The type of a parameter does not match the defined type" and "Malformed parameters" is very fuzzy, it's almost the same, no? Cheers, Arnaud. On 22/02/2013 08:00, Justin Uberti wrote: > As I spell out in the document, the cases where you use an exception > are all cases where an IPC is not needed. Exceptions are really just > for sanity-checking the input, similar to how ASSERTs are typically > used in C++ programs; they tell you you did something wrong, but you > shouldn't try to solve this by wrapping the method call in a try/catch > block, since the exception indicates that you're not using it properly. > > Perhaps the terms 'programming' and 'runtime' aren't the best way of > expressing this, but I think the general rules of the road should be > pretty clear. Naturally, the part that really matters is the specifics > for each error; I did define the errors that I think we need and what > causes them to be generated. Let me know if I got any of these wrong, > or missed something important. > > > On Thu, Feb 21, 2013 at 7:32 PM, Cullen Jennings (fluffy) > <fluffy@cisco.com <mailto:fluffy@cisco.com>> wrote: > > > I'm not disagreeing with you on the end outcome of what of things > you want to put in exceptions versus error callbacks but I don't > think this distinction of runtime vs programming makes any sense. > Many programming errors could cause INVALID_SESSION_DESCRIPTION > and many runtime roots could cause INVALID_PARAMETER_ERR. I don't > think this make sense as a way of dealing the problem. The real > issue seems to me to be what the code will look like that uses > these and where in the browser the error can be detected. > Particularly for async calls where the error is detected on > another thread, using an exception is very hard. It does not > matter if this was an runtime or programming error, it still hard > to use an exception. > > As a way forward, lets define the error we need, what causes them, > and ignore the runtime vs programming distinction. > > On Feb 21, 2013, at 1:06 PM, Justin Uberti <juberti@google.com > <mailto:juberti@google.com>> wrote: > > > Following up on a previously assigned action. Some of this is > already in the spec, but there were enough gray areas that I think > we need to add more detail. Please comment, either via mail or in > the document at > https://docs.google.com/document/d/1_npj3RJmPcPwo4jLD44VcTW-juRBAKJdjJceGOw6sRg/edit#. > > > > ---- > > WebRTC Error Handling > > > > > > WebRTC provides two mechanisms for errors to be returned to the > application - exceptions, which are returned synchronously, and > completion callbacks, which are returned asynchronously. > > > > The operations that are async in the WebRTC API use this > technique because they may take nontrivial time to complete, > and/or require inter-thread or inter-process and communication. > The callback informs the application that the operation is > complete (and can now do something else), and what the result of > the operation was. > > > > To understand when an error should be returned via an exception, > or via an async callback, the guideline is simple: programming > errors (e.g. API called at wrong time or with parameters of the > wrong type) should always result in an exception. Runtime errors, > such as an error in the syntax of a parameter, or failure to apply > a desired operation, should always result in a callback. > > > > Programming errors are explicitly defined as the following > conditions: > > • The state of the object does not match the preconditions > for the API call (e.g. setLocalDescription on a closed PeerConnection) > > • The type of a parameter does not match the defined type > (e.g. setLocalDescription("foo"), setLocalDescription(null), > setLocalDescription({foo:42}). > > > > All other errors are considered runtime errors, including: > > • Malformed parameters, or parameters that are incorrect > for the given object state (e.g. > setLocalDescription({type:"answer", sdp:<sdp>} on a PeerConnection > in the "stable" state; setLocalDescription({type:"answer", > sdp:"barf"}) > > • Failure to parse SDP > > • Failure when applying SDP > > > > Programming errors result in an exception being thrown with either: > > • INVALID_STATE_ERR as the name (a generic DOM exception), or > > • INVALID_PARAMETER_ERR (TBD where this is defined). > > > > Programming errors prevent any state change and are always > recoverable. > > > > Runtime errors result in a error callback with an RTCError > object. The RTCError object may use the following names: > > • INVALID_STATE(?) (Incorrect type of SDP for current > state, recoverable) > > • INVALID_SESSION_DESCRIPTION (SDP failed to parse, or not > suitable, recoverable) > > • INCOMPATIBLE_CONSTRAINTS (Unsatisfiable constraints to > async function, recoverable) > > • INCOMPATIBLE_MEDIASTREAMTRACK (MediaStreamTrack is not > part of PeerConnection, recoverable) > > • INTERNAL_ERROR (Failure occurred when setting local or > remote description, media subsystem is in bad state, not recoverable) > > > > Runtime errors may occur after state has already changed, and > may not be recoverable. > > > > References: > > WebRTC spec, section 4.6, Error Handling > >
Received on Sunday, 24 February 2013 22:48:02 UTC