Bug 1819664 - Cleanup mutation pending elements. r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D171359
This commit is contained in:
Emilio Cobos Álvarez 2023-03-02 12:36:55 +00:00
parent b14d9e44e8
commit 67cde8c9d2

View File

@ -111,33 +111,28 @@ void L10nMutations::ContentInserted(nsIContent* aChild) {
void L10nMutations::ContentRemoved(nsIContent* aChild,
nsIContent* aPreviousSibling) {
if (!mObserving) {
if (!mObserving || mPendingElements.IsEmpty()) {
return;
}
if (!aChild->IsElement()) {
return;
}
Element* elem = aChild->AsElement();
if (!IsInRoots(elem)) {
Element* elem = Element::FromNode(*aChild);
if (!elem || !IsInRoots(elem)) {
return;
}
ErrorResult rv;
Sequence<OwningNonNull<Element>> elements;
DOMLocalization::GetTranslatables(*aChild, elements, rv);
DOMLocalization::GetTranslatables(*aChild, elements, IgnoreErrors());
for (auto& elem : elements) {
mPendingElements.RemoveElement(elem);
mPendingElementsHash.EnsureRemoved(elem);
if (mPendingElementsHash.EnsureRemoved(elem)) {
mPendingElements.RemoveElement(elem);
}
}
}
void L10nMutations::L10nElementChanged(Element* aElement) {
if (!mPendingElementsHash.Contains(aElement)) {
if (mPendingElementsHash.EnsureInserted(aElement)) {
mPendingElements.AppendElement(aElement);
mPendingElementsHash.Insert(aElement);
}
if (!mRefreshDriver) {
@ -211,8 +206,8 @@ void L10nMutations::FlushPendingTranslations() {
RefPtr<Promise> promise =
mDOMLocalization->TranslateElements(elements, IgnoreErrors());
if (promise) {
RefPtr<PromiseNativeHandler> l10nMutationFinalizationHandler =
new L10nMutationFinalizationHandler(
auto l10nMutationFinalizationHandler =
MakeRefPtr<L10nMutationFinalizationHandler>(
mDOMLocalization->GetParentObject());
promise->AppendNativeHandler(l10nMutationFinalizationHandler);
}