Bug 1463016: Part 2 - Allow importing Window constructor in system scopes. r?bz draft
authorKris Maglione <maglione.k@gmail.com>
Sun, 20 May 2018 16:22:54 -0700
changeset 797626 6070f579bf03cc842e594a11016d5b58921c1248
parent 797625 cc786d89b47072e5bc30f0128e1e74f25b38b0aa
child 797627 baee8869ccc4089c9354d4d97ef381c2282551c8
push id110518
push usermaglione.k@gmail.com
push dateMon, 21 May 2018 02:57:23 +0000
reviewersbz
bugs1463016
milestone62.0a1
Bug 1463016: Part 2 - Allow importing Window constructor in system scopes. r?bz MozReview-Commit-ID: FoaFGnM6GN4
dom/base/nsGlobalWindowInner.cpp
js/xpconnect/src/Sandbox.cpp
js/xpconnect/src/xpcprivate.h
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
@@ -3072,17 +3072,18 @@ nsGlobalWindowInner::GetOwnPropertyNames
     aRv.NoteJSContextException(aCx);
   }
 }
 
 /* static */ bool
 nsGlobalWindowInner::IsPrivilegedChromeWindow(JSContext* aCx, JSObject* aObj)
 {
   // For now, have to deal with XPConnect objects here.
-  return xpc::WindowOrNull(aObj)->IsChromeWindow() &&
+  auto* win = xpc::WindowOrNull(aObj);
+  return win && win->IsChromeWindow() &&
          nsContentUtils::ObjectPrincipal(aObj) == nsContentUtils::GetSystemPrincipal();
 }
 
 /* static */ bool
 nsGlobalWindowInner::OfflineCacheAllowedForContext(JSContext* aCx, JSObject* aObj)
 {
   return IsSecureContextOrObjectIsFromSecureContext(aCx, aObj) ||
          Preferences::GetBool("browser.cache.offline.insecure.enable");
--- a/js/xpconnect/src/Sandbox.cpp
+++ b/js/xpconnect/src/Sandbox.cpp
@@ -53,16 +53,17 @@
 #endif
 #include "mozilla/dom/FileReaderBinding.h"
 #include "mozilla/dom/ScriptSettings.h"
 #include "mozilla/dom/TextDecoderBinding.h"
 #include "mozilla/dom/TextEncoderBinding.h"
 #include "mozilla/dom/UnionConversions.h"
 #include "mozilla/dom/URLBinding.h"
 #include "mozilla/dom/URLSearchParamsBinding.h"
+#include "mozilla/dom/WindowBinding.h"
 #include "mozilla/dom/XMLHttpRequest.h"
 #include "mozilla/dom/XMLSerializerBinding.h"
 #include "mozilla/dom/FormDataBinding.h"
 #include "mozilla/DeferredFinalize.h"
 
 using namespace mozilla;
 using namespace JS;
 using namespace xpc;
@@ -835,16 +836,18 @@ xpc::GlobalProperties::Parse(JSContext* 
         } else if (!strcmp(name.ptr(), "TextDecoder")) {
             TextDecoder = true;
         } else if (!strcmp(name.ptr(), "TextEncoder")) {
             TextEncoder = true;
         } else if (!strcmp(name.ptr(), "URL")) {
             URL = true;
         } else if (!strcmp(name.ptr(), "URLSearchParams")) {
             URLSearchParams = true;
+        } else if (!strcmp(name.ptr(), "Window")) {
+            Window = true;
         } else if (!strcmp(name.ptr(), "XMLHttpRequest")) {
             XMLHttpRequest = true;
         } else if (!strcmp(name.ptr(), "XMLSerializer")) {
             XMLSerializer = true;
         } else if (!strcmp(name.ptr(), "atob")) {
             atob = true;
         } else if (!strcmp(name.ptr(), "btoa")) {
             btoa = true;
@@ -940,16 +943,20 @@ xpc::GlobalProperties::Define(JSContext*
     if (URL &&
         !dom::URLBinding::GetConstructorObject(cx))
         return false;
 
     if (URLSearchParams &&
         !dom::URLSearchParamsBinding::GetConstructorObject(cx))
         return false;
 
+    if (Window &&
+        !dom::WindowBinding::GetConstructorObject(cx))
+        return false;
+
     if (XMLHttpRequest &&
         !dom::XMLHttpRequestBinding::GetConstructorObject(cx))
         return false;
 
     if (XMLSerializer &&
         !dom::XMLSerializerBinding::GetConstructorObject(cx))
         return false;
 
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -2542,16 +2542,17 @@ struct GlobalProperties {
     bool FormData : 1;
     bool InspectorUtils : 1;
     bool MessageChannel: 1;
     bool NodeFilter : 1;
     bool TextDecoder : 1;
     bool TextEncoder : 1;
     bool URL : 1;
     bool URLSearchParams : 1;
+    bool Window : 1;
     bool XMLHttpRequest : 1;
     bool XMLSerializer : 1;
 
     // Ad-hoc property names we implement.
     bool atob : 1;
     bool btoa : 1;
     bool caches : 1;
     bool crypto : 1;