Anne van Kesteren <mailto:[email protected]>
September 26, 2013 5:44 AM

Probably does not matter much, but the cross-origin case might become
proxy objects long term due to process isolation.

Backward compat says it doesn't matter, but process isolation really wants async APIs. Some browsers currently, e.g., make window.open cross-process more async than other browsers.

Something to pin down, and more important: provide promise-based modern (and sane) equivalent APIs.

/be


Brendan Eich <mailto:[email protected]>
September 25, 2013 9:22 PM


This goes back to the dawn of JS. You can set location on a reachable frame or window, even if not same-origin.

There's no revocation in the Revocable Membrane sense going on. Rather, the membraning has to distinguish gets and other operations from sets, and throw or unwrap |this| accordingly.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Boris Zbarsky <mailto:[email protected]>
September 25, 2013 7:26 PM
On 9/25/13 5:33 PM, David Bruant wrote:
This line looks very WebIDL-ish. Does the web really need that to work?

The web doesn't need anything involving getOwnPropertyDescriptor to work. I just picked a simple example.

The web _does_ in general rely on being able to apply methods from some built-in (including DOM) prototype in one realm to objects from another realm.

What are the other such cases that require this check?

Which "this check"?

-Boris

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

David Bruant <mailto:[email protected]>
September 25, 2013 2:33 PM
Le 25/09/2013 22:00, Boris Zbarsky a écrit :
On 9/25/13 3:47 PM, Mark S. Miller wrote:
Hi Boris, I don't understand what you mean by "in general". I think the
SpiderMonkey use of cross-realm membranes is a great use case for
membranes, and I don't understand why they need any special logic at all
-- beyond the logic expressed by their handlers, which must include
revocation.

Mark,

The issue is that if I have access to a different-realm Location object called "loc", say, then:

Object.getOwnPropertyDescriptor(Location.prototype, "href").get.call(loc)

should throw if the "loc" is not same-origin with me.
But:

Object.getOwnPropertyDescriptor(Location.prototype, "href").set.call(loc, "whatever")

should perform the set.
This line looks very WebIDL-ish. Does the web really need that to work?
Isn't it a case of WebIDL being overzealous?

(There are actually some more complications here for the specific case of Location, but let's ignore them for now.)

What that means in practice is that the membrane isn't actually "revoked": it needs to be unwrapped to the real underlying object in some cases, but not others.

The way we implement that, again, is with a way to unconditionally unwrap a cross-realm membrane, and a way to ask a cross-realm membrane whether it's ok to unwrap it.
What are the other such cases that require this check?

David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Boris Zbarsky <mailto:[email protected]>
September 25, 2013 1:00 PM


Mark,

The issue is that if I have access to a different-realm Location object called "loc", say, then:

Object.getOwnPropertyDescriptor(Location.prototype, "href").get.call(loc)

should throw if the "loc" is not same-origin with me.  But:

Object.getOwnPropertyDescriptor(Location.prototype, "href").set.call(loc, "whatever")

should perform the set. (There are actually some more complications here for the specific case of Location, but let's ignore them for now.)

What that means in practice is that the membrane isn't actually "revoked": it needs to be unwrapped to the real underlying object in some cases, but not others.

The way we implement that, again, is with a way to unconditionally unwrap a cross-realm membrane, and a way to ask a cross-realm membrane whether it's ok to unwrap it. Some of the methods/getters/setters involved use the former, and some use the latter.

Note that in this case the actual property getter/setter is gotten without any interaction with membranes at all. The only question is when a membrane around the thisArg to a function can be pierced to get to the thing the function actually knows how to operate on.

-Boris
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to