Chromium Code Reviews| Index: Source/core/dom/RenderTreeBuilder.h |
| diff --git a/Source/core/dom/RenderTreeBuilder.h b/Source/core/dom/RenderTreeBuilder.h |
| index 30d639c4d921dfedc25c9f910104ecda34f7adc8..1bd50f5949d096b36608aa5c60b07d22840155c8 100644 |
| --- a/Source/core/dom/RenderTreeBuilder.h |
| +++ b/Source/core/dom/RenderTreeBuilder.h |
| @@ -29,6 +29,7 @@ |
| #include "core/dom/Document.h" |
| #include "core/dom/Node.h" |
| #include "core/dom/NodeRenderingTraversal.h" |
| +#include "core/dom/Text.h" |
| #include "wtf/RefPtr.h" |
| namespace blink { |
| @@ -40,12 +41,10 @@ class RenderStyle; |
| class RenderTreeBuilder { |
| STACK_ALLOCATED(); |
| public: |
| - RenderTreeBuilder(Node* node, RenderStyle* style) |
| + RenderTreeBuilder(Node* node) |
| : m_node(node) |
| - , m_renderingParent(nullptr) |
| - , m_style(style) |
| + , m_renderingParent(NodeRenderingTraversal::parent(node)) |
| { |
| - ASSERT(!node->renderer()); |
|
esprehn
2014/11/05 23:20:26
This assert is still valid, we shouldn't create on
|
| ASSERT(node->needsAttach()); |
| ASSERT(node->document().inStyleRecalc()); |
| @@ -54,23 +53,42 @@ public: |
| // will trigger a layout inside childrenChanged. |
| // Mainly HTMLTextAreaElement::childrenChanged calls HTMLTextFormControlElement::setSelectionRange |
| // which does an updateLayoutIgnorePendingStylesheets. |
| - |
| - m_renderingParent = NodeRenderingTraversal::parent(node, &m_parentDetails); |
| } |
| - void createRendererForTextIfNeeded(); |
| - void createRendererForElementIfNeeded(); |
| + void createRendererIfNeeded(); |
| + virtual void createRenderer() = 0; |
| + virtual bool rendererIsNeeded() const; |
|
esprehn
2014/11/05 23:20:25
Does the compiler devirtualize this?
|
| -private: |
| - RenderObject* parentRenderer() const; |
| +protected: |
| + virtual RenderObject* parentRenderer() const; |
| RenderObject* nextRenderer() const; |
| - bool shouldCreateRenderer() const; |
| - RenderStyle& style() const; |
| RawPtrWillBeMember<Node> m_node; |
| RawPtrWillBeMember<ContainerNode> m_renderingParent; |
| - NodeRenderingTraversal::ParentDetails m_parentDetails; |
| - mutable RefPtr<RenderStyle> m_style; |
| +}; |
| + |
| +class RenderTreeBuilderForElement : public RenderTreeBuilder { |
| +public: |
| + RenderTreeBuilderForElement(Element* element, PassRefPtr<RenderStyle> style) |
| + : RenderTreeBuilder(element) |
| + , m_style(style) { } |
| + |
| + virtual void createRenderer() override final; |
| + virtual bool rendererIsNeeded() const override final; |
| + |
| +private: |
| + virtual RenderObject* parentRenderer() const override final; |
| + |
| + RefPtr<RenderStyle> m_style; |
| +}; |
| + |
| +class RenderTreeBuilderForText : public RenderTreeBuilder { |
| +public: |
| + RenderTreeBuilderForText(Text* text) |
| + : RenderTreeBuilder(text) { } |
| + |
| + virtual void createRenderer() override final; |
| + virtual bool rendererIsNeeded() const override final; |
| }; |
| } // namespace blink |