[XHR] Associating XHR instances with documents - clarify spec statement in 4.6.1

I'm taking a back-channel discussion on-list per Anne's suggestion. We are trying to clarify some text in section 4.6.1, "The open() method" which is meant to describe how an XMLHttpRequest instance is associated with a specific document. (This association is important for origin checks, security etc.)


The current text says:


"Let *document* be the document associated with the global object for which the XMLHttpRequest interface object was created from which this XMLHttpRequest object was created."


This is quite convoluted, but precise. The last "object" could perhaps be "instance" to make it clearer? However, my proposal is to move this text to the constructor section (4.2 Constructors), for example as a new 3rd step in the first numbered list, and simplify it to read:


"Let document be the document associated with the global object of the XMLHttpRequest interface object."



Anne responded:
 
> You cannot just move it to the constructor without introducing some
> other XHR-wide variable.


Sorry Anne, you could probably edit the XHR spec asleep but however obvious it may be to you, I need some more details here ;). We're defining an "instance variable" called *document* and discussing whether we should define it when the instance is constructed or when the open() method is called. I don't understand what state we would need another XHR-wide variable to track if we move it. As far as I can tell, nothing can be done after constructing an instance but before calling open() that would require *document* to be unset, or require knowing if it is set or not.


> But yes, there's an open issue about whether
> we should maybe do that. I'd prefer discussion on a public list.

Hereby implemented, Sir ;-)

> > I also believe the implementation difference can not be observed from JS.
> 
> Not if you make the same requirements, no...


I believe both the old text and the proposal would end up with *document* referencing the same document, even in corner cases. If I'm missing something please explain, thanks.


(Just for the record, the corner cases we need to consider here include stuff like 
var xhr=new iframe.contentWindow.XMLHttpRequest()


XMLHttpRequest.prototype.open.call(xhr, ...)


iframe.contentWindow.XMLHttpRequest.prototype.open.call( xhr=new XMLHttpRequest, ... )


and possibly other weirdness. The spec needs to dictate a consistent and compatible way to reference the correct document..)


-- 
Hallvord R. M. Steen
Core tester, Opera Software

Received on Thursday, 22 November 2012 11:36:15 UTC