OSDN Git Service

Revert "Enable iframe scrolling."
authorGuang Zhu <guangzhu@google.com>
Tue, 14 Dec 2010 21:51:33 +0000 (13:51 -0800)
committerGuang Zhu <guangzhu@google.com>
Tue, 14 Dec 2010 22:10:00 +0000 (14:10 -0800)
This reverts commit 27dd9e051d0960e985cb677bfc1ce20531ac0456.

WebCore/config.h
WebCore/page/FrameView.cpp
WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
WebCore/rendering/RenderLayerCompositor.cpp
WebKit/android/nav/CacheBuilder.cpp

index c7dd31f..a7dfecd 100644 (file)
 #define ENABLE_BLOB 1
 
 #define ANDROID_FLATTEN_FRAMESET
+#define ANDROID_FLATTEN_IFRAME
 
 #define ANDROID_LAYOUT
 
index 7d9920b..5374487 100644 (file)
@@ -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();
index c0ad248..0fdbc21 100644 (file)
@@ -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);
index 00e596b..ce80e5a 100644 (file)
@@ -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
index 52ee72c..cbc580d 100644 (file)
@@ -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>& 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();