| Index: third_party/WebKit/Source/core/paint/TablePainterTest.cpp | 
| diff --git a/third_party/WebKit/Source/core/paint/TablePainterTest.cpp b/third_party/WebKit/Source/core/paint/TablePainterTest.cpp | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..7ebcdff1ff26eb9cd8c3ca8a032056f5395f74a0 | 
| --- /dev/null | 
| +++ b/third_party/WebKit/Source/core/paint/TablePainterTest.cpp | 
| @@ -0,0 +1,75 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#include "core/paint/PaintControllerPaintTest.h" | 
| +#include "platform/graphics/paint/DrawingDisplayItem.h" | 
| + | 
| +namespace blink { | 
| + | 
| +using TablePainterTest = PaintControllerPaintTest; | 
| + | 
| +TEST_F(TablePainterTest, CollapsedBorderInterestRectChange) { | 
| +  setBodyInnerHTML( | 
| +      "<style>" | 
| +      "  table { border-collapse: collapse; position: absolute; }" | 
| +      "  td { width: 100px; height: 100px; border: 2px solid blue; }" | 
| +      "</style>" | 
| +      "<table id='table'>" | 
| +      "  <tr><td></td><td></td><td></td><td></td></tr>" | 
| +      "  <tr><td></td><td></td><td></td><td></td></tr>" | 
| +      "  <tr><td></td><td></td><td></td><td></td></tr>" | 
| +      "  <tr><td></td><td></td><td></td><td></td></tr>" | 
| +      "</table>"); | 
| + | 
| +  PaintLayer& htmlLayer = | 
| +      *toLayoutBoxModelObject(document().documentElement()->layoutObject()) | 
| +           ->layer(); | 
| +  LayoutObject& table = *getLayoutObjectByElementId("table"); | 
| + | 
| +  rootPaintController().invalidateAll(); | 
| +  document().view()->updateAllLifecyclePhasesExceptPaint(); | 
| +  IntRect interestRect(300, 300, 300, 300); | 
| +  paint(&interestRect); | 
| + | 
| +  EXPECT_DISPLAY_LIST( | 
| +      rootPaintController().getDisplayItemList(), 4, | 
| +      TestDisplayItem(layoutView(), documentBackgroundType), | 
| +      TestDisplayItem(htmlLayer, DisplayItem::kSubsequence), | 
| +      TestDisplayItem(table, DisplayItem::kTableCollapsedBorders), | 
| +      TestDisplayItem(htmlLayer, DisplayItem::kEndSubsequence)); | 
| +  // Painted collapsed borders of the central 4 cells, each 4 operations. | 
| +  EXPECT_EQ(16, static_cast<const DrawingDisplayItem&>( | 
| +                    rootPaintController().getDisplayItemList()[2]) | 
| +                    .picture() | 
| +                    ->approximateOpCount()); | 
| + | 
| +  // Should repaint collapsed borders if the previous paint didn't fully paint | 
| +  // and interest rect changes. | 
| +  document().view()->updateAllLifecyclePhasesExceptPaint(); | 
| +  interestRect = IntRect(0, 0, 1000, 1000); | 
| +  EXPECT_TRUE(paintWithoutCommit(&interestRect)); | 
| +  EXPECT_EQ(1, numCachedNewItems()); | 
| +  commit(); | 
| +  EXPECT_DISPLAY_LIST( | 
| +      rootPaintController().getDisplayItemList(), 4, | 
| +      TestDisplayItem(layoutView(), documentBackgroundType), | 
| +      TestDisplayItem(htmlLayer, DisplayItem::kSubsequence), | 
| +      TestDisplayItem(table, DisplayItem::kTableCollapsedBorders), | 
| +      TestDisplayItem(htmlLayer, DisplayItem::kEndSubsequence)); | 
| +  // Painted collapsed borders of all 16 cells, each 4 operations. | 
| +  EXPECT_EQ(64, static_cast<const DrawingDisplayItem&>( | 
| +                    rootPaintController().getDisplayItemList()[2]) | 
| +                    .picture() | 
| +                    ->approximateOpCount()); | 
| + | 
| +  // Should not repaint collapsed borders if the previous paint fully painted | 
| +  // and interest rect changes. | 
| +  document().view()->updateAllLifecyclePhasesExceptPaint(); | 
| +  interestRect = IntRect(0, 0, 400, 400); | 
| +  EXPECT_TRUE(paintWithoutCommit(&interestRect)); | 
| +  EXPECT_EQ(4, numCachedNewItems()); | 
| +  commit(); | 
| +} | 
| + | 
| +}  // namespace blink | 
|  |