From c7911ffd666a7e73131dfd68919b769086a093e0 Mon Sep 17 00:00:00 2001 From: Guang Zhu Date: Tue, 14 Dec 2010 13:51:33 -0800 Subject: [PATCH] Revert "Enable iframe scrolling." This reverts commit 27dd9e051d0960e985cb677bfc1ce20531ac0456. --- WebCore/config.h | 1 + WebCore/page/FrameView.cpp | 7 ---- .../graphics/android/GraphicsLayerAndroid.cpp | 3 +- WebCore/rendering/RenderLayerCompositor.cpp | 17 ++------ WebKit/android/nav/CacheBuilder.cpp | 49 +++++++++++++++------- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/WebCore/config.h b/WebCore/config.h index c7dd31f75..a7dfecdbb 100644 --- a/WebCore/config.h +++ b/WebCore/config.h @@ -143,6 +143,7 @@ #define ENABLE_BLOB 1 #define ANDROID_FLATTEN_FRAMESET +#define ANDROID_FLATTEN_IFRAME #define ANDROID_LAYOUT diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp index 7d9920bb3..537448767 100644 --- a/WebCore/page/FrameView.cpp +++ b/WebCore/page/FrameView.cpp @@ -554,13 +554,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. The - // decision to enable compositing for the RenderView will be done in the - // compositor. - if (m_frame->ownerRenderer() && (layoutWidth() | layoutHeight())) - enterCompositingMode(); -#endif // This call will make sure the cached hasAcceleratedCompositing is updated from the pref view->compositor()->cacheAcceleratedCompositingFlags(); diff --git a/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp b/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp index c0ad248c1..0fdbc217a 100644 --- a/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp +++ b/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp @@ -367,7 +367,8 @@ void GraphicsLayerAndroid::setDrawsContent(bool drawsContent) m_foregroundClipLayer->addChild(m_foregroundLayer); m_contentLayer->addChild(m_foregroundClipLayer); - } else if (layer->isRootLayer() && + } else if (false /* FIXME: disable until navigation is fixed */ && + layer->isRootLayer() && layer->renderer()->frame()->ownerRenderer()) { // Replace the content layer with a scrollable layer. LayerAndroid* layer = new ScrollableLayerAndroid(*m_contentLayer); diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp index 00e596b8e..ce80e5ac1 100644 --- a/WebCore/rendering/RenderLayerCompositor.cpp +++ b/WebCore/rendering/RenderLayerCompositor.cpp @@ -1178,20 +1178,9 @@ bool RenderLayerCompositor::requiresCompositingForMobileSites(const RenderLayer* return true; HTMLFrameOwnerElement* ownerElement = enclosingIFrameElement(); RenderObject* renderer = ownerElement ? ownerElement->renderer() : 0; - if (layer->isRootLayer() && renderer && renderer->isRenderIFrame()) { - if (layer->renderer()->frame()) { - FrameView* view = layer->renderer()->frame()->view(); - if (view) { - // Enable compositing if the frame can scroll and the contents - // are larger than the layout dimensions. - ScrollbarMode h,v; - view->scrollbarModes(h, v); - if ((h != ScrollbarAlwaysOff && view->layoutWidth() < view->contentsWidth()) || - (v != ScrollbarAlwaysOff && view->layoutHeight() < view->contentsHeight())) - return true; - } - } - } + // FIXME: Disabled for now until navigation is fixed. + if (false && layer->isRootLayer() && renderer && renderer->isRenderIFrame()) + return true; #endif #if ENABLE(COMPOSITED_FIXED_ELEMENTS) // First, check if we are in an iframe, and if so bail out diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp index 52ee72c77..cbc580d23 100644 --- a/WebKit/android/nav/CacheBuilder.cpp +++ b/WebKit/android/nav/CacheBuilder.cpp @@ -55,7 +55,6 @@ #include "RenderListBox.h" #include "RenderSkinCombo.h" #include "RenderTextControl.h" -#include "RenderView.h" #include "RenderWidget.h" #include "SkCanvas.h" #include "SkPoint.h" @@ -95,9 +94,7 @@ Frame* CacheBuilder::FrameAnd(const CacheBuilder* cacheBuilder) { } CacheBuilder::LayerTracker::~LayerTracker() { - // Check for a stacking context to prevent a crash in layers without a - // parent. - if (mRenderLayer && mRenderLayer->stackingContext()) + if (mRenderLayer) // Restore the scroll position of the layer. Does not affect layers // without overflow scroll as the layer will not be scrolled. mRenderLayer->scrollToOffset(mScroll.x(), mScroll.y(), false, false); @@ -1026,13 +1023,6 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, cachedRoot->setFocusBounds(focused->getRect()); int globalOffsetX, globalOffsetY; GetGlobalOffset(frame, &globalOffsetX, &globalOffsetY); -#if USE(ACCELERATED_COMPOSITING) - // The frame itself might be composited so we need to track the layer. Do - // not track the base frame's layer as the main content is draw as part of - // BaseLayerAndroid's picture. - if (frame != root && frame->contentRenderer()->usesCompositing() && node->lastChild()) - TrackLayer(layerTracker, frame->contentRenderer(), node->lastChild(), globalOffsetX, globalOffsetY); -#endif while (walk.mMore || (node = node->traverseNextNode()) != NULL) { #if DUMP_NAV_CACHE nodeIndex++; @@ -1115,8 +1105,37 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, #if USE(ACCELERATED_COMPOSITING) // If this renderer has its own layer and the layer is composited, // start tracking it. - if (lastChild && nodeRenderer->hasLayer() && toRenderBox(nodeRenderer)->layer()->backing()) - TrackLayer(layerTracker, nodeRenderer, lastChild, globalOffsetX, globalOffsetY); + if (lastChild && nodeRenderer->hasLayer() && toRenderBox(nodeRenderer)->layer()->backing()) { + TrackLayer(layerTracker, nodeRenderer, lastChild, + globalOffsetX, globalOffsetY); + size_t size = tracker.size(); + LayerAndroid* layer = layerTracker.last().mLayer; + if (layer) { + int id = layer->uniqueId(); + const RenderLayer* renderLayer = + layerTracker.last().mRenderLayer; + // Global location + IntPoint loc = renderLayer->absoluteBoundingBox().location(); + loc.move(globalOffsetX, globalOffsetY); + // if this is a child of a CachedNode, add a layer + size_t limit = cachedFrame->layerCount() == 0 ? 0 : + cachedFrame->lastLayer()->cachedNodeIndex(); + for (size_t index = 1; index < tracker.size(); index++) { + const FocusTracker& cursorNode = tracker.at(index); + size_t index = cursorNode.mCachedNodeIndex; + if (index <= limit) { // already added? + DBG_NAV_LOGD("index=%d limit=%d id=%d", index, + limit, id); + continue; + } + DBG_NAV_LOGD("call add layer %d", id); + CachedNode* trackedNode = cachedFrame->getIndex(index); + trackedNode->setIsInLayer(true); + trackedNode->setIsUnclipped(true); + AddLayer(cachedFrame, index, loc, id); + } + } + } #endif } bool more = walk.mMore; @@ -2917,9 +2936,7 @@ void CacheBuilder::TrackLayer(WTF::Vector& layerTracker, aLayer = aLayer->getChild(0)->getChild(0); if (!aLayer) return; - // Prevent a crash when scrolling a layer that does not have a parent. - if (layer->stackingContext()) - layer->scrollToOffset(0, 0, false, false); + layer->scrollToOffset(0, 0, false, false); #endif layerTracker.grow(layerTracker.size() + 1); LayerTracker& indexTracker = layerTracker.last(); -- 2.11.0