Commit e6cd79ca authored by eric@webkit.org's avatar eric@webkit.org

2009-09-26 Kent Tamura <tkent@chromium.org>

        Reviewed by David Kilzer.

        Move placeholder-related code to HTMLTextFormControlElement from
        HTMLInputElement, WMLInputElement, InputElement, and
        HTMLTextAreaElement.
        https://bugs.webkit.org/show_bug.cgi?id=28703

        * dom/InputElement.cpp:
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::setValueFromRenderer):
        * dom/InputElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::~HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::handleFocusEvent):
        (WebCore::HTMLTextFormControlElement::handleBlurEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::supportsPlaceholder):
        (WebCore::HTMLInputElement::isEmptyValue):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::createRenderer):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::supportsPlaceholder):
        (WebCore::HTMLTextAreaElement::isEmptyValue):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * rendering/RenderTextControlSingleLine.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::createRenderer):
        * wml/WMLInputElement.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@48792 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent a100fd7b
2009-09-26 Kent Tamura <tkent@chromium.org>
Reviewed by David Kilzer.
Move placeholder-related code to HTMLTextFormControlElement from
HTMLInputElement, WMLInputElement, InputElement, and
HTMLTextAreaElement.
https://bugs.webkit.org/show_bug.cgi?id=28703
* dom/InputElement.cpp:
(WebCore::InputElement::dispatchFocusEvent):
(WebCore::InputElement::dispatchBlurEvent):
(WebCore::InputElement::setValueFromRenderer):
* dom/InputElement.h:
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
(WebCore::HTMLTextFormControlElement::~HTMLTextFormControlElement):
(WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
(WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
(WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
(WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
* html/HTMLFormControlElement.h:
(WebCore::HTMLTextFormControlElement::handleFocusEvent):
(WebCore::HTMLTextFormControlElement::handleBlurEvent):
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::HTMLInputElement):
(WebCore::HTMLInputElement::handleFocusEvent):
(WebCore::HTMLInputElement::handleBlurEvent):
(WebCore::HTMLInputElement::parseMappedAttribute):
(WebCore::HTMLInputElement::createRenderer):
(WebCore::HTMLInputElement::setValue):
(WebCore::HTMLInputElement::setValueFromRenderer):
* html/HTMLInputElement.h:
(WebCore::HTMLInputElement::supportsPlaceholder):
(WebCore::HTMLInputElement::isEmptyValue):
* html/HTMLIsIndexElement.cpp:
(WebCore::HTMLIsIndexElement::parseMappedAttribute):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
(WebCore::HTMLTextAreaElement::createRenderer):
* html/HTMLTextAreaElement.h:
(WebCore::HTMLTextAreaElement::supportsPlaceholder):
(WebCore::HTMLTextAreaElement::isEmptyValue):
* rendering/RenderTextControl.cpp:
(WebCore::RenderTextControl::RenderTextControl):
* rendering/RenderTextControl.h:
* rendering/RenderTextControlMultiLine.cpp:
(WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
* rendering/RenderTextControlMultiLine.h:
* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
(WebCore::RenderTextControlSingleLine::updateFromElement):
* rendering/RenderTextControlSingleLine.h:
* wml/WMLInputElement.cpp:
(WebCore::WMLInputElement::setValue):
(WebCore::WMLInputElement::createRenderer):
* wml/WMLInputElement.h:
2009-09-26 Shu Chang <Chang.Shu@nokia.com>
Reviewed by Alexey Proskuryakov.
......
......@@ -56,8 +56,6 @@ void InputElement::dispatchFocusEvent(InputElement* inputElement, Element* eleme
if (!inputElement->isTextField())
return;
updatePlaceholderVisibility(inputElement, element);
Document* document = element->document();
if (inputElement->isPasswordField() && document->frame())
document->setUseSecureKeyboardEntryWhenActive(true);
......@@ -73,29 +71,12 @@ void InputElement::dispatchBlurEvent(InputElement* inputElement, Element* elemen
if (!frame)
return;
updatePlaceholderVisibility(inputElement, element);
if (inputElement->isPasswordField())
document->setUseSecureKeyboardEntryWhenActive(false);
frame->textFieldDidEndEditing(element);
}
bool InputElement::placeholderShouldBeVisible(const InputElement* inputElement, const Element* element)
{
return inputElement->value().isEmpty()
&& element->document()->focusedNode() != element
&& !inputElement->placeholder().isEmpty();
}
void InputElement::updatePlaceholderVisibility(InputElement* inputElement, Element* element, bool placeholderValueChanged)
{
ASSERT(inputElement->isTextField());
bool placeholderVisible = inputElement->placeholderShouldBeVisible();
if (element->renderer())
toRenderTextControlSingleLine(element->renderer())->updatePlaceholderVisibility(placeholderVisible, placeholderValueChanged);
}
void InputElement::updateFocusAppearance(InputElementData& data, InputElement* inputElement, Element* element, bool restorePreviousSelection)
{
ASSERT(inputElement->isTextField());
......@@ -138,10 +119,7 @@ void InputElement::aboutToUnload(InputElement* inputElement, Element* element)
void InputElement::setValueFromRenderer(InputElementData& data, InputElement* inputElement, Element* element, const String& value)
{
// Renderer and our event handler are responsible for sanitizing values.
ASSERT(value == inputElement->sanitizeValue(value) || inputElement->sanitizeValue(value).isEmpty());
if (inputElement->isTextField())
updatePlaceholderVisibility(inputElement, element);
ASSERT_UNUSED(inputElement, value == inputElement->sanitizeValue(value) || inputElement->sanitizeValue(value).isEmpty());
// Workaround for bug where trailing \n is included in the result of textContent.
// The assert macro above may also be simplified to: value == constrainValue(value)
......
......@@ -44,16 +44,12 @@ public:
virtual bool isSearchField() const = 0;
virtual bool isTextField() const = 0;
virtual bool placeholderShouldBeVisible() const = 0;
virtual bool searchEventsShouldBeDispatched() const = 0;
virtual int size() const = 0;
virtual String value() const = 0;
virtual void setValue(const String&) = 0;
virtual String placeholder() const = 0;
virtual void setPlaceholder(const String&) = 0;
virtual String sanitizeValue(const String&) const = 0;
virtual void setValueFromRenderer(const String&) = 0;
......@@ -66,8 +62,6 @@ public:
protected:
static void dispatchFocusEvent(InputElement*, Element*);
static void dispatchBlurEvent(InputElement*, Element*);
static bool placeholderShouldBeVisible(const InputElement*, const Element*);
static void updatePlaceholderVisibility(InputElement*, Element*, bool placeholderValueChanged = false);
static void updateFocusAppearance(InputElementData&, InputElement*, Element*, bool restorePreviousSelection);
static void updateSelectionRange(InputElement*, Element*, int start, int end);
static void aboutToUnload(InputElement*, Element*);
......
......@@ -39,6 +39,7 @@
#include "MappedAttribute.h"
#include "Page.h"
#include "RenderBox.h"
#include "RenderTextControl.h"
#include "RenderTheme.h"
#include "ValidityState.h"
......@@ -368,4 +369,43 @@ void HTMLFormControlElementWithState::finishParsingChildren()
}
}
HTMLTextFormControlElement::HTMLTextFormControlElement(const QualifiedName& tagName, Document* doc, HTMLFormElement* form)
: HTMLFormControlElementWithState(tagName, doc, form)
{
}
HTMLTextFormControlElement::~HTMLTextFormControlElement()
{
}
void HTMLTextFormControlElement::dispatchFocusEvent()
{
if (supportsPlaceholder())
updatePlaceholderVisibility(false);
handleFocusEvent();
HTMLFormControlElementWithState::dispatchFocusEvent();
}
void HTMLTextFormControlElement::dispatchBlurEvent()
{
if (supportsPlaceholder())
updatePlaceholderVisibility(false);
handleBlurEvent();
HTMLFormControlElementWithState::dispatchBlurEvent();
}
bool HTMLTextFormControlElement::placeholderShouldBeVisible() const
{
return supportsPlaceholder()
&& isEmptyValue()
&& document()->focusedNode() != this
&& !getAttribute(placeholderAttr).isEmpty();
}
void HTMLTextFormControlElement::updatePlaceholderVisibility(bool placeholderValueChanged)
{
if (supportsPlaceholder() && renderer())
toRenderTextControl(renderer())->updatePlaceholderVisibility(placeholderShouldBeVisible(), placeholderValueChanged);
}
} // namespace Webcore
......@@ -143,6 +143,28 @@ protected:
virtual void didMoveToNewOwnerDocument();
};
class HTMLTextFormControlElement : public HTMLFormControlElementWithState {
public:
HTMLTextFormControlElement(const QualifiedName&, Document*, HTMLFormElement*);
virtual ~HTMLTextFormControlElement();
virtual void dispatchFocusEvent();
virtual void dispatchBlurEvent();
protected:
bool placeholderShouldBeVisible() const;
void updatePlaceholderVisibility(bool);
private:
// A subclass should return true if placeholder processing is needed.
virtual bool supportsPlaceholder() const = 0;
// Returns true if user-editable value is empty. This is used to check placeholder visibility.
virtual bool isEmptyValue() const = 0;
// Called in dispatchFocusEvent(), after placeholder process, before calling parent's dispatchFocusEvent().
virtual void handleFocusEvent() { }
// Called in dispatchBlurEvent(), after placeholder process, before calling parent's dispatchBlurEvent().
virtual void handleBlurEvent() { }
};
} //namespace
#endif
......@@ -71,7 +71,7 @@ using namespace HTMLNames;
const int maxSavedResults = 256;
HTMLInputElement::HTMLInputElement(const QualifiedName& tagName, Document* doc, HTMLFormElement* f)
: HTMLFormControlElementWithState(tagName, doc, f)
: HTMLTextFormControlElement(tagName, doc, f)
, m_xPos(0)
, m_yPos(0)
, m_maxResults(-1)
......@@ -257,20 +257,17 @@ bool HTMLInputElement::shouldUseInputMethod() const
return m_type == TEXT || m_type == SEARCH || m_type == ISINDEX;
}
void HTMLInputElement::dispatchFocusEvent()
void HTMLInputElement::handleFocusEvent()
{
InputElement::dispatchFocusEvent(this, this);
if (isTextField())
m_autofilled = false;
HTMLFormControlElementWithState::dispatchFocusEvent();
}
void HTMLInputElement::dispatchBlurEvent()
void HTMLInputElement::handleBlurEvent()
{
InputElement::dispatchBlurEvent(this, this);
HTMLFormControlElementWithState::dispatchBlurEvent();
}
void HTMLInputElement::setType(const String& t)
......@@ -741,8 +738,7 @@ void HTMLInputElement::parseMappedAttribute(MappedAttribute *attr)
}
setNeedsStyleRecalc();
} else if (attr->name() == placeholderAttr) {
if (isTextField())
updatePlaceholderVisibility();
updatePlaceholderVisibility(true);
} else if (attr->name() == autosaveAttr ||
attr->name() == incrementalAttr ||
attr->name() == minAttr ||
......@@ -814,7 +810,7 @@ RenderObject *HTMLInputElement::createRenderer(RenderArena *arena, RenderStyle *
case TELEPHONE:
case TEXT:
case URL:
return new (arena) RenderTextControlSingleLine(this);
return new (arena) RenderTextControlSingleLine(this, placeholderShouldBeVisible());
}
ASSERT(false);
return 0;
......@@ -1111,7 +1107,7 @@ void HTMLInputElement::setValue(const String& value)
else {
m_data.setValue(sanitizeValue(value));
if (isTextField()) {
InputElement::updatePlaceholderVisibility(this, this);
updatePlaceholderVisibility(false);
if (inDocument())
document()->updateStyleIfNeeded();
}
......@@ -1151,6 +1147,7 @@ void HTMLInputElement::setValueFromRenderer(const String& value)
{
// File upload controls will always use setFileListFromRenderer.
ASSERT(inputType() != FILE);
updatePlaceholderVisibility(false);
InputElement::setValueFromRenderer(m_data, this, this, value);
}
......@@ -1790,11 +1787,6 @@ bool HTMLInputElement::willValidate() const
inputType() != BUTTON && inputType() != RESET;
}
bool HTMLInputElement::placeholderShouldBeVisible() const
{
return InputElement::placeholderShouldBeVisible(this, this);
}
bool HTMLInputElement::formStringToDouble(const String& src, double* out)
{
// See HTML5 2.4.4.3 `Real numbers.'
......
......@@ -37,7 +37,7 @@ class HTMLOptionElement;
class KURL;
class VisibleSelection;
class HTMLInputElement : public HTMLFormControlElementWithState, public InputElement {
class HTMLInputElement : public HTMLTextFormControlElement, public InputElement {
public:
enum InputType {
TEXT,
......@@ -75,8 +75,6 @@ public:
virtual bool isKeyboardFocusable(KeyboardEvent*) const;
virtual bool isMouseFocusable() const;
virtual bool isEnumeratable() const { return inputType() != IMAGE; }
virtual void dispatchFocusEvent();
virtual void dispatchBlurEvent();
virtual void updateFocusAppearance(bool restorePreviousSelection);
virtual void aboutToUnload();
virtual bool shouldUseInputMethod() const;
......@@ -230,8 +228,6 @@ public:
virtual bool willValidate() const;
virtual bool placeholderShouldBeVisible() const;
// Converts the specified string to a floating number.
// If the conversion fails, the return value is false. Take care that leading or trailing unnecessary characters make failures. This returns false for an empty string input.
// The double* parameter may be 0.
......@@ -241,11 +237,6 @@ protected:
virtual void willMoveToNewOwnerDocument();
virtual void didMoveToNewOwnerDocument();
void updatePlaceholderVisibility()
{
InputElement::updatePlaceholderVisibility(this, this, true);
}
private:
bool storesValueSeparateFromAttribute() const;
......@@ -253,6 +244,11 @@ private:
void registerForActivationCallbackIfNeeded();
void unregisterForActivationCallbackIfNeeded();
virtual bool supportsPlaceholder() const { return isTextField(); }
virtual bool isEmptyValue() const { return value().isEmpty(); }
virtual void handleFocusEvent();
virtual void handleBlurEvent();
virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
virtual bool isRequiredFormControl() const;
......
......@@ -44,7 +44,7 @@ void HTMLIsIndexElement::parseMappedAttribute(MappedAttribute* attr)
if (attr->name() == promptAttr)
setValue(attr->value());
else if (attr->name() == placeholderAttr)
updatePlaceholderVisibility();
updatePlaceholderVisibility(true);
else
// don't call HTMLInputElement::parseMappedAttribute here, as it would
// accept attributes this element does not support
......
......@@ -63,7 +63,7 @@ static inline void notifyFormStateChanged(const HTMLTextAreaElement* element)
}
HTMLTextAreaElement::HTMLTextAreaElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
: HTMLFormControlElementWithState(tagName, document, form)
: HTMLTextFormControlElement(tagName, document, form)
, m_rows(defaultRows)
, m_cols(defaultCols)
, m_wrap(SoftWrap)
......@@ -211,7 +211,7 @@ void HTMLTextAreaElement::parseMappedAttribute(MappedAttribute* attr)
RenderObject* HTMLTextAreaElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderTextControlMultiLine(this);
return new (arena) RenderTextControlMultiLine(this, placeholderShouldBeVisible());
}
bool HTMLTextAreaElement::appendFormData(FormDataList& encoding, bool)
......@@ -448,29 +448,4 @@ bool HTMLTextAreaElement::shouldUseInputMethod() const
return true;
}
bool HTMLTextAreaElement::placeholderShouldBeVisible() const
{
return value().isEmpty()
&& document()->focusedNode() != this
&& !getAttribute(placeholderAttr).isEmpty();
}
void HTMLTextAreaElement::updatePlaceholderVisibility(bool placeholderValueChanged)
{
if (renderer())
toRenderTextControl(renderer())->updatePlaceholderVisibility(placeholderShouldBeVisible(), placeholderValueChanged);
}
void HTMLTextAreaElement::dispatchFocusEvent()
{
updatePlaceholderVisibility(false);
HTMLFormControlElementWithState::dispatchFocusEvent();
}
void HTMLTextAreaElement::dispatchBlurEvent()
{
updatePlaceholderVisibility(false);
HTMLFormControlElementWithState::dispatchBlurEvent();
}
} // namespace
......@@ -31,7 +31,7 @@ namespace WebCore {
class BeforeTextInsertedEvent;
class VisibleSelection;
class HTMLTextAreaElement : public HTMLFormControlElementWithState {
class HTMLTextAreaElement : public HTMLTextFormControlElement {
public:
HTMLTextAreaElement(const QualifiedName&, Document*, HTMLFormElement* = 0);
......@@ -97,17 +97,15 @@ public:
virtual bool shouldUseInputMethod() const;
bool placeholderShouldBeVisible() const;
private:
enum WrapMethod { NoWrap, SoftWrap, HardWrap };
void handleBeforeTextInsertedEvent(BeforeTextInsertedEvent*) const;
static String sanitizeUserInputValue(const String&, unsigned maxLength);
void updateValue() const;
void updatePlaceholderVisibility(bool placeholderValueChanged);
virtual void dispatchFocusEvent();
virtual void dispatchBlurEvent();
virtual bool supportsPlaceholder() const { return true; }
virtual bool isEmptyValue() const { return value().isEmpty(); }
virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
virtual bool isRequiredFormControl() const { return required(); }
......
......@@ -67,9 +67,9 @@ static Color disabledTextColor(const Color& textColor, const Color& backgroundCo
return disabledColor;
}
RenderTextControl::RenderTextControl(Node* node)
RenderTextControl::RenderTextControl(Node* node, bool placeholderVisible)
: RenderBlock(node)
, m_placeholderVisible(false)
, m_placeholderVisible(placeholderVisible)
, m_edited(false)
, m_userEdited(false)
{
......
......@@ -59,7 +59,7 @@ public:
void updatePlaceholderVisibility(bool, bool);
protected:
RenderTextControl(Node*);
RenderTextControl(Node*, bool);
int scrollbarThickness() const;
void adjustInnerTextStyle(const RenderStyle* startStyle, RenderStyle* textBlockStyle) const;
......
......@@ -31,10 +31,9 @@
namespace WebCore {
RenderTextControlMultiLine::RenderTextControlMultiLine(Node* node)
: RenderTextControl(node)
RenderTextControlMultiLine::RenderTextControlMultiLine(Node* node, bool placeholderVisible)
: RenderTextControl(node, placeholderVisible)
{
m_placeholderVisible = static_cast<HTMLTextAreaElement*>(node)->placeholderShouldBeVisible();
}
RenderTextControlMultiLine::~RenderTextControlMultiLine()
......
......@@ -28,7 +28,7 @@ namespace WebCore {
class RenderTextControlMultiLine : public RenderTextControl {
public:
RenderTextControlMultiLine(Node*);
RenderTextControlMultiLine(Node*, bool);
virtual ~RenderTextControlMultiLine();
void forwardEvent(Event*);
......
......@@ -48,14 +48,13 @@ namespace WebCore {
using namespace HTMLNames;
RenderTextControlSingleLine::RenderTextControlSingleLine(Node* node)
: RenderTextControl(node)
RenderTextControlSingleLine::RenderTextControlSingleLine(Node* node, bool placeholderVisible)
: RenderTextControl(node, placeholderVisible)
, m_searchPopupIsVisible(false)
, m_shouldDrawCapsLockIndicator(false)
, m_searchEventTimer(this, &RenderTextControlSingleLine::searchEventTimerFired)
, m_searchPopup(0)
{
m_placeholderVisible = inputElement()->placeholderShouldBeVisible();
}
RenderTextControlSingleLine::~RenderTextControlSingleLine()
......@@ -460,7 +459,7 @@ void RenderTextControlSingleLine::updateFromElement()
if (m_placeholderVisible) {
ExceptionCode ec = 0;
innerTextElement()->setInnerText(inputElement()->placeholder(), ec);
innerTextElement()->setInnerText(static_cast<Element*>(node())->getAttribute(placeholderAttr), ec);
ASSERT(!ec);
} else
setInnerTextValue(inputElement()->value());
......
......@@ -36,7 +36,7 @@ class TextControlInnerElement;
class RenderTextControlSingleLine : public RenderTextControl, private PopupMenuClient {
public:
RenderTextControlSingleLine(Node*);
RenderTextControlSingleLine(Node*, bool);
virtual ~RenderTextControlSingleLine();
bool placeholderIsVisible() const { return m_placeholderVisible; }
......
......@@ -134,7 +134,6 @@ String WMLInputElement::value() const
void WMLInputElement::setValue(const String& value)
{
InputElement::updatePlaceholderVisibility(this, this);
setFormControlValueMatchesRenderer(false);
m_data.setValue(constrainValue(value));
if (inDocument())
......@@ -221,7 +220,7 @@ void WMLInputElement::copyNonAttributeProperties(const Element* source)
RenderObject* WMLInputElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderTextControlSingleLine(this);
return new (arena) RenderTextControlSingleLine(this, false);
}
void WMLInputElement::detach()
......@@ -318,11 +317,6 @@ void WMLInputElement::documentDidBecomeActive()
reset();
}
bool WMLInputElement::placeholderShouldBeVisible() const
{
return InputElement::placeholderShouldBeVisible(this, this);
}
void WMLInputElement::willMoveToNewOwnerDocument()
{
// Always unregister for cache callbacks when leaving a document, even if we would otherwise like to be registered
......
......@@ -58,8 +58,6 @@ public:
virtual const AtomicString& formControlName() const;
virtual String value() const;
virtual void setValue(const String&);
virtual String placeholder() const { return String(); }
virtual void setPlaceholder(const String&) { }
virtual void setValueFromRenderer(const String&);
virtual bool saveFormControlState(String& value) const;
......@@ -82,7 +80,6 @@ public:
virtual String sanitizeValue(const String& proposedValue) const { return constrainValue(proposedValue); }
virtual void documentDidBecomeActive();
virtual bool placeholderShouldBeVisible() const;
virtual void willMoveToNewOwnerDocument();
virtual void didMoveToNewOwnerDocument();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment