- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Sat, 19 Oct 2013 06:32:32 +0200
- To: Jan-Ivar Bruaroey <jib@mozilla.com>, Travis Leithead <travis.leithead@microsoft.com>, "public-media-capture@w3.org" <public-media-capture@w3.org>
- Message-ID: <52620B60.9070505@alvestrand.no>
On 10/19/2013 01:38 AM, Jan-Ivar Bruaroey wrote: > So we can't add more mandatory constraints over time? > > Define "not to support any random property". Fail or silently succeed? The behaviour I want is: getUserMedia(.... mandatory(knownKey='foo', unknownKey='bar') ...) should call the error callback ("constraints can't be satisfied"), with "unknownKey='bar'" as the constraint that couldn't be satisfied. getUserMedia(.... optional((knownKey='foo'), (unknownKey='bar')) ...) should silently succeed. If that means dictionaries aren't the right object, we'll have to use something else. > > .: Jan-Ivar :. > > On 10/17/13 4:22 PM, Travis Leithead wrote: >> >> WebIDL dictionary processing only knows how to deal with known >> dictionary members (see >> http://dev.w3.org/2006/webapi/WebIDL/#es-dictionary). Dictionaries >> are not generic property maps or sets. >> >> In getUserMedia, the intention is to have a set of well-defined >> mandatory constraints (as defined by dictionaries in the spec--or >> inherited/partial dictionaries defined formerly elsewhere)---not to >> support any random property key that is placed on the dictionary >> object by user code. >> >> *From:*Jan-Ivar Bruaroey [mailto:jib@mozilla.com] >> *Sent:* Wednesday, October 16, 2013 12:40 PM >> *To:* Harald Alvestrand; public-media-capture@w3.org >> *Subject:* Re: gUM constraints webidl implementer feedback >> >> On 10/16/13 6:42 AM, Harald Alvestrand wrote: >> >> On 10/15/2013 08:28 PM, Jan-Ivar Bruaroey wrote: >> >> 1. Mandatory constraints aren't implementable as webidl >> dictionaries. >> >> * We're supposed to detect unknown mandatory >> constraints and fail on them, but webidl dictionaries >> /silently ignore/ unknown keys! >> >> >> I thought this was a feature... don't you get to see the ignored >> keys in the engine? >> >> >> No, our webidl-compiler-generated bindings create a new dictionary >> from default values and then interrogates known members it finds in >> the provided content JS object through inspection. This is for >> security reasons, as content JS objects may be toxic. - Unknown >> members have unknown types, so including them safely becomes tricky. >> >> >> 1. >> >> * To work around this problem, I had to alter the API >> to take the mandatory member as a plain object (which >> makes our webidl security guys' neck-hair stand up, >> but it's ok), like this: >> >> o dictionary MediaTrackConstraints { >> object mandatory; // so we can see unknown + >> unsupported constraints >> sequence<MediaTrackConstraint> _optional; >> }; >> >> * I then convert it internally to this structure after >> scanning for unknown keys, which should be safe: >> >> o dictionary MediaTrackConstraintsInternal { >> MediaTrackConstraintSet mandatory; // holds >> only supported constraints >> sequence<MediaTrackConstraint> _optional; >> }; >> >> >> In lieu of alternative solutions to number 6, I'd like to see >> the spec be explicit about what's needed to implement this as >> it stands. >> >> >> Seems to me we have a differing understanding of how the engine >> should deal with dictionaries. >> >> >> I agree. Maybe the webidl group can help clarify? >> >> .: Jan-Ivar :. >> > > > -- > .: Jan-Ivar :.
Received on Saturday, 19 October 2013 04:33:01 UTC