| Index: third_party/WebKit/Source/core/layout/LayoutTableSection.h
 | 
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.h b/third_party/WebKit/Source/core/layout/LayoutTableSection.h
 | 
| index 91b3e6770adfb9b60abdef5054ef8c3d06525ef4..b67e327bcfc8746c53e997f4c009bf6607a59a24 100644
 | 
| --- a/third_party/WebKit/Source/core/layout/LayoutTableSection.h
 | 
| +++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.h
 | 
| @@ -57,6 +57,13 @@ class CellSpan {
 | 
|    unsigned m_end;
 | 
|  };
 | 
|  
 | 
| +inline bool operator==(const CellSpan& s1, const CellSpan& s2) {
 | 
| +  return s1.start() == s2.start() && s1.end() == s2.end();
 | 
| +}
 | 
| +inline bool operator!=(const CellSpan& s1, const CellSpan& s2) {
 | 
| +  return !(s1 == s2);
 | 
| +}
 | 
| +
 | 
|  class LayoutTableCell;
 | 
|  class LayoutTableRow;
 | 
|  
 | 
| @@ -316,7 +323,7 @@ class CORE_EXPORT LayoutTableSection final : public LayoutTableBoxComponent {
 | 
|    CellSpan dirtiedRows(const LayoutRect& visualRect) const;
 | 
|    CellSpan dirtiedEffectiveColumns(const LayoutRect& visualRect) const;
 | 
|  
 | 
| -  const HashSet<LayoutTableCell*>& overflowingCells() const {
 | 
| +  const HashSet<const LayoutTableCell*>& overflowingCells() const {
 | 
|      return m_overflowingCells;
 | 
|    }
 | 
|    bool hasMultipleCellLevels() const { return m_hasMultipleCellLevels; }
 | 
| @@ -345,6 +352,11 @@ class CORE_EXPORT LayoutTableSection final : public LayoutTableBoxComponent {
 | 
|  
 | 
|    void layout() override;
 | 
|  
 | 
| +  CellSpan fullSectionRowSpan() const { return CellSpan(0, m_grid.size()); }
 | 
| +  CellSpan fullTableEffectiveColumnSpan() const {
 | 
| +    return CellSpan(0, table()->numEffectiveColumns());
 | 
| +  }
 | 
| +
 | 
|   protected:
 | 
|    void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override;
 | 
|    bool nodeAtPoint(HitTestResult&,
 | 
| @@ -420,11 +432,6 @@ class CORE_EXPORT LayoutTableSection final : public LayoutTableBoxComponent {
 | 
|  
 | 
|    void computeOverflowFromCells(unsigned totalRows, unsigned nEffCols);
 | 
|  
 | 
| -  CellSpan fullTableRowSpan() const { return CellSpan(0, m_grid.size()); }
 | 
| -  CellSpan fullTableEffectiveColumnSpan() const {
 | 
| -    return CellSpan(0, table()->numEffectiveColumns());
 | 
| -  }
 | 
| -
 | 
|    // These two functions take a rectangle as input that has been flipped by
 | 
|    // logicalRectForWritingModeAndDirection.
 | 
|    // The returned span of rows or columns is end-exclusive, and empty if
 | 
| @@ -443,6 +450,8 @@ class CORE_EXPORT LayoutTableSection final : public LayoutTableBoxComponent {
 | 
|    // size accordingly.
 | 
|    void adjustRowForPagination(LayoutTableRow&, SubtreeLayoutScope&);
 | 
|  
 | 
| +  bool paintedOutputOfObjectHasNoEffectRegardlessOfSize() const override;
 | 
| +
 | 
|    // The representation of the rows and their cells (CellStruct).
 | 
|    Vector<RowStruct> m_grid;
 | 
|  
 | 
| @@ -480,7 +489,7 @@ class CORE_EXPORT LayoutTableSection final : public LayoutTableBoxComponent {
 | 
|    // If we have more than gMaxAllowedOverflowingCellRatio * total cells, it will
 | 
|    // be empty and m_forceSlowPaintPathWithOverflowingCell will be set to save
 | 
|    // memory.
 | 
| -  HashSet<LayoutTableCell*> m_overflowingCells;
 | 
| +  HashSet<const LayoutTableCell*> m_overflowingCells;
 | 
|    bool m_forceSlowPaintPathWithOverflowingCell;
 | 
|  
 | 
|    // This boolean tracks if we have cells overlapping due to rowspan / colspan
 | 
| 
 |