There has been a little running discussion on [EMAIL PROTECTED] on an errata to
the DOM Level 1 specification DOMImplemention.hasFeature() method that
also appears to apply to the Level 2's Document.createElementNS and other
*NS methods.

Basically, behavior was specified when a string argument was "unspecified"
(for hasFeature) or "null" for the createElementNS and similar.

For example:  For most, if not all, Java XML DOM implementations:

((DOMImplementation) impl).hasFeature("XML",null);

will return true if the implementation supports any version of the XML
specification.  The null argument acting as a wild-card.

This will not work on either IE or Mozilla/NN 6 ECMAScript.

In IE, the COM interface definition is specified as a BSTR (basically a
wchar_t*) and the text explicitly specifies the behavior when the BSTR is 0.
However, the COM variant coercsion code (or so I speculate) will not
convert a variant null (VT_NULL) to a BSTR and throws an exception
if you try hasFeature("XML",null).

The corresponding Mozilla code
(http://lxr.mozilla.org/seamonkey/source/content/base/src/nsGenericElement.c
pp#880)
is passed an nsReadableString& and checks for a zero length string and known
versions strings, but no apparent check for a null string, so:

document.implementation.hasFeature("XML","") returns true

but

document.implementation.hasFeature("XML",null) returns false


I was a little surprised that the second call returned false which hints
that it actually
made it to the hasFeature method instead of failing on a preliminary
coerscion step
and throwning an exception.

----

Now for the question:

1.  (Serious question)

Does nsReadableString has a state that represents an null string distinct
from a zero length string?

My guess from the code is that it does not, but I need to confirm that.
If it does, how do you check if a string is null.

I expect that you could represent both null and a string using a variant
type, however changing the spec to conform to the limitations of the string
classes and deployed behavior is more practical than forcing a
change of the implementation.

2. (More a curiousity question)

Why does document.implementation.hasFeature("XML",null) return false instead
of
throwing an exception on a coerscion of null to a string?  Does control ever
reach nsGenericElement::InternalIsSupported()?  If so, how could it be
written
to return true?



Reply via email to