Bug 1551389 - Compare line lists as well as lines when deciding if two frames are on the same line. r=mats
☠☠ backed out by b2bd4ee26110 ☠ ☠
authorMatt Woodrow <mwoodrow@mozilla.com>
Tue, 14 May 2019 22:26:17 +0000
changeset 532699 9d6897b968f6cd1b1cf525f19a45843907a157e9
parent 532698 2d0e8bded97ab21731f1577fcf093595aec62c22
child 532700 64bfa1117b35f805e62cca112752037cd2ff36f4
push id11270
push userrgurzau@mozilla.com
push dateWed, 15 May 2019 15:07:19 +0000
treeherdermozilla-beta@571bc76da583 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmats
bugs1551389
milestone68.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1551389 - Compare line lists as well as lines when deciding if two frames are on the same line. r=mats Differential Revision: https://phabricator.services.mozilla.com/D31152
layout/painting/crashtests/1551389-1.html
layout/painting/crashtests/crashtests.list
layout/painting/nsCSSRendering.cpp
new file mode 100644
--- /dev/null
+++ b/layout/painting/crashtests/1551389-1.html
@@ -0,0 +1,6 @@
+<style>
+dl::first-letter { float: right }
+* { -webkit-box-shadow: -moz-cellhighlighttext 0px 34px 1px }
+</style>
+<s dir="RTL">
+<dl style="break-inside: avoid">AA</iframe>
--- a/layout/painting/crashtests/crashtests.list
+++ b/layout/painting/crashtests/crashtests.list
@@ -13,9 +13,10 @@ load 1454105-1.html
 load 1455944-1.html
 load 1465305-1.html
 load 1468124-1.html
 load 1469472.html
 load 1477831-1.html
 load 1504033.html
 load 1514544-1.html
 load 1547420-1.html
+load 1551389-1.html
 
--- a/layout/painting/nsCSSRendering.cpp
+++ b/layout/painting/nsCSSRendering.cpp
@@ -383,16 +383,18 @@ struct InlineBackgroundData {
     if (nsBlockFrame* blockFrame = do_QueryFrame(mLineContainer)) {
       bool isValid1, isValid2;
       nsBlockInFlowLineIterator it1(blockFrame, aFrame1, &isValid1);
       nsBlockInFlowLineIterator it2(blockFrame, aFrame2, &isValid2);
       return isValid1 && isValid2 &&
              // Make sure aFrame1 and aFrame2 are in the same continuation of
              // blockFrame.
              it1.GetContainer() == it2.GetContainer() &&
+             // And both in the same line list
+             it1.GetLineList() == it2.GetLineList() &&
              // And on the same line in it
              it1.GetLine() == it2.GetLine();
     }
     if (nsRubyTextContainerFrame* rtcFrame = do_QueryFrame(mLineContainer)) {
       nsBlockFrame* block = nsLayoutUtils::FindNearestBlockAncestor(rtcFrame);
       // Ruby text container can only hold one line of text, so if they
       // are in the same continuation, they are in the same line. Since
       // ruby text containers are bidi isolate, they are never split for