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 110301 c350c6f28dd17652e01908cf38ab82f19029efb7
parent 110300 e7208eeb05dacbba00bdf8e7631c7c0c5e8438a1
child 110302 a7702d5a483455f593a2de99e750ee95ed2207af
push id23680
push useremorley@mozilla.com
push dateTue, 16 Oct 2012 08:09:24 +0000
treeherdermozilla-central@8f145599e4bf [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjst
bugs799875
milestone19.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
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>