diff --git a/layout/base/RestyleManager.cpp b/layout/base/RestyleManager.cpp index 0399e077227d..9f5ddf2f2b48 100644 --- a/layout/base/RestyleManager.cpp +++ b/layout/base/RestyleManager.cpp @@ -1267,6 +1267,23 @@ StyleChangeReflow(nsIFrame* aFrame, nsChangeHint aHint) } while (aFrame); } +// Get the next sibling which might have a frame. This only considers siblings +// that stylo post-traversal looks at, so only elements and text. In +// particular, it ignores comments. +static nsIContent* +NextSiblingWhichMayHaveFrame(nsIContent* aContent) +{ + for (nsIContent* next = aContent->GetNextSibling(); + next; + next = next->GetNextSibling()) { + if (next->IsElement() || next->IsNodeOfType(nsINode::eTEXT)) { + return next; + } + } + + return nullptr; +} + void RestyleManager::ProcessRestyledFrames(nsStyleChangeList& aChangeList) { @@ -1397,7 +1414,8 @@ RestyleManager::ProcessRestyledFrames(nsStyleChangeList& aChangeList) aChangeList[i].mContent && aChangeList[i].mContent->HasFlag(NODE_NEEDS_FRAME) && (i == lazyRangeStart || - aChangeList[i - 1].mContent->GetNextSibling() == aChangeList[i].mContent)) + NextSiblingWhichMayHaveFrame(aChangeList[i - 1].mContent) == + aChangeList[i].mContent)) { MOZ_ASSERT(aChangeList[i].mHint & nsChangeHint_ReconstructFrame); MOZ_ASSERT(!aChangeList[i].mFrame); @@ -1405,7 +1423,7 @@ RestyleManager::ProcessRestyledFrames(nsStyleChangeList& aChangeList) } if (i != lazyRangeStart) { nsIContent* start = aChangeList[lazyRangeStart].mContent; - nsIContent* end = aChangeList[i-1].mContent->GetNextSibling(); + nsIContent* end = NextSiblingWhichMayHaveFrame(aChangeList[i-1].mContent); nsIContent* container = start->GetParent(); MOZ_ASSERT(container); if (!end) { diff --git a/layout/reftests/table-bordercollapse/1384602-1-ref.html b/layout/reftests/table-bordercollapse/1384602-1-ref.html new file mode 100644 index 000000000000..3a7efb16124e --- /dev/null +++ b/layout/reftests/table-bordercollapse/1384602-1-ref.html @@ -0,0 +1,18 @@ + + + + + + + + + + + +
Spanning.
1234
diff --git a/layout/reftests/table-bordercollapse/1384602-1a.html b/layout/reftests/table-bordercollapse/1384602-1a.html new file mode 100644 index 000000000000..eb58374c9b78 --- /dev/null +++ b/layout/reftests/table-bordercollapse/1384602-1a.html @@ -0,0 +1,25 @@ + + + + + + + + + + + +
Spanning.
+ diff --git a/layout/reftests/table-bordercollapse/reftest.list b/layout/reftests/table-bordercollapse/reftest.list index 33baa1facc12..35337c7a22d4 100644 --- a/layout/reftests/table-bordercollapse/reftest.list +++ b/layout/reftests/table-bordercollapse/reftest.list @@ -111,3 +111,4 @@ fuzzy(255,40) == border-style-outset-becomes-groove.html border-style-outset-bec # is 20px). fuzzy(255,40) == border-style-inset-becomes-ridge.html border-style-inset-becomes-ridge-ref.html fuzzy(2,11000) == 1324524.html 1324524-ref.html +== 1384602-1a.html 1384602-1-ref.html