Changeset 81978 in webkit


Ignore:
Timestamp:
Mar 25, 2011 12:08:27 PM (13 years ago)
Author:
eae@chromium.org
Message:

2011-03-25 Emil A Eklund <eae@chromium.org>

Reviewed by Dimitri Glazkov.

Text field "onchange" event is triggered if actual value unchanged
https://bugs.webkit.org/show_bug.cgi?id=36314

Add tests for text field change events.

  • fast/events/onchange-text-form-field-expected.txt: Added.
  • fast/events/onchange-text-form-field.html: Added.

2011-03-25 Emil A Eklund <eae@chromium.org>

Reviewed by Dimitri Glazkov.

Text field "onchange" event is triggered if actual value unchanged
https://bugs.webkit.org/show_bug.cgi?id=36314

Change RenderTextControl::subtreeHasChanged to only return true if the
subtree has changed since the last event was triggered.

  • html/HTMLFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::insertedIntoDocument): (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
  • html/HTMLFormControlElement.h: (WebCore::HTMLTextFormControlElement::setTextAsOfLastFormControlChangeEvent):
  • html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::setChecked): (WebCore::HTMLInputElement::setValue):
  • html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::setValue): (WebCore::HTMLTextAreaElement::setNonDirtyValue):
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r81976 r81978  
     12011-03-25  Emil A Eklund  <eae@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Text field "onchange" event is triggered if actual value unchanged
     6        https://bugs.webkit.org/show_bug.cgi?id=36314
     7
     8        Add tests for text field change events.
     9
     10        * fast/events/onchange-text-form-field-expected.txt: Added.
     11        * fast/events/onchange-text-form-field.html: Added.
     12
    1132011-03-25  Jessie Berlin  <jberlin@apple.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r81977 r81978  
     12011-03-25  Emil A Eklund  <eae@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Text field "onchange" event is triggered if actual value unchanged
     6        https://bugs.webkit.org/show_bug.cgi?id=36314
     7
     8        Change RenderTextControl::subtreeHasChanged to only return true if the
     9        subtree has changed since the last event was triggered.
     10
     11        * html/HTMLFormControlElement.cpp:
     12        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
     13        (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
     14        * html/HTMLFormControlElement.h:
     15        (WebCore::HTMLTextFormControlElement::setTextAsOfLastFormControlChangeEvent):
     16        * html/HTMLInputElement.cpp:
     17        (WebCore::HTMLInputElement::setChecked):
     18        (WebCore::HTMLInputElement::setValue):
     19        * html/HTMLTextAreaElement.cpp:
     20        (WebCore::HTMLTextAreaElement::setValue):
     21        (WebCore::HTMLTextAreaElement::setNonDirtyValue):
     22
    1232011-03-25  Brent Fulgham  <bfulgham@webkit.org>
    224
  • trunk/Source/WebCore/html/HTMLFormControlElement.cpp

    r81947 r81978  
    548548}
    549549
     550void HTMLTextFormControlElement::insertedIntoDocument()
     551{
     552    HTMLFormControlElement::insertedIntoDocument();
     553    setTextAsOfLastFormControlChangeEvent(value());
     554}
     555
    550556void HTMLTextFormControlElement::dispatchFocusEvent()
    551557{
     
    630636}
    631637
     638void HTMLTextFormControlElement::dispatchFormControlChangeEvent()
     639{
     640    if (m_textAsOfLastFormControlChangeEvent != value()) {
     641        HTMLElement::dispatchChangeEvents();
     642        setTextAsOfLastFormControlChangeEvent(value());
     643    }
     644    setChangedSinceLastFormControlChangeEvent(false);
     645}
     646
    632647void HTMLTextFormControlElement::setSelectionRange(int start, int end)
    633648{
  • trunk/Source/WebCore/html/HTMLFormControlElement.h

    r80412 r81978  
    195195    virtual ~HTMLTextFormControlElement();
    196196
     197    virtual void insertedIntoDocument();
     198
    197199    // The derived class should return true if placeholder processing is needed.
    198200    virtual bool supportsPlaceholder() const = 0;
     
    208210    PassRefPtr<Range> selection() const;
    209211
     212    virtual void dispatchFormControlChangeEvent();
     213
    210214    virtual int maxLength() const = 0;
    211215    virtual String value() const = 0;
     
    217221
    218222    virtual void parseMappedAttribute(Attribute*);
     223    virtual void setTextAsOfLastFormControlChangeEvent(String text) { m_textAsOfLastFormControlChangeEvent = text; }
    219224
    220225private:
     
    237242
    238243    RenderTextControl* textRendererAfterUpdateLayout();
     244
     245    String m_textAsOfLastFormControlChangeEvent;
    239246};
    240247
  • trunk/Source/WebCore/html/HTMLInputElement.cpp

    r81652 r81978  
    791791    // because it says only to fire change events at "lose focus" time, which is
    792792    // definitely wrong in practice for these types of elements.
    793     if (sendChangeEvent && inDocument() && m_inputType->shouldSendChangeEventAfterCheckedChanged())
     793    if (sendChangeEvent && inDocument() && m_inputType->shouldSendChangeEventAfterCheckedChanged()) {
     794        setTextAsOfLastFormControlChangeEvent(String());
    794795        dispatchFormControlChangeEvent();
     796    }
    795797}
    796798
     
    912914            dispatchFormControlChangeEvent();
    913915    }
     916
     917    if (isText() && (!focused() || !sendChangeEvent))
     918        setTextAsOfLastFormControlChangeEvent(value);
    914919
    915920    InputElement::notifyFormStateChanged(this);
  • trunk/Source/WebCore/html/HTMLTextAreaElement.cpp

    r81263 r81978  
    292292    m_isDirty = true;
    293293    setNeedsValidityCheck();
     294    setTextAsOfLastFormControlChangeEvent(value);
    294295}
    295296
     
    299300    m_isDirty = false;
    300301    setNeedsValidityCheck();
     302    setTextAsOfLastFormControlChangeEvent(value);
    301303}
    302304
Note: See TracChangeset for help on using the changeset viewer.