- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Thu, 16 Jan 2014 13:56:09 -0500
- To: Domenic Denicola <domenic@domenicdenicola.com>, "www-tag@w3.org" <www-tag@w3.org>, public-webapps <public-webapps@w3.org>
On 1/16/14 1:29 PM, Domenic Denicola wrote: > Hmm, I don't quite understand the concern. You're creating new objects using things like Promise.cast(). That will create an object whose prototype is Promise.prototype. But which realm's Promise is it using in this case? That needs to be specified, right? > What is special about promises that makes using them require specifying the realm Nothing. > whereas other web specs don't seem to need to? Or do other specs specify realms too, and I just haven't noticed? Here's what WebIDL says [1]: Every platform object is associated with a global environment, just as the initial objects are. It is the responsibility of specifications using Web IDL to state which global environment (or, by proxy, which global object) each platform object is associated with. so web specs do in fact need to do it. To the extent that they don't, they're not actually defining the behavior and need to be fixed. There's probably a lot of fixing to do, and I apologize on Mozilla's behalf for not bringing up issues on this more proactively as we've been converting objects to WebIDL bindings. :( Similarly, ES6 builtin functions need to specify the realm for objects they're creating. All the ones I've spot checked in fact do that, so ES6 is way ahead of web specs here. > An example underspecified scenario would be helpful, I think. Here's an example not involving promises that's currently underspecified, I believe: window1.document.createElement.call(window2.document, "span"); I've put the relevant testcase at http://web.mit.edu/bzbarsky/www/testcases/multiple-realms/createElement-1.html if you want to take a look. Browsers consistently create the element in the realm of window2 in this case, but the DOM spec doesn't seem to actually define the behavior right now, unless I'm totally missing something. It should do so, for example by defining that an element is associated with the global environment of its owner document and then defining the global environment for documents as needed. DOMParser and XMLHttpRequest make that last bit slightly exciting. Does that help illustrate the issue? I do agree that this is a more wide-ranging problem than for promises, by the way. At least in the createElement case we have compat across UAs do right now; for other cases I'm not sure we necessarily do. :( -Boris [1] http://heycam.github.io/webidl/#es-platform-objects
Received on Thursday, 16 January 2014 18:56:41 UTC