Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / rendering / RenderLayerScrollableArea.cpp
index 7592a00..0cc87c2 100644 (file)
@@ -192,9 +192,27 @@ void RenderLayerScrollableArea::invalidateScrollbarRect(Scrollbar* scrollbar, co
         scrollRect.move(verticalScrollbarStart(0, m_box->width()), m_box->borderTop());
     else
         scrollRect.move(horizontalScrollbarStart(0), m_box->height() - m_box->borderBottom() - scrollbar->height());
+
+    if (scrollRect.isEmpty())
+        return;
+
     LayoutRect repaintRect = scrollRect;
     m_box->flipForWritingMode(repaintRect);
-    m_box->repaintRectangle(repaintRect);
+
+    IntRect intRect = pixelSnappedIntRect(repaintRect);
+
+    if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && m_box->frameView()->isInPerformLayout()) {
+        if (scrollbar == m_vBar.get()) {
+            m_verticalBarDamage = intRect;
+            m_hasVerticalBarDamage = true;
+        } else {
+            m_horizontalBarDamage = intRect;
+            m_hasHorizontalBarDamage = true;
+        }
+
+    } else {
+        m_box->repaintRectangle(intRect);
+    }
 }
 
 void RenderLayerScrollableArea::invalidateScrollCornerRect(const IntRect& rect)
@@ -612,9 +630,15 @@ void RenderLayerScrollableArea::updateAfterLayout()
 
     updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
 
-    // Composited scrolling may need to be enabled or disabled if the amount of overflow changed.
-    if (m_box->view() && m_box->view()->compositor()->updateLayerCompositingState(m_box->layer()))
-        m_box->view()->compositor()->setCompositingLayersNeedRebuild();
+    {
+        // FIXME: We should not be allowing repaint during layout. crbug.com/336251
+        AllowRepaintScope scoper(m_box->view()->frameView());
+
+        // FIXME: Remove incremental compositing updates after fixing the chicken/egg issues
+        // https://code.google.com/p/chromium/issues/detail?id=343756
+        DisableCompositingQueryAsserts disabler;
+        m_box->view()->compositor()->updateLayerCompositingState(m_box->layer());
+    }
 }
 
 bool RenderLayerScrollableArea::hasHorizontalOverflow() const
@@ -657,6 +681,10 @@ void RenderLayerScrollableArea::updateAfterStyleChange(const RenderStyle* oldSty
     if (m_box->style()->appearance() == ListboxPart)
         return;
 
+    // RenderView shouldn't provide scrollbars on its own.
+    if (m_box->isRenderView())
+        return;
+
     if (!m_scrollDimensionsDirty)
         updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());