diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-20 20:14:59 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:48 -0500 |
commit | 8db81508a1ffe1c3873503a1cb2082d664714776 (patch) | |
tree | dd1ef38691c25a80787dfcdca06038a7fac18c7e /dom/base/CustomElementRegistry.h | |
parent | 4083a9abf76058d35f0277dd6857478fc6715137 (diff) | |
download | UXP-8db81508a1ffe1c3873503a1cb2082d664714776.tar UXP-8db81508a1ffe1c3873503a1cb2082d664714776.tar.gz UXP-8db81508a1ffe1c3873503a1cb2082d664714776.tar.lz UXP-8db81508a1ffe1c3873503a1cb2082d664714776.tar.xz UXP-8db81508a1ffe1c3873503a1cb2082d664714776.zip |
Bug 1415761 - Catch the exception and rethrow it after invoking custom elements reactions;
The spec was unclear on how CEReactions interact with thrown exceptions; see https://github.com/whatwg/html/issues/3217. The spec is now being clarified in https://github.com/whatwg/html/pull/3235.
Tag UXP Issue #1344
Diffstat (limited to 'dom/base/CustomElementRegistry.h')
-rw-r--r-- | dom/base/CustomElementRegistry.h | 13 |
1 files changed, 11 insertions, 2 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 |