<p dir="ltr">Hi Travis, I didn't follow. Could you expand, assuming less background knowledge?  Thanks.<br>
</p>
<div class="gmail_quote">On Jan 14, 2015 2:58 PM, "Travis Leithead" <<a href="mailto:travis.leithead@microsoft.com">travis.leithead@microsoft.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">WindowProxies are going to be a challenge when it comes to a pure ES implementation. The other challenge that just came to mind, is the document object—at least
 in Gecko and IE: a document.write call will “re-init” the object (subbing out the old var for a new one) while maintaining the === invariant. Chrome appears to have a simpler model for dealing with this. I’m not sure what HTML has to say about this currently…<u></u><u></u></span></p>
<p class="MsoNormal"><a name="14aeaabcbba09a23__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> Mark S. Miller [mailto:<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>]
<br>
<b>Sent:</b> Wednesday, January 14, 2015 2:44 PM<br>
<b>To:</b> Boris Zbarsky<br>
<b>Cc:</b> Ian Hickson; Travis Leithead; Domenic Denicola; <a href="mailto:public-script-coord@w3.org" target="_blank">public-script-coord@w3.org</a>; es-discuss<br>
<b>Subject:</b> Re: Figuring out the behavior of WindowProxy in the face of non-configurable properties<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Boris has this exactly right. Further, a malicious proxy handler can leverage the presence of a single object that violates these invariants into the creation of arbitrary other proxies objects that also violate these invariants. The key
 is that the enforcement of the invariants relies on the proxy's target being constrained by these invariants.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">See <a href="http://research.google.com/pubs/pub40736.html" target="_blank">http://research.google.com/pubs/pub40736.html</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Wed, Jan 14, 2015 at 2:32 PM, Boris Zbarsky <<a href="mailto:bzbarsky@mit.edu" target="_blank">bzbarsky@mit.edu</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">On 1/14/15 3:17 PM, Ian Hickson wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">It's more than that. It's how the HTML spec defines WindowProxy.<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
The point is, the HTML spec's definition is not expressible in ES terms.  So how do go about bridging this gap?<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">According to the HTML spec, all operations that would be performed on the<br>
WindowProxy object must be performed on the Window object of the browsing<br>
context's active document instead. So the above would set a property on<br>
the underlying Window object, not the WindowProxy.<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
It would call the [[DefineOwnProperty]] trap of the WindowProxy.  That then forwards to the Window, yes?<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">...but the window proxy's [[GetOwnProperty]] just forwards that straight<br>
to the Window's [[GetOwnProperty]].<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
Yes, but since which window it forwards to changes you get an invariant violation for the WindowProxy object itself.<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">The property is on the Window, not the WindowProxy. It can't disappear<br>
from the Window. The invariant is thus maintained.<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
I think you misunderstand what the invariant is.<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">There is no way to directly query the WindowProxy.<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
It doesn't matter.  The user sees the WindowProxy, not the Window. After you navigate, you still have the same WindowProxy (e.g. .contentWindow returns something that is === to the thing you had before you navigated).  But properties it claimed to have that
 were non-configurable are now gone.  That is precisely a violation of the invariants.<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">To all intents and purposes, it's not a real object.<u></u><u></u></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
It looks like an object and quacks like an object.  Sorry, but it's an object as far as all consumers are concerned; they have no way to tell it apart from an object except _maybe_ via these invariant violations. But then you've entered circular argument territory.<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">It's a reference to another object<u></u><u></u></p>
</blockquote>
<p class="MsoNormal"><br>
JS doesn't have such a type in the language, sadly, so we can't model it that way for consumers.<span style="color:#888888"><br>
<br>
<span>-Boris</span></span><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<p class="MsoNormal">    Cheers,<br>
    --MarkM<u></u><u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div>