- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Tue, 21 Apr 2015 16:34:12 -0400
- To: Jason Ausborn <jason.ausborn@gmail.com>, public-media-capture@w3.org
- Message-ID: <5536B444.1010706@mozilla.com>
On 4/15/15 2:43 PM, Jason Ausborn wrote:
> After consolidating WebIDL from the working draft, I processed
> it with the W3 WebIDL checker. The checker had errors regarding the
> ConstrainablePattern interface for undefined Capabilities and Settings
> types.
>
> Current:
>
> [NoInterfaceObject]
> interface ConstrainablePattern {
> *Capabilities* getCapabilities ();
> Constraints getConstraints ();
> *Settings* getSettings ();
> Promise<void> applyConstraints (Constraints constraints);
> attribute EventHandler onoverconstrained;
> };
>
>
> Recommended:
>
> [NoInterfaceObject]
> interface ConstrainablePattern {
> *object* getCapabilities ();
> Constraints getConstraints ();
> *object* getSettings ();
> Promise<void> applyConstraints (Constraints constraints);
> attribute EventHandler onoverconstrained;
> };
>
>
> The above changes will pass with the WebIDL Checker. Note, changing
> *object *to *any *will work also (as well as other defined types).
Changing to object would be misleading I think.
Disclaimer: As far as I'm concerned the whole ConstrainablePattern can
be scrapped and its prose collapsed into corresponding actual interfaces
in MediaStreamTrack.
Those concerns notwithstanding, the above errors seem solvable the same
way the sibling 'Constraints' dictionary is pacified, with empty
dictionary definitions in 11.5. [1]
> I was confused after reading *11.1 Interface Definition *in regards to
> "*limitations of the interface definition language* used in this
> specification".
The ConstrainablePattern is not an actual interface in any
implementation, rather it is an attempt to elevate parts of the
MediaStreamTrack API into a reusable pattern, presumably for
documentation reasons and hopes of future re-reference (I wont say reuse
since it's not actually used). The working group is trying to express
this using WebIDL by defining an interface that isn't meant to be
implemented directly and whose names are similar to APIs that are meant
to be implemented. E.g.
Constraints, see MediaTrackConstraints
Capabilities, see MediaTrackCapabilities
Settings, see MediaTrackSettings
ConstrainablePattern.*, see MediaStreamTrack.*
As I'm sure you know, WebIDL mints concrete interfaces based on explicit
definitions only, not from reusable templates or patterns, and cannot
express this. I believe these are the "limitations" referred to.
> WebIDL states that the *[NoInterfaceObject]* extended attribute
> should be solely used on *supplemental *interfaces. IMO, I recommend
> rephrasing the *11.1 Interface Definition *description. Consider
> rewording *limitations of the interface definition language*, and
> consider adding *supplemental interface* somewhere in the description.
This seems like the elephant on the baseball field has a non-regulation
cap, type of problem.
It is probably a supplemental interface in spirit, at least more than it
is the opposite, since we'd like to write:
MediaStreamTrack implements ConstrainablePattern;
if it weren't incorrect and misleading to do so. If it were supported,
we would have had to write something like:
MediaStreamTrack implements
ConstrainablePattern<MediaTrackConstraints, MediaTrackCapabilities,
MediaTrackSettings>;
i.e. an instantiation of a template pattern, but that's made up and not
WebIDL.
Hope that clears things up.
.: Jan-Ivar :.
[1] http://w3c.github.io/mediacapture-main/getusermedia.html#constraints
Received on Tuesday, 21 April 2015 20:34:41 UTC