It sounds like a bad idea to me that the default behavior for DOMString should be that null is converted to "null". I can't think of a single case where that is what you want to do.

Granted, this is partially due to a javascript spec "bug", null really should have serialized to "" rather than "null".

Since DOM Level 1 DOMStrings have had null as a legal value, so when passing null to a string argument there is usually no need to do any conversion.

When passing null to a [NotNull] string argument I think we should do the same thing as when passing null to any other [NotNull] argument, which IMHO should mean throwing.

Though looking at the spec it no longer looks possible to say that a function excepting an object doesn't want null. Was that removed or was it never there? I thought that was how this whole thing started, so that we could for example mark up that Node.appendChild does not accept null as a valid argument.

/ Jonas

Cameron McCormack wrote:
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.



Reply via email to