CTTE: RenderSlider always has an HTMLInputElement.
<https://webkit.org/b/122728>

Reviewed by Anders Carlsson.

This renderer is never anonymous and always has a corresponding
HTMLInputElement. Tighten this up by having the constructor take
the element by reference, and override element() with a stronger
return type.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157370 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 2bd75d7..be34f52 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,5 +1,17 @@
 2013-10-13  Andreas Kling  <akling@apple.com>
 
+        CTTE: RenderSlider always has an HTMLInputElement.
+        <https://webkit.org/b/122728>
+
+        Reviewed by Anders Carlsson.
+
+        This renderer is never anonymous and always has a corresponding
+        HTMLInputElement. Tighten this up by having the constructor take
+        the element by reference, and override element() with a stronger
+        return type.
+
+2013-10-13  Andreas Kling  <akling@apple.com>
+
         Remove two unused AX functions for getting a FrameView*.
         <https://webkit.org/b/122724>
 
diff --git a/Source/WebCore/html/RangeInputType.cpp b/Source/WebCore/html/RangeInputType.cpp
index 6284ab8..0e81e5c 100644
--- a/Source/WebCore/html/RangeInputType.cpp
+++ b/Source/WebCore/html/RangeInputType.cpp
@@ -288,7 +288,7 @@
 
 RenderElement* RangeInputType::createRenderer(RenderArena& arena, RenderStyle&) const
 {
-    return new (arena) RenderSlider(&element());
+    return new (arena) RenderSlider(element());
 }
 
 Decimal RangeInputType::parseToNumber(const String& src, const Decimal& defaultValue) const
diff --git a/Source/WebCore/platform/efl/RenderThemeEfl.cpp b/Source/WebCore/platform/efl/RenderThemeEfl.cpp
index db788b3..009e133 100755
--- a/Source/WebCore/platform/efl/RenderThemeEfl.cpp
+++ b/Source/WebCore/platform/efl/RenderThemeEfl.cpp
@@ -327,8 +327,8 @@
             return; // probably have -webkit-appearance: slider..
 
         RenderSlider* renderSlider = toRenderSlider(object);
-        HTMLInputElement* input = renderSlider->element()->toInputElement();
-        double valueRange = input->maximum() - input->minimum();
+        HTMLInputElement& input = renderSlider->element();
+        double valueRange = input.maximum() - input.minimum();
 
         OwnPtr<Edje_Message_Float_Set> msg = adoptPtr(static_cast<Edje_Message_Float_Set*>(::operator new (sizeof(Edje_Message_Float_Set) + sizeof(double))));
         msg->count = 2;
@@ -342,7 +342,7 @@
         else
             msg->val[0] = 0;
 
-        msg->val[1] = (input->valueAsNumber() - input->minimum()) / valueRange;
+        msg->val[1] = (input.valueAsNumber() - input.minimum()) / valueRange;
         edje_object_message_send(edje, EDJE_MESSAGE_FLOAT_SET, 0, msg.get());
 #if ENABLE(PROGRESS_ELEMENT)
     } else if (type == ProgressBar) {
diff --git a/Source/WebCore/rendering/RenderSlider.cpp b/Source/WebCore/rendering/RenderSlider.cpp
index 633777c..907aa56 100644
--- a/Source/WebCore/rendering/RenderSlider.cpp
+++ b/Source/WebCore/rendering/RenderSlider.cpp
@@ -49,17 +49,22 @@
 
 const int RenderSlider::defaultTrackLength = 129;
 
-RenderSlider::RenderSlider(HTMLInputElement* element)
-    : RenderFlexibleBox(element)
+RenderSlider::RenderSlider(HTMLInputElement& element)
+    : RenderFlexibleBox(&element)
 {
     // We assume RenderSlider works only with <input type=range>.
-    ASSERT(element->isRangeControl());
+    ASSERT(element.isRangeControl());
 }
 
 RenderSlider::~RenderSlider()
 {
 }
 
+HTMLInputElement& RenderSlider::element() const
+{
+    return toHTMLInputElement(nodeForNonAnonymous());
+}
+
 bool RenderSlider::canBeReplacedWithInlineRunIn() const
 {
     return false;
@@ -110,7 +115,7 @@
     StackStats::LayoutCheckPoint layoutCheckPoint;
 
     // FIXME: Find a way to cascade appearance. http://webkit.org/b/62535
-    RenderBox* thumbBox = toHTMLInputElement(*element()).sliderThumbElement()->renderBox();
+    RenderBox* thumbBox = element().sliderThumbElement()->renderBox();
     if (thumbBox && thumbBox->isSliderThumb())
         static_cast<RenderSliderThumb*>(thumbBox)->updateAppearance(style());
 
@@ -119,7 +124,7 @@
 
 bool RenderSlider::inDragMode() const
 {
-    return toHTMLInputElement(*element()).sliderThumbElement()->active();
+    return element().sliderThumbElement()->active();
 }
 
 } // namespace WebCore
diff --git a/Source/WebCore/rendering/RenderSlider.h b/Source/WebCore/rendering/RenderSlider.h
index 02b5d5b..1c47c22 100644
--- a/Source/WebCore/rendering/RenderSlider.h
+++ b/Source/WebCore/rendering/RenderSlider.h
@@ -33,9 +33,11 @@
 public:
     static const int defaultTrackLength;
 
-    explicit RenderSlider(HTMLInputElement*);
+    explicit RenderSlider(HTMLInputElement&);
     virtual ~RenderSlider();
 
+    HTMLInputElement& element() const;
+
     bool inDragMode() const;
 
 private: