- From: Cameron McCormack <cam@mcc.id.au>
- Date: Fri, 26 Jun 2009 10:50:33 +1000
- To: Marcin Hanclik <Marcin.Hanclik@access-company.com>
- Cc: WebApps WG <public-webapps@w3.org>
Marcin Hanclik:
> Following our conversation on the geolocation ML
> http://lists.w3.org/Archives/Public/public-geolocation/2009Jun/0173.html
> I have the following clarification request related to the Web IDL spec.
>
> In the geolocation spec we have now:
> [NoInterfaceObject]
> interface PositionOptions {
> attribute boolean enableHighAccuracy;
> attribute long timeout;
> attribute long maximumAge;
> };
>
> Proposed and agreed in our mail discussion:
> [Callback]
> interface PositionOptions {
> attribute boolean enableHighAccuracy;
> attribute long timeout;
> attribute long maximumAge;
> };
>
> Our intentions are:
> 1) Not to instantiate the interface object with new PositionOptions();
> This is handled by not specifying [Constructor] extended attribute.
>
> 2) Not to have PositionOptions on the ES global object.
> This shall be handled by specifying [NoInterfaceObject]. But it
> seems to have to be removed.
>
> 3) Use PositionOptions interface to specify properties of the object
> passed to e.g. getCurrentPosition() method.
> This is handled by specifying [Callback].
>
> 4) Resulting from the above, use the PositionOptions as follows:
> navigator.geolocation.getCurrentPosition(successCallback,
> errorCallback,
> {maximumAge:600000});
Right.
> Questions:
> a) What is the PropertyOnly argument/identifier for?
> It seems unclear from the Web IDL spec.
> Does it specify that the interface has one attribute only and ES
> binding just one property?
> Or does it specify that the interface includes only attributes?
> Or does it signify only the opposite to FunctionOnly?
I’ll try to clear up the wording in
http://dev.w3.org/2006/webapi/WebIDL/#native-objects.
The intended meaning of [Callback=PropertyOnly] is that if the interface
has one or more operations with the same name (but no others) and no
attributes, then an ECMAScript Function object’s [[Call]] will not be
considered to be the implementation of those operations. Instead, the
[[Call]] of the object returned from invoking [[Get]] with the operation
identifier as the property name will be.
So for example with these interfaces:
interface Target {
void registerListener(in Listener x);
};
[Callback]
interface Listener {
void f();
};
this would work:
getTarget().registerListener(function() { … })
as would:
getTarget().registerListener({ f: function() { … } });
If [Callback=FunctionOnly] was specified, then only the former would
work (passing a Function object), while if [Callback=PropertyOnly] was
specified, then only the latter would work.
Web IDL really should make IDL fragments non-conforming to use
FunctionOnly or PropertyOnly when the interface has operations of
different names or when it has attributes.
> b)
> Shouldn't we have the PositionOptions specified as follows?
> [NoInterfaceObject]
> [Callback=PropertyOnly]
> interface PositionOptions {
> attribute boolean enableHighAccuracy;
> attribute long timeout;
> attribute long maximumAge;
> };
It should be:
[NoInterfaceObject, Callback]
interface PositionOptions {
…
};
as far as I can tell. (I’ll probably loosen the IDL grammar to allow
sequences of square-bracketed extended attributes instead of requiring
them to be all in one, but for now you do need to have them all in one,
comma separated.)
Cameron
--
Cameron McCormack ≝ http://mcc.id.au/
Received on Friday, 26 June 2009 00:51:12 UTC