Bug 799875. Make the global scope polluter work even for qualified lookups. r=jst
authorBoris Zbarsky <bzbarsky@mit.edu>
Mon, 15 Oct 2012 14:00:09 -0400
changeset 110433 c350c6f28dd17652e01908cf38ab82f19029efb7
parent 110432 e7208eeb05dacbba00bdf8e7631c7c0c5e8438a1
child 110434 a7702d5a483455f593a2de99e750ee95ed2207af
push id93
push usernmatsakis@mozilla.com
push dateWed, 31 Oct 2012 21:26:57 +0000
reviewersjst
bugs799875
milestone19.0a1
Bug 799875. Make the global scope polluter work even for qualified lookups. r=jst
dom/base/nsDOMClassInfo.cpp
dom/base/test/Makefile.in
dom/base/test/test_gsp-qualified.html
--- a/dom/base/nsDOMClassInfo.cpp
+++ b/dom/base/nsDOMClassInfo.cpp
@@ -5338,20 +5338,19 @@ GetDocument(JSObject *obj)
 }
 
 // static
 JSBool
 nsWindowSH::GlobalScopePolluterNewResolve(JSContext *cx, JSHandleObject obj,
                                           JSHandleId id, unsigned flags,
                                           JSMutableHandleObject objp)
 {
-  if (flags & (JSRESOLVE_ASSIGNING | JSRESOLVE_QUALIFIED) ||
-      !JSID_IS_STRING(id)) {
-    // Nothing to do here if we're assigning, doing a qualified resolve, or
-    // resolving a non-string property.
+  if ((flags & JSRESOLVE_ASSIGNING) || !JSID_IS_STRING(id)) {
+    // Nothing to do here if we're assigning or resolving a non-string
+    // property.
 
     return JS_TRUE;
   }
 
   nsHTMLDocument *document = GetDocument(obj);
 
   if (!document) {
     // If we don't have a document, return early.
--- a/dom/base/test/Makefile.in
+++ b/dom/base/test/Makefile.in
@@ -9,16 +9,17 @@ VPATH = @srcdir@
 relativesrcdir = @relativesrcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MOCHITEST_FILES = \
   test_domrequest.html \
   test_gsp-standards.html \
   test_gsp-quirks.html \
+  test_gsp-qualified.html \
   test_nondomexception.html \
   test_screen_orientation.html \
   $(NULL)
 
 MOCHITEST_CHROME_FILES = \
    test_bug715041.xul \
    test_bug715041_removal.xul \
    $(NULL)
copy from dom/base/test/test_gsp-standards.html
copy to dom/base/test/test_gsp-qualified.html
--- a/dom/base/test/test_gsp-standards.html
+++ b/dom/base/test/test_gsp-qualified.html
@@ -1,27 +1,38 @@
 <!DOCTYPE HTML>
 <html>
 <!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=622491
+https://bugzilla.mozilla.org/show_bug.cgi?id=799875
 -->
 <head>
   <meta charset="utf-8">
-  <title>Test for Bug 622491</title>
+  <title>Test for Bug 799875</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 </head>
 <body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=622491">Mozilla Bug 622491</a>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=799875">Mozilla Bug 799875</a>
 <p id="display"></p>
 <div id="content" style="display: none">
-  
+  <iframe src="data:text/html,<div id='test2'>"></iframe>
 </div>
 <pre id="test">
 <script type="application/javascript">
 
-/** Test for Bug 622491 **/
-is(test, document.getElementById("test"), "Global scope polluter should map ids")
+/** Test for Bug 799875 **/
+SimpleTest.waitForExplicitFinish();
 
+addLoadEvent(function() {
+  is(window.test, document.getElementById("test"),
+     "Global scope polluter should map ids even when qualified")
+  isnot(document.getElementById("test"), null,
+        "Should have element");
+  is(window[0].test2, window[0].document.getElementById("test2"),
+     "Global scope polluter should map ids across globals");
+  isnot(window[0].document.getElementById("test2"), null,
+        "Should have element in subframe");
+  SimpleTest.finish();
+});
 </script>
 </pre>
 </body>
 </html>