| Index: Source/core/rendering/RenderObject.h
 | 
| diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h
 | 
| index c0de169ae7ec0f9b7a3895708c42166f0a5e6e09..cca2dc64ab6e00c2684f9fdc225c4c23572a7f6b 100644
 | 
| --- a/Source/core/rendering/RenderObject.h
 | 
| +++ b/Source/core/rendering/RenderObject.h
 | 
| @@ -175,6 +175,10 @@ public:
 | 
|      virtual RenderObjectChildList* virtualChildren() { return 0; }
 | 
|      virtual const RenderObjectChildList* virtualChildren() const { return 0; }
 | 
|  
 | 
| +    // Introduce a non-recursive traversal algorithm for layout
 | 
| +    enum Order { Pre, Post };
 | 
| +    RenderObject* nextForLayout(Order& order, const RenderObject* stayWithin, bool skippingChildren) const;
 | 
| +
 | 
|      RenderObject* nextInPreOrder() const;
 | 
|      RenderObject* nextInPreOrder(const RenderObject* stayWithin) const;
 | 
|      RenderObject* nextInPreOrderAfterChildren() const;
 | 
| @@ -665,6 +669,15 @@ public:
 | 
|      // Subclasses must reimplement this method to compute the size and position
 | 
|      // of this object and all its descendants.
 | 
|      virtual void layout() = 0;
 | 
| +
 | 
| +    // These are hooks into the non-recursive layout variation.  Each subclass
 | 
| +    // would override these methods and implement non-recursive layout.
 | 
| +    virtual bool isNonRecursiveLayout() const { return false; }
 | 
| +    // We have pre/post layout methods in order to facilitate work to be done
 | 
| +    // before children are visited and after.
 | 
| +    virtual void preLayout() { ASSERT_NOT_REACHED(); }
 | 
| +    virtual void postLayout() { ASSERT_NOT_REACHED(); }
 | 
| +
 | 
|      virtual bool updateImageLoadingPriorities() { return false; }
 | 
|      void setHasPendingResourceUpdate(bool hasPendingResourceUpdate) { m_bitfields.setHasPendingResourceUpdate(hasPendingResourceUpdate); }
 | 
|      bool hasPendingResourceUpdate() const { return m_bitfields.hasPendingResourceUpdate(); }
 | 
| 
 |