Bug 1228882 - Don't assume that the textnode has changed when checking whether any textnode descendants determine the directionality of a dir=auto ancestor; r=peterv

This commit is contained in:
Ehsan Akhgari 2016-03-08 15:54:01 -05:00
parent 3fe374d601
commit a2a9616b23

View File

@ -570,11 +570,12 @@ public:
return GetDirectionalityMap(aTextNode)->UpdateAutoDirection(aDir);
}
static void ResetTextNodeDirection(nsINode* aTextNode)
static void ResetTextNodeDirection(nsINode* aTextNode,
nsINode* aChangedTextNode)
{
MOZ_ASSERT(aTextNode->HasTextNodeDirectionalityMap(),
"Map missing in ResetTextNodeDirection");
GetDirectionalityMap(aTextNode)->ResetAutoDirection(aTextNode);
GetDirectionalityMap(aTextNode)->ResetAutoDirection(aChangedTextNode);
}
static void EnsureMapIsClearFor(nsINode* aTextNode)
@ -681,7 +682,7 @@ WalkDescendantsResetAutoDirection(Element* aElement)
}
if (child->HasTextNodeDirectionalityMap()) {
nsTextNodeDirectionalityMap::ResetTextNodeDirection(child);
nsTextNodeDirectionalityMap::ResetTextNodeDirection(child, nullptr);
nsTextNodeDirectionalityMap::EnsureMapIsClearFor(child);
}
child = child->GetNextNode(aElement);
@ -841,7 +842,7 @@ TextNodeChangedDirection(nsIContent* aTextNode, Directionality aOldDir,
// longer does. ResetTextNodeDirection() will re-resolve the
// directionality of any elements whose directionality was
// determined by this node.
nsTextNodeDirectionalityMap::ResetTextNodeDirection(aTextNode);
nsTextNodeDirectionalityMap::ResetTextNodeDirection(aTextNode, aTextNode);
}
} else {
// This node has a strong directional character. If it has a
@ -888,7 +889,7 @@ ResetDirectionSetByTextNode(nsTextNode* aTextNode)
Directionality dir = GetDirectionFromText(aTextNode->GetText());
if (dir != eDir_NotSet && aTextNode->HasTextNodeDirectionalityMap()) {
nsTextNodeDirectionalityMap::ResetTextNodeDirection(aTextNode);
nsTextNodeDirectionalityMap::ResetTextNodeDirection(aTextNode, aTextNode);
}
}