| Index: Source/core/rendering/RenderLayer.h
|
| diff --git a/Source/core/rendering/RenderLayer.h b/Source/core/rendering/RenderLayer.h
|
| index c2b3cd216b7a1d3a34c53f18a72b8316b51e1644..647b01a43ce9b2f3ac8fa6784b9817406103544d 100644
|
| --- a/Source/core/rendering/RenderLayer.h
|
| +++ b/Source/core/rendering/RenderLayer.h
|
| @@ -542,14 +542,13 @@ public:
|
| // Part of the issue is with subtree relayout: we don't check if our ancestors have some descendant flags dirty, missing some updates.
|
| bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerDescendant; }
|
|
|
| - // This returns true if we have an out of flow positioned descendant whose
|
| - // containing block is not a descendant of ours. If this is true, we cannot
|
| - // automatically opt into composited scrolling since this out of flow
|
| - // positioned descendant would become clipped by us, possibly altering the
|
| - // rendering of the page.
|
| - // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty); here but we may hit the same bugs as visible content above.
|
| + // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. See above.
|
| bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositionedDescendant; }
|
|
|
| + bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; }
|
| + typedef HashMap<RenderLayer*, OwnPtr<HashSet<const RenderObject*> > > AncestorContainingBlockMap;
|
| + void updateHasUnclippedDescendant(AncestorContainingBlockMap&);
|
| +
|
| // Gets the nearest enclosing positioned ancestor layer (also includes
|
| // the <html> layer and the root layer).
|
| RenderLayer* enclosingPositionedAncestor() const;
|
| @@ -839,6 +838,9 @@ private:
|
| void setAncestorChainHasSelfPaintingLayerDescendant();
|
| void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus();
|
|
|
| + void setAncestorChainHasOutOfFlowPositionedDescendant();
|
| + void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
|
| +
|
| bool acceleratedCompositingForOverflowScrollEnabled() const;
|
| void updateDescendantsAreContiguousInStackingOrder();
|
| void updateDescendantsAreContiguousInStackingOrderRecursive(const HashMap<const RenderLayer*, int>&, int& minIndex, int& maxIndex, int& count, bool firstIteration);
|
| @@ -863,11 +865,10 @@ private:
|
| void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle);
|
| void updateScrollbarsAfterLayout();
|
|
|
| - void setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject* containingBlock);
|
| - void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus();
|
| void updateOutOfFlowPositioned(const RenderStyle* oldStyle);
|
|
|
| - void updateNeedsCompositedScrolling();
|
| + virtual void updateNeedsCompositedScrolling() OVERRIDE;
|
| + void setNeedsCompositedScrolling(bool);
|
| void didUpdateNeedsCompositedScrolling();
|
|
|
| // Returns true if the position changed.
|
| @@ -1033,7 +1034,7 @@ private:
|
| void dirtyAncestorChainVisibleDescendantStatus();
|
| void setAncestorChainHasVisibleDescendant();
|
|
|
| - void updateDescendantDependentFlags(HashSet<const RenderObject*>* outOfFlowDescendantContainingBlocks = 0);
|
| + void updateDescendantDependentFlags();
|
|
|
| // This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do.
|
| void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; }
|
| @@ -1132,12 +1133,15 @@ protected:
|
| bool m_hasSelfPaintingLayerDescendant : 1;
|
| bool m_hasSelfPaintingLayerDescendantDirty : 1;
|
|
|
| - // If we have no out of flow positioned descendants and no non-descendant
|
| - // appears between our descendants in stacking order, then we may become a
|
| - // stacking context.
|
| bool m_hasOutOfFlowPositionedDescendant : 1;
|
| bool m_hasOutOfFlowPositionedDescendantDirty : 1;
|
|
|
| + // This is true if we have an out-of-flow positioned descendant whose
|
| + // containing block is our ancestor. If this is the case, the descendant
|
| + // may fall outside of our clip preventing things like opting into
|
| + // composited scrolling (which causes clipping of all descendants).
|
| + bool m_hasUnclippedDescendant : 1;
|
| +
|
| ForceNeedsCompositedScrollingMode m_forceNeedsCompositedScrolling;
|
| bool m_needsCompositedScrolling : 1;
|
|
|
|
|