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. |
+
+
+
+ 1 | 2 | 3 | 4 |
+
+
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