diff --git a/layout/base/AccessibleCaretManager.cpp b/layout/base/AccessibleCaretManager.cpp index 2b865640b..d9acc7462 100644 --- a/layout/base/AccessibleCaretManager.cpp +++ b/layout/base/AccessibleCaretManager.cpp @@ -408,11 +408,21 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint) if (firstCaretResult == PositionChangedResult::Changed || secondCaretResult == PositionChangedResult::Changed) { + nsWeakFrame weakStartFrame = startFrame; + nsWeakFrame weakEndFrame = endFrame; + // Flush layout to make the carets intersection correct. FlushLayout(); if (IsTerminated()) { return; } + if ((startFrame && !weakStartFrame.IsAlive()) || + (endFrame && !weakEndFrame.IsAlive())) { + mFirstCaret.get()->SetAppearance(Appearance::NormalNotShown); + mSecondCaret.get()->SetAppearance(Appearance::NormalNotShown); + DispatchCaretStateChangedEvent(CaretChangedReason::Visibilitychange); + return; + } } if (aHint == UpdateCaretsHint::Default) {