David Bruant wrote:
Le 12/12/2012 21:42, Kevin Reid a écrit :
On Wed, Dec 12, 2012 at 12:35 PM, David Bruant <bruan...@gmail.com <mailto:bruan...@gmail.com>> wrote:

    I was a bit too strong in my statement, sorry. Let me rephrase:
    the internal [[Target]] can't be changed, but a proxy can emulate
    changing of "fake" target as long as what happens with this
    "fake" target doesn't involve invariant checking.
    That's the reason I was suggesting that WindowProxies could
    (maybe depending on how the object reference was obtained) throw
    whenever invariant checks are involved.


Exactly. So a user-defined switching proxy needs only to:
1. refuse to commit to any invariant (non-configurable property or preventExtensions) 2. even if its switchable-target has an invariant, do not expose that invariant (i.e. pretend each property is configurable)
Pretend that something non-configurable actually is configurable is an invariant violation. To be more concrete:
* There is an webpage with an iframe
* The same window object is proxied by 2 WindowProxy instances. One outside the iframe, one inside.

Just as a point of fact regarding the web-as-it-is, this can't happen, right? There's only one WindowProxy per Window and it is the only object referenced by any JS variable. JS code cannot construct another aliasing WindowProxy.

* Inside of the iframe, scripts can add a non-configurable property "azerty" to their global.

Boris Zbarsky pointed out on public-script-coord that window.location and window.document must be non-configurable _ab initio_, but perhaps this is achievable with direct proxies?

/be

* Outside the iframe, what happens when Object.getOwnPropertyDescriptor(iframeWindow, 'azerty') is called? You're suggesting that {configurable: true} is returned. The problem is that on the actual Window instance, there is a non-configurable property, so if the WindowProxy handler tries to do that, an error will be thrown because of invariant checks.

I think throwing is the correct behavior here. The handler can't tell the truth about non-configurable properties (because a later different target may not have the same non-configurable properties), but also can't lie, because lies involves throwing... well, since I say that throwing is the correct behavior, I guess lying is too in a way.

David
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to