W3C home > Mailing lists > Public > www-tag@w3.org > January 2014

Re: [promises] Guidance on the usage of promises for API developers

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Thu, 16 Jan 2014 13:56:09 -0500
Message-ID: <52D82B49.1090800@mit.edu>
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

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:33:24 UTC