[tbb-commits] [tor-browser] 12/14: Bug 1792643. Set clip on background items for table cols and colgroups, when the table row, rowgroup or table has captured clip. r=mstange, a=dmeehan

gitolite role git at cupani.torproject.org
Thu Nov 17 14:03:51 UTC 2022


This is an automated email from the git hooks/post-receive script.

richard pushed a commit to branch tor-browser-91.13.0esr-11.5-1
in repository tor-browser.

commit be6e2ad78a9a2c6dd7b00a02a961009403305098
Author: Timothy Nikkel <tnikkel at gmail.com>
AuthorDate: Wed Oct 5 22:03:29 2022 +0000

    Bug 1792643. Set clip on background items for table cols and colgroups, when the table row, rowgroup or table has captured clip. r=mstange, a=dmeehan
    
    Exactly like bug 1735265 except a frame other then the cell, between the
    cell and the table frame is a stacking context.
    
    Differential Revision: https://phabricator.services.mozilla.com/D158471
---
 layout/reftests/bugs/1792643-1-ref.html | 36 +++++++++++++++++++++++++++++
 layout/reftests/bugs/1792643-1.html     | 40 +++++++++++++++++++++++++++++++++
 layout/reftests/bugs/reftest.list       |  1 +
 layout/tables/nsTableCellFrame.cpp      | 28 +++++++++++++----------
 4 files changed, 93 insertions(+), 12 deletions(-)

diff --git a/layout/reftests/bugs/1792643-1-ref.html b/layout/reftests/bugs/1792643-1-ref.html
new file mode 100644
index 000000000000..444853c34151
--- /dev/null
+++ b/layout/reftests/bugs/1792643-1-ref.html
@@ -0,0 +1,36 @@
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <title>Test for bug 1792643</title>
+  <style>
+    table {
+      width: 500px;
+    }
+
+    th {
+      background-color: green;
+    }
+
+    div {
+      width: 300px;
+      overflow: hidden;
+    }
+  </style>
+</head>
+
+<body>
+  <div>
+    <table>
+      <colgroup></colgroup>
+      <tr style="filter: hue-rotate(0);">
+        <th>foo</th>
+      </tr>
+      <tr style="will-change: transform;">
+        <th>bar</th>
+      </tr>
+    </table>
+  </div>
+</body>
+
+</html>
diff --git a/layout/reftests/bugs/1792643-1.html b/layout/reftests/bugs/1792643-1.html
new file mode 100644
index 000000000000..8391f64fd1b1
--- /dev/null
+++ b/layout/reftests/bugs/1792643-1.html
@@ -0,0 +1,40 @@
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <title>Test for bug 1792643</title>
+  <style>
+    table {
+      width: 500px;
+    }
+
+    th {
+      background-color: green;
+    }
+
+    colgroup {
+      background-color: red;
+    }
+
+    div {
+      width: 300px;
+      overflow: hidden;
+    }
+  </style>
+</head>
+
+<body>
+  <div>
+    <table>
+      <colgroup></colgroup>
+      <tr style="filter: hue-rotate(0);">
+        <th>foo</th>
+      </tr>
+      <tr style="will-change: transform;">
+        <th>bar</th>
+      </tr>
+    </table>
+  </div>
+</body>
+
+</html>
diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list
index 470027f91dd9..1c2461782174 100644
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -2105,3 +2105,4 @@ fuzzy(0-2,0-96600) == 1648282-1b.html 1648282-1-ref.html
 != chrome://reftest/content/bugs/1688004.xhtml about:blank
 == 1726663-1.html 1726663-1-ref.html
 == 1735265-1.html 1735265-1-ref.html
+== 1792643-1.html 1792643-1-ref.html
diff --git a/layout/tables/nsTableCellFrame.cpp b/layout/tables/nsTableCellFrame.cpp
index 163de5ac03a2..385a68d57232 100644
--- a/layout/tables/nsTableCellFrame.cpp
+++ b/layout/tables/nsTableCellFrame.cpp
@@ -483,7 +483,8 @@ void nsTableCellFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
     }
 
     // display borders if we need to
-    ProcessBorders(GetTableFrame(), aBuilder, aLists);
+    nsTableFrame* tableFrame = GetTableFrame();
+    ProcessBorders(tableFrame, aBuilder, aLists);
 
     // and display the selection border if we need to
     if (IsSelected()) {
@@ -513,17 +514,20 @@ void nsTableCellFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
       DisplayListClipState::AutoSaveRestore clipState(aBuilder);
       nsDisplayListBuilder::AutoCurrentActiveScrolledRootSetter asrSetter(
           aBuilder);
-      if (IsStackingContext()) {
-        // The col/colgroup items we create below will be inserted directly into the
-        // BorderBackgrounds list of the table frame. That means that they'll be moved
-        // *outside* of any wrapper items from this table cell, and will not participate in
-        // this table cell's opacity / transform / filter / mask effects.
-        // If this cell is a stacking context, then we may have one or more of those
-        // wrapper items, and one of them may have captured a clip. In order to ensure
-        // correct clipping and scrolling of the col/colgroup items, restore the clip and ASR
-        // that we observed when we entered the table frame.
-        // If this cell is a stacking context but doesn't have any clip capturing wrapper items,
-        // then we'll double-apply the clip. That's ok.
+      if (IsStackingContext() || row->IsStackingContext() ||
+        rowGroup->IsStackingContext() || tableFrame->IsStackingContext()) {
+        // The col/colgroup items we create below will be inserted directly into
+        // the BorderBackgrounds list of the table frame. That means that
+        // they'll be moved *outside* of any wrapper items created for any
+        // frames between this table cell frame and the table wrapper frame, and
+        // will not participate in those frames's opacity / transform / filter /
+        // mask effects. If one of those frames is a stacking context, then we
+        // may have one or more of those wrapper items, and one of them may have
+        // captured a clip. In order to ensure correct clipping and scrolling of
+        // the col/colgroup items, restore the clip and ASR that we observed
+        // when we entered the table frame. If that frame is a stacking context
+        // but doesn't have any clip capturing wrapper items, then we'll
+        // double-apply the clip. That's ok.
         clipState.SetClipChainForContainingBlockDescendants(
             backgrounds->GetTableClipChain());
         asrSetter.SetCurrentActiveScrolledRoot(backgrounds->GetTableASR());

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tbb-commits mailing list