| Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| index 80c7de4745b6e5ccc483acaf4bcc33de4f2a9ce3..c2464543b3ab9518d900671862dcfd1dfa5be0ca 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| @@ -1429,7 +1429,7 @@
|
| return rect.intersects(LayoutRect(layoutView->frameView()->scrollableArea()->visibleContentRectDouble()));
|
| }
|
|
|
| -PaintInvalidationReason LayoutBox::invalidatePaintIfNeeded(PaintInvalidationState& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationContainer)
|
| +PaintInvalidationReason LayoutBox::invalidatePaintIfNeeded(PaintInvalidationState& paintInvalidationState, const LayoutBoxModelObject& newPaintInvalidationContainer)
|
| {
|
| PaintInvalidationReason fullInvalidationReason = fullPaintInvalidationReason();
|
| // If the current paint invalidation reason is PaintInvalidationDelayedFull, then this paint invalidation can delayed if the
|
| @@ -1443,18 +1443,53 @@
|
| setShouldDoFullPaintInvalidation(PaintInvalidationFull);
|
| }
|
|
|
| - PaintInvalidationReason reason = LayoutBoxModelObject::invalidatePaintIfNeeded(paintInvalidationState, paintInvalidationContainer);
|
| -
|
| - if (!view()->doingFullPaintInvalidation() && !isFullPaintInvalidationReason(reason))
|
| + PaintInvalidationReason reason = LayoutBoxModelObject::invalidatePaintIfNeeded(paintInvalidationState, newPaintInvalidationContainer);
|
| +
|
| + bool willDoFullInvalidation = view()->doingFullPaintInvalidation() || isFullPaintInvalidationReason(reason);
|
| + if (!willDoFullInvalidation)
|
| invalidatePaintForOverflowIfNeeded();
|
|
|
| - if (PaintLayerScrollableArea* area = scrollableArea())
|
| - area->invalidatePaintOfScrollControlsIfNeeded(paintInvalidationState, paintInvalidationContainer);
|
| + // Issue paint invalidations for any scrollbars if there is a scrollable area for this layoutObject.
|
| + if (ScrollableArea* area = scrollableArea()) {
|
| + if (area->hasVerticalBarDamage()) {
|
| + if (!willDoFullInvalidation)
|
| + invalidatePaintRectangleNotInvalidatingDisplayItemClients(LayoutRect(area->verticalBarDamage()));
|
| + // TODO(wangxianzhu): Pass current bounds of the scrollbar to PaintController. crbug.com/547119.
|
| + if (Scrollbar* verticalScrollbar = area->verticalScrollbar())
|
| + invalidateDisplayItemClient(*verticalScrollbar);
|
| + }
|
| + if (area->hasHorizontalBarDamage()) {
|
| + if (!willDoFullInvalidation)
|
| + invalidatePaintRectangleNotInvalidatingDisplayItemClients(LayoutRect(area->horizontalBarDamage()));
|
| + // TODO(wangxianzhu): Pass current bounds of the scrollbar to PaintController. crbug.com/547119.
|
| + if (Scrollbar* horizontalScrollbar = area->horizontalScrollbar())
|
| + invalidateDisplayItemClient(*horizontalScrollbar);
|
| + }
|
| + }
|
|
|
| // This is for the next invalidatePaintIfNeeded so must be at the end.
|
| savePreviousBoxSizesIfNeeded();
|
| return reason;
|
| }
|
| +
|
| +void LayoutBox::clearPaintInvalidationState(const PaintInvalidationState& paintInvalidationState)
|
| +{
|
| + LayoutBoxModelObject::clearPaintInvalidationState(paintInvalidationState);
|
| +
|
| + if (ScrollableArea* area = scrollableArea())
|
| + area->resetScrollbarDamage();
|
| +}
|
| +
|
| +#if ENABLE(ASSERT)
|
| +bool LayoutBox::paintInvalidationStateIsDirty() const
|
| +{
|
| + if (ScrollableArea* area = scrollableArea()) {
|
| + if (area->hasVerticalBarDamage() || area->hasHorizontalBarDamage())
|
| + return true;
|
| + }
|
| + return LayoutBoxModelObject::paintInvalidationStateIsDirty();
|
| +}
|
| +#endif
|
|
|
| LayoutRect LayoutBox::overflowClipRect(const LayoutPoint& location, OverlayScrollbarSizeRelevancy relevancy) const
|
| {
|
|
|