From d9f89e438efe75e0947bff4857b498dbaf0a003a Mon Sep 17 00:00:00 2001 From: Shu-yu Guo Date: Mon, 15 Jun 2015 21:32:30 -0700 Subject: [PATCH] Bug 1165486 - Use JS::CompileForNonSyntacticScope in Gecko where we used to set polluted global scope. (r=bz, rs=bholley) --- dom/base/nsFrameMessageManager.cpp | 3 +-- js/xpconnect/loader/mozJSSubScriptLoader.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dom/base/nsFrameMessageManager.cpp b/dom/base/nsFrameMessageManager.cpp index e385c7997230..a4806e0adf01 100644 --- a/dom/base/nsFrameMessageManager.cpp +++ b/dom/base/nsFrameMessageManager.cpp @@ -1788,8 +1788,7 @@ nsMessageManagerScriptExecutor::TryCacheLoadAndCompileScript( } } else { // We're going to run these against some non-global scope. - options.setHasPollutedScope(true); - if (!JS::Compile(cx, options, srcBuf, &script)) { + if (!JS::CompileForNonSyntacticScope(cx, options, srcBuf, &script)) { return; } } diff --git a/js/xpconnect/loader/mozJSSubScriptLoader.cpp b/js/xpconnect/loader/mozJSSubScriptLoader.cpp index 41082e39fcb6..62cbbb9208e6 100644 --- a/js/xpconnect/loader/mozJSSubScriptLoader.cpp +++ b/js/xpconnect/loader/mozJSSubScriptLoader.cpp @@ -146,8 +146,10 @@ PrepareScript(nsIURI* uri, } if (!reuseGlobal) { - options.setHasPollutedScope(!JS_IsGlobalObject(targetObj)); - JS::Compile(cx, options, srcBuf, script); + if (JS_IsGlobalObject(targetObj)) + JS::Compile(cx, options, srcBuf, script); + else + JS::CompileForNonSyntacticScope(cx, options, srcBuf, script); } else { AutoObjectVector scopeChain(cx); if (!JS_IsGlobalObject(targetObj) && @@ -162,9 +164,11 @@ PrepareScript(nsIURI* uri, // We only use lazy source when no special encoding is specified because // the lazy source loader doesn't know the encoding. if (!reuseGlobal) { - options.setSourceIsLazy(true) - .setHasPollutedScope(!JS_IsGlobalObject(targetObj)); - JS::Compile(cx, options, buf, len, script); + options.setSourceIsLazy(true); + if (JS_IsGlobalObject(targetObj)) + JS::Compile(cx, options, buf, len, script); + else + JS::CompileForNonSyntacticScope(cx, options, buf, len, script); } else { AutoObjectVector scopeChain(cx); if (!JS_IsGlobalObject(targetObj) &&