☠☠ backed out by a37fedd51b7d ☠ ☠ | |
author | Boris Zbarsky <bzbarsky@mit.edu> |
Thu, 30 Oct 2014 17:40:09 -0400 | |
changeset 213247 | 920d50e84a17f9198e05b559314751da78b1bcf5 |
parent 213246 | 55f4818378e45014be126d54b1c236a4cdb844c0 |
child 213248 | 49ac8f33ab70633088ef1121f9646d5dac9294a6 |
push id | 27745 |
push user | cbook@mozilla.com |
push date | Fri, 31 Oct 2014 13:09:12 +0000 |
treeherder | mozilla-central@6bd2071b373f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | peterv |
bugs | 1088228 |
milestone | 36.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
|
dom/base/nsJSUtils.cpp | file | annotate | diff | comparison | revisions | |
dom/base/nsJSUtils.h | file | annotate | diff | comparison | revisions |
--- a/dom/base/nsJSUtils.cpp +++ b/dom/base/nsJSUtils.cpp @@ -22,16 +22,18 @@ #include "nsPIDOMWindow.h" #include "GeckoProfiler.h" #include "nsDOMJSUtils.h" // for GetScriptContextFromJSContext #include "nsJSPrincipals.h" #include "xpcpublic.h" #include "nsContentUtils.h" #include "nsGlobalWindow.h" +#include "mozilla/dom/BindingUtils.h" +#include "mozilla/dom/Element.h" #include "mozilla/dom/ScriptSettings.h" using namespace mozilla::dom; bool nsJSUtils::GetCallingLocation(JSContext* aContext, const char* *aFilename, uint32_t* aLineno) { @@ -308,16 +310,37 @@ nsJSUtils::EvaluateString(JSContext* aCx { EvaluateOptions options; options.setNeedResult(false); JS::RootedValue unused(aCx); return EvaluateString(aCx, aSrcBuf, aScopeObject, aCompileOptions, options, &unused, aOffThreadToken); } +/* static */ +bool +nsJSUtils::GetScopeChainForElement(JSContext* aCx, + mozilla::dom::Element* aElement, + JS::AutoObjectVector& aScopeChain) +{ + for (nsINode* cur = aElement; cur; cur = cur->GetScopeChainParent()) { + JS::RootedValue val(aCx); + if (!WrapNewBindingObject(aCx, cur, &val)) { + return false; + } + + if (!aScopeChain.append(&val.toObject())) { + return false; + } + } + + return true; +} + + // // nsDOMJSUtils.h // JSObject* GetDefaultScopeFromJSContext(JSContext *cx) { // DOM JSContexts don't store their default compartment object on // the cx, so in those cases we need to fetch it via the scx
--- a/dom/base/nsJSUtils.h +++ b/dom/base/nsJSUtils.h @@ -20,16 +20,17 @@ #include "nsString.h" class nsIScriptContext; class nsIScriptGlobalObject; namespace mozilla { namespace dom { class AutoJSAPI; +class Element; } } class nsJSUtils { public: static bool GetCallingLocation(JSContext* aContext, const char* *aFilename, uint32_t* aLineno); @@ -114,16 +115,21 @@ public: void **aOffThreadToken = nullptr); static nsresult EvaluateString(JSContext* aCx, JS::SourceBufferHolder& aSrcBuf, JS::Handle<JSObject*> aScopeObject, JS::CompileOptions &aCompileOptions, void **aOffThreadToken = nullptr); + // Returns false if an exception got thrown on aCx. Passing a null + // aElement is allowed; that wil produce an empty aScopeChain. + static bool GetScopeChainForElement(JSContext* aCx, + mozilla::dom::Element* aElement, + JS::AutoObjectVector& aScopeChain); }; class MOZ_STACK_CLASS AutoDontReportUncaught { JSContext* mContext; bool mWasSet; public: explicit AutoDontReportUncaught(JSContext* aContext) : mContext(aContext) {