summaryrefslogtreecommitdiffstats
path: root/WebCore/page/FrameView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/FrameView.cpp')
-rw-r--r--WebCore/page/FrameView.cpp57
1 files changed, 27 insertions, 30 deletions
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index 3154a67..5314a32 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -143,6 +143,9 @@ FrameView::FrameView(Frame* frame)
, m_deferSetNeedsLayouts(0)
, m_setNeedsLayoutWasDeferred(false)
, m_scrollCorner(0)
+#if ENABLE(ANDROID_OVERFLOW_SCROLL)
+ , m_hasOverflowScroll(false)
+#endif
{
init();
}
@@ -553,11 +556,6 @@ void FrameView::updateCompositingLayers()
RenderView* view = m_frame->contentRenderer();
if (!view)
return;
-#if ENABLE(ANDROID_OVERFLOW_SCROLL)
- // Enter compositing mode for child frames that have layout dimensions.
- if (hasOverflowScroll())
- enterCompositingMode();
-#endif
// This call will make sure the cached hasAcceleratedCompositing is updated from the pref
view->compositor()->cacheAcceleratedCompositingFlags();
@@ -571,31 +569,6 @@ void FrameView::setNeedsOneShotDrawingSynchronization()
page->chrome()->client()->setNeedsOneShotDrawingSynchronization();
}
-#if ENABLE(ANDROID_OVERFLOW_SCROLL)
-bool FrameView::hasOverflowScroll() const
-{
-#ifndef ANDROID_FLATTEN_IFRAME
- RenderObject* ownerRenderer = m_frame->ownerRenderer();
- if (!ownerRenderer || !ownerRenderer->isRenderIFrame())
- return false;
- RenderLayer* layer = ownerRenderer->enclosingLayer();
- // Make sure the layer has visible content or descendants.
- if (!layer->hasVisibleContent() && !layer->hasVisibleDescendant())
- return false;
- // If either layout dimension is 0, return false.
- if (!layoutWidth() || !layoutHeight())
- return false;
- ScrollbarMode h, v;
- scrollbarModes(h, v);
- if (h == ScrollbarAlwaysOff || v == ScrollbarAlwaysOff)
- return false;
- if (contentsWidth() <= layoutWidth() && contentsHeight() <= layoutHeight())
- return false;
- return true;
-#endif
- return false;
-}
-#endif
#endif // USE(ACCELERATED_COMPOSITING)
bool FrameView::hasCompositedContent() const
@@ -955,6 +928,30 @@ void FrameView::layout(bool allowSubtree)
InspectorInstrumentation::didLayout(cookie);
m_nestedLayoutCount--;
+#if ENABLE(ANDROID_OVERFLOW_SCROLL) && !defined(ANDROID_FLATTEN_IFRAME)
+ // Reset to false each time we layout in case the overflow status changed.
+ bool hasOverflowScroll = false;
+ RenderObject* ownerRenderer = m_frame->ownerRenderer();
+ if (ownerRenderer && ownerRenderer->isRenderIFrame()) {
+ RenderLayer* layer = ownerRenderer->enclosingLayer();
+ if (layer) {
+ // Some sites use tiny iframes for loading so don't composite those.
+ if (canHaveScrollbars() && layoutWidth() > 1 && layoutHeight() > 1)
+ hasOverflowScroll = layoutWidth() < contentsWidth() || layoutHeight() < contentsHeight();
+ }
+ }
+ if (RenderView* view = m_frame->contentRenderer()) {
+ if (hasOverflowScroll != m_hasOverflowScroll) {
+ if (hasOverflowScroll)
+ enterCompositingMode();
+ else
+ // We are leaving overflow mode so we need to update the layer
+ // tree in case that is the reason we were composited.
+ view->compositor()->scheduleCompositingLayerUpdate();
+ }
+ }
+ m_hasOverflowScroll = hasOverflowScroll;
+#endif
}
void FrameView::addWidgetToUpdate(RenderEmbeddedObject* object)