[CTTE] RenderTextControlMultiLine's element is always a HTMLTextAreaElement.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Sep 2013 05:09:46 +0000 (05:09 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Sep 2013 05:09:46 +0000 (05:09 +0000)
<https://webkit.org/b/121271>

Reviewed by Anders Carlsson.

Add RenderTextControlMultiLine::textAreaElement(), hiding element().
This function also returns a reference since this renderer cannot be anonymous.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155667 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/HTMLTextAreaElement.cpp
Source/WebCore/rendering/RenderTextControlMultiLine.cpp
Source/WebCore/rendering/RenderTextControlMultiLine.h

index eca1d16..552c16f 100644 (file)
@@ -1,3 +1,13 @@
+2013-09-12  Andreas Kling  <akling@apple.com>
+
+        [CTTE] RenderTextControlMultiLine's element is always a HTMLTextAreaElement.
+        <https://webkit.org/b/121271>
+
+        Reviewed by Anders Carlsson.
+
+        Add RenderTextControlMultiLine::textAreaElement(), hiding element().
+        This function also returns a reference since this renderer cannot be anonymous.
+
 2013-09-12  Tim Horton  <timothy_horton@apple.com>
 
         [mac] Cache rendered image in PDFDocumentImage
index d3f3c8e..ae9364f 100644 (file)
@@ -210,7 +210,7 @@ void HTMLTextAreaElement::parseAttribute(const QualifiedName& name, const Atomic
 
 RenderObject* HTMLTextAreaElement::createRenderer(RenderArena* arena, RenderStyle*)
 {
-    return new (arena) RenderTextControlMultiLine(this);
+    return new (arena) RenderTextControlMultiLine(*this);
 }
 
 bool HTMLTextAreaElement::appendFormData(FormDataList& encoding, bool)
index c4164ab..1305dec 100644 (file)
 
 namespace WebCore {
 
-RenderTextControlMultiLine::RenderTextControlMultiLine(Element* element)
-    : RenderTextControl(element)
+RenderTextControlMultiLine::RenderTextControlMultiLine(HTMLTextAreaElement& element)
+    : RenderTextControl(&element)
 {
 }
 
 RenderTextControlMultiLine::~RenderTextControlMultiLine()
 {
-    if (element() && element()->inDocument())
-        toHTMLTextAreaElement(element())->rendererWillBeDestroyed();
+    if (textAreaElement().inDocument())
+        textAreaElement().rendererWillBeDestroyed();
+}
+
+HTMLTextAreaElement& RenderTextControlMultiLine::textAreaElement() const
+{
+    ASSERT(RenderObject::node());
+    return toHTMLTextAreaElement(*RenderObject::node());
 }
 
 bool RenderTextControlMultiLine::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction hitTestAction)
@@ -48,7 +54,7 @@ bool RenderTextControlMultiLine::nodeAtPoint(const HitTestRequest& request, HitT
     if (!RenderTextControl::nodeAtPoint(request, result, locationInContainer, accumulatedOffset, hitTestAction))
         return false;
 
-    if (result.innerNode() == element() || result.innerNode() == innerTextElement())
+    if (result.innerNode() == &textAreaElement() || result.innerNode() == innerTextElement())
         hitInnerTextElement(result, locationInContainer.point(), accumulatedOffset);
 
     return true;
@@ -67,13 +73,12 @@ float RenderTextControlMultiLine::getAvgCharWidth(AtomicString family)
 
 LayoutUnit RenderTextControlMultiLine::preferredContentLogicalWidth(float charWidth) const
 {
-    int factor = toHTMLTextAreaElement(element())->cols();
-    return static_cast<LayoutUnit>(ceilf(charWidth * factor)) + scrollbarThickness();
+    return static_cast<LayoutUnit>(ceilf(charWidth * textAreaElement().cols())) + scrollbarThickness();
 }
 
 LayoutUnit RenderTextControlMultiLine::computeControlLogicalHeight(LayoutUnit lineHeight, LayoutUnit nonContentHeight) const
 {
-    return lineHeight * toHTMLTextAreaElement(element())->rows() + nonContentHeight;
+    return lineHeight * textAreaElement().rows() + nonContentHeight;
 }
 
 int RenderTextControlMultiLine::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
index 149828c..853b53d 100644 (file)
 
 namespace WebCore {
 
+class HTMLTextAreaElement;
+
 class RenderTextControlMultiLine FINAL : public RenderTextControl {
 public:
-    RenderTextControlMultiLine(Element*);
+    explicit RenderTextControlMultiLine(HTMLTextAreaElement&);
     virtual ~RenderTextControlMultiLine();
 
+    HTMLTextAreaElement& textAreaElement() const;
+
 private:
+    void element() const WTF_DELETED_FUNCTION;
+
     virtual bool isTextArea() const { return true; }
 
     virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE;