| Index: third_party/WebKit/Source/core/layout/LayoutTableCell.h | 
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCell.h b/third_party/WebKit/Source/core/layout/LayoutTableCell.h | 
| index e9a9716262deff97d260a79156ee439b17f7afd4..12f5210b8c87e472bff5a1a03769562b718dde65 100644 | 
| --- a/third_party/WebKit/Source/core/layout/LayoutTableCell.h | 
| +++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.h | 
| @@ -185,9 +185,8 @@ | 
| int borderBefore() const override; | 
| int borderAfter() const override; | 
|  | 
| -  // Returns true if any collapsed borders related to this cell changed. | 
| -  bool collectBorderValues(Vector<CollapsedBorderValue>&); | 
| -  static void sortBorderValues(Vector<CollapsedBorderValue>&); | 
| +  void collectBorderValues(LayoutTable::CollapsedBorderValues&); | 
| +  static void sortBorderValues(LayoutTable::CollapsedBorderValues&); | 
|  | 
| void layout() override; | 
|  | 
| @@ -290,22 +289,33 @@ | 
| bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const override; | 
| void invalidateDisplayItemClients(PaintInvalidationReason) const override; | 
|  | 
| -  struct CollapsedBorderValues { | 
| -    CollapsedBorderValue startBorder; | 
| -    CollapsedBorderValue endBorder; | 
| -    CollapsedBorderValue beforeBorder; | 
| -    CollapsedBorderValue afterBorder; | 
| - | 
| -    bool allBordersAreInvisible() const { | 
| -      return !startBorder.isVisible() && !endBorder.isVisible() && | 
| -             !beforeBorder.isVisible() && !afterBorder.isVisible(); | 
| -    } | 
| -    bool bordersVisuallyEqual(const CollapsedBorderValues& other) const { | 
| -      return startBorder.visuallyEquals(other.startBorder) && | 
| -             endBorder.visuallyEquals(other.endBorder) && | 
| -             beforeBorder.visuallyEquals(other.beforeBorder) && | 
| -             afterBorder.visuallyEquals(other.afterBorder); | 
| -    } | 
| +  // TODO(wkorman): Consider renaming to more clearly differentiate from | 
| +  // CollapsedBorderValue. | 
| +  class CollapsedBorderValues : public DisplayItemClient { | 
| +   public: | 
| +    CollapsedBorderValues(const LayoutTable&, | 
| +                          const CollapsedBorderValue& startBorder, | 
| +                          const CollapsedBorderValue& endBorder, | 
| +                          const CollapsedBorderValue& beforeBorder, | 
| +                          const CollapsedBorderValue& afterBorder); | 
| + | 
| +    const CollapsedBorderValue& startBorder() const { return m_startBorder; } | 
| +    const CollapsedBorderValue& endBorder() const { return m_endBorder; } | 
| +    const CollapsedBorderValue& beforeBorder() const { return m_beforeBorder; } | 
| +    const CollapsedBorderValue& afterBorder() const { return m_afterBorder; } | 
| + | 
| +    void setCollapsedBorderValues(const CollapsedBorderValues& other); | 
| + | 
| +    // DisplayItemClient methods. | 
| +    String debugName() const; | 
| +    LayoutRect visualRect() const; | 
| + | 
| +   private: | 
| +    const LayoutTable& m_layoutTable; | 
| +    CollapsedBorderValue m_startBorder; | 
| +    CollapsedBorderValue m_endBorder; | 
| +    CollapsedBorderValue m_beforeBorder; | 
| +    CollapsedBorderValue m_afterBorder; | 
| }; | 
|  | 
| class RowBackgroundDisplayItemClient : public DisplayItemClient { | 
| @@ -321,7 +331,6 @@ | 
| }; | 
|  | 
| bool usesCompositedCellDisplayItemClients() const; | 
| - | 
| const CollapsedBorderValues* collapsedBorderValues() const { | 
| return m_collapsedBorderValues.get(); | 
| } | 
| @@ -341,8 +350,6 @@ | 
|  | 
| void ensureIsReadyForPaintInvalidation() override; | 
|  | 
| -  LayoutRect localVisualRect() const override; | 
| - | 
| protected: | 
| void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override; | 
| void computePreferredLogicalWidths() override; | 
| @@ -366,6 +373,7 @@ | 
| void paintMask(const PaintInfo&, const LayoutPoint&) const override; | 
|  | 
| LayoutSize offsetFromContainer(const LayoutObject*) const override; | 
| +  LayoutRect localVisualRect() const override; | 
|  | 
| int borderHalfLeft(bool outer) const; | 
| int borderHalfRight(bool outer) const; | 
| @@ -403,8 +411,8 @@ | 
| // See also https://code.google.com/p/chromium/issues/detail?id=128227 for | 
| // some history. | 
| // | 
| -  // Those functions are called before paint invalidation if the collapsed | 
| -  // borders cache is invalidated on LayoutTable. | 
| +  // Those functions are called when the cache (m_collapsedBorders) is | 
| +  // invalidated on LayoutTable. | 
| CollapsedBorderValue computeCollapsedStartBorder( | 
| IncludeBorderColorOrNot = IncludeBorderColor) const; | 
| CollapsedBorderValue computeCollapsedEndBorder( | 
|  |