W3C home > Mailing lists > Public > public-webapi@w3.org > May 2008

[WebIDL] Passing null and undefined to DOMString things

From: Cameron McCormack <cam@mcc.id.au>
Date: Tue, 20 May 2008 21:04:01 +1000
To: public-webapi@w3.org
Cc: Maciej Stachowiak <mjs@apple.com>, Ian Hickson <ian@hixie.ch>, Anne van Kesteren <annevk@opera.com>
Message-ID: <20080520110401.GB16728@arc.mcc.id.au>

I’ve made DOMString an intrinsic type in the IDL now (to avoid the
“polite fiction”, as Maciej put it ☺).  I’ve also replaced [NoNull]
with [Null] and [Undefined], which can be used to specify how null and
undefined are treated when passed as an operation argument or assigned
to an attribute.

  http://dev.w3.org/cvsweb/~checkout~/2006/webapi/Binding4DOM/Overview.html?rev=1.73&content-type=text/html;%20charset=utf-8#idl-DOMString
  http://dev.w3.org/cvsweb/~checkout~/2006/webapi/Binding4DOM/Overview.html?rev=1.73&content-type=text/html;%20charset=utf-8#Null
  http://dev.w3.org/cvsweb/~checkout~/2006/webapi/Binding4DOM/Overview.html?rev=1.73&content-type=text/html;%20charset=utf-8#Undefined


Cameron McCormack:
> > [treating null as ""]

Maciej Stachowiak:
> It needs to for many standard DOM methods. Most core DOM methods that  
> take namespaces treat a null namespaceURI or prefix parameter the same  
> as the empty string, not the same as the string "null".

I still think that for namespace URIs, the null value is what represents
no namespace, while "" can just be used as an alias for this.  This is
what DOM 3 Core says:

  Applications should use the value null as the namespaceURI  parameter
  for methods if they wish to have no namespace. In programming
  languages where empty strings can be differentiated from null, empty
  strings, when given as a namespace URI, are converted to null. This is
  true even though the DOM does no lexical checking of URIs.
   — http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Namespaces-Considerations


Maciej Stachowiak:
> > I think DOM properties (and sometimes methods and function arguments) 
> > vary on this. Some use the raw ECMAScript ToString algorithm. Others 
> > additionally map the null value to the empty string instead of "null". 
> > Still others map the undefined value to "undefined". Some do both. I am 
> > pretty sure that for compatibility reasons you can't just do the same 
> > for each, so we may as well just define and test the legacy behavior for 
> > each one. Whatever is most common can be the default, and others can be 
> > marked up in the IDL appropriately.

Ian Hickson:
> For both DOMString attributes and DOMString arguments, we have the 
> following ways to handle null and undefined:
…
> I think what we need is for WebIDL to have annotations for these cases, 
> which can be prefixed in front of any occurance of "DOMString" in any IDL 
> block, and then we can work down the APIs and check each DOMString 
> occurance and work out which the UAs are doing. Say:
> 
>    [Null=Null, Undefined=Null]
>    [Null=Null, Undefined=Empty]
>    [Null=Empty, Undefined=Empty]
>    [Null=Null, Undefined=String]
>    [Null=Empty, Undefined=String]
>    [Null=String, Undefined=String]
> 
> ...so that we can do, e.g.:
> 
>    Window open([Null=String, Undefined=String] in DOMString url,
>                [Null=String, Undefined=Empty] in DOMString name,
>                [Null=Empty, Undefined=Empty] in DOMString features);
> 
> ...or whatever is appropriate.

I have replaced [NoNull] with [Null] and [Undefined].  The default
behaviour for both null and undefined is to stringify, since that seemed
to be most common in some (not completely extensive) tests that I did:

  http://mcc.id.au/2007/05/binding-tests/tests/test.pl?id=061
  http://mcc.id.au/2007/05/binding-tests/tests/test.pl?id=062

So now you can specify [Null=Null], [Null=Empty], [Undefined=Null],
[Undefined=Empty].  You cannot specify stringification though; that’s
just the behaviour if the extended attribute is omitted.

Although stringifying null to "null" is more common than passing it
through, I sort of feel like [Null=Null] should be the default, since I
still think of null being one of the values in the DOMString type.  But
at least as it is now, the two extended attributes are consistent (they
both take either Null or Empty).


Cameron McCormack:
> > Should the Bindings spec require that the constructor return an object
> > that implements that interface?

Anne van Kesteren:
> That would make sense I think.

That’s done now.

> Also, when will Web IDL define all the DOMString versus null versus  
> undefined thingies? XMLHttpRequest needs some of that too.

As above.

-- 
Cameron McCormack ≝ http://mcc.id.au/
Received on Tuesday, 20 May 2008 11:05:04 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 20 May 2008 11:05:06 GMT