diff options
Diffstat (limited to 'dom/base')
-rw-r--r-- | dom/base/CustomElementRegistry.h | 13 | ||||
-rw-r--r-- | dom/base/nsDocument.cpp | 3 |
2 files changed, 13 insertions, 3 deletions
diff --git a/dom/base/CustomElementRegistry.h b/dom/base/CustomElementRegistry.h index c180a10af..51c97fd5e 100644 --- a/dom/base/CustomElementRegistry.h +++ b/dom/base/CustomElementRegistry.h @@ -472,15 +472,24 @@ public: class MOZ_RAII AutoCEReaction final { public: - explicit AutoCEReaction(CustomElementReactionsStack* aReactionsStack) - : mReactionsStack(aReactionsStack) { + // JSContext is allowed to be a nullptr if we are guaranteeing that we're + // not doing something that might throw but not finish reporting a JS + // exception during the lifetime of the AutoCEReaction. + AutoCEReaction(CustomElementReactionsStack* aReactionsStack, JSContext* aCx) + : mReactionsStack(aReactionsStack) + , mCx(aCx) { mReactionsStack->CreateAndPushElementQueue(); } ~AutoCEReaction() { + Maybe<JS::AutoSaveExceptionState> ases; + if (mCx) { + ases.emplace(mCx); + } mReactionsStack->PopAndInvokeElementQueue(); } private: RefPtr<CustomElementReactionsStack> mReactionsStack; + JSContext* mCx; }; } // namespace dom diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index 9043e409a..f3e492589 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -5809,7 +5809,8 @@ nsDocument::RegisterElement(JSContext* aCx, const nsAString& aType, return; } - AutoCEReaction ceReaction(this->GetDocGroup()->CustomElementReactionsStack()); + AutoCEReaction ceReaction(this->GetDocGroup()->CustomElementReactionsStack(), + aCx); // Unconditionally convert TYPE to lowercase. nsAutoString lcType; nsContentUtils::ASCIIToLower(aType, lcType); |