зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1088228 part 2. Create an nsJSUtils API for building the scope chain for a given Element. r=peterv
This commit is contained in:
Родитель
38493ba5e9
Коммит
644beaf30b
|
@ -27,6 +27,8 @@
|
|||
#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;
|
||||
|
@ -313,6 +315,27 @@ nsJSUtils::EvaluateString(JSContext* aCx,
|
|||
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
|
||||
//
|
||||
|
|
|
@ -25,6 +25,7 @@ class nsIScriptGlobalObject;
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
class AutoJSAPI;
|
||||
class Element;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,6 +120,11 @@ public:
|
|||
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 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче