| Differences between
and this patch
- Source/WebCore/ChangeLog +16 lines
Lines 1-3 Source/WebCore/ChangeLog_sec1
1
2011-06-21  Emil A Eklund  <eae@chromium.org>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        input/textarea onchange doesn't fire if value is set in key listener
6
        https://bugs.webkit.org/show_bug.cgi?id=63092
7
8
        Test: fast/events/onchange-setvalue.html
9
10
        * html/HTMLInputElement.cpp:
11
        (WebCore::HTMLInputElement::setValue):
12
        * html/HTMLTextAreaElement.cpp:
13
        (WebCore::HTMLTextAreaElement::setValue):
14
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):
15
        (WebCore::HTMLTextAreaElement::setValueCommon):
16
1
2011-06-21  Mark Pilgrim  <pilgrim@chromium.org>
17
2011-06-21  Mark Pilgrim  <pilgrim@chromium.org>
2
18
3
        Reviewed by Tony Chang.
19
        Reviewed by Tony Chang.
- Source/WebCore/html/HTMLInputElement.cpp -2 / +6 lines
Lines 979-997 void HTMLInputElement::setValue(const St Source/WebCore/html/HTMLInputElement.cpp_sec1
979
    if (!m_inputType->canSetValue(value))
979
    if (!m_inputType->canSetValue(value))
980
        return;
980
        return;
981
981
982
    String sanitizedValue = this->sanitizeValue(value);
983
    if (sanitizedValue == this->value())
984
        return;
985
982
    setFormControlValueMatchesRenderer(false);
986
    setFormControlValueMatchesRenderer(false);
983
    if (m_inputType->storesValueSeparateFromAttribute()) {
987
    if (m_inputType->storesValueSeparateFromAttribute()) {
984
        if (files())
988
        if (files())
985
            files()->clear();
989
            files()->clear();
986
        else {
990
        else {
987
            m_valueIfDirty = sanitizeValue(value);
991
            m_valueIfDirty = sanitizedValue;
988
            m_wasModifiedByUser = sendChangeEvent;
992
            m_wasModifiedByUser = sendChangeEvent;
989
            if (isTextField())
993
            if (isTextField())
990
                updatePlaceholderVisibility(false);
994
                updatePlaceholderVisibility(false);
991
        }
995
        }
992
        setNeedsStyleRecalc();
996
        setNeedsStyleRecalc();
993
    } else
997
    } else
994
        setAttribute(valueAttr, sanitizeValue(value));
998
        setAttribute(valueAttr, sanitizedValue);
995
999
996
    setNeedsValidityCheck();
1000
    setNeedsValidityCheck();
997
1001
- Source/WebCore/html/HTMLTextAreaElement.cpp -2 / +1 lines
Lines 307-313 void HTMLTextAreaElement::setValue(const Source/WebCore/html/HTMLTextAreaElement.cpp_sec1
307
    setValueCommon(value);
307
    setValueCommon(value);
308
    m_isDirty = true;
308
    m_isDirty = true;
309
    setNeedsValidityCheck();
309
    setNeedsValidityCheck();
310
    setTextAsOfLastFormControlChangeEvent(value);
311
}
310
}
312
311
313
void HTMLTextAreaElement::setNonDirtyValue(const String& value)
312
void HTMLTextAreaElement::setNonDirtyValue(const String& value)
Lines 315-321 void HTMLTextAreaElement::setNonDirtyVal Source/WebCore/html/HTMLTextAreaElement.cpp_sec2
315
    setValueCommon(value);
314
    setValueCommon(value);
316
    m_isDirty = false;
315
    m_isDirty = false;
317
    setNeedsValidityCheck();
316
    setNeedsValidityCheck();
318
    setTextAsOfLastFormControlChangeEvent(value);
319
}
317
}
320
318
321
void HTMLTextAreaElement::setValueCommon(const String& value)
319
void HTMLTextAreaElement::setValueCommon(const String& value)
Lines 344-349 void HTMLTextAreaElement::setValueCommon Source/WebCore/html/HTMLTextAreaElement.cpp_sec3
344
    }
342
    }
345
343
346
    notifyFormStateChanged(this);
344
    notifyFormStateChanged(this);
345
    setTextAsOfLastFormControlChangeEvent(normalizedValue);
347
}
346
}
348
347
349
String HTMLTextAreaElement::defaultValue() const
348
String HTMLTextAreaElement::defaultValue() const
- LayoutTests/ChangeLog +12 lines
Lines 1-3 LayoutTests/ChangeLog_sec1
1
2011-06-21  Emil A Eklund  <eae@chromium.org>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        input/textarea onchange doesn't fire if value is set in key listener
6
        https://bugs.webkit.org/show_bug.cgi?id=63092
7
8
        Add test for text field onchange when setting the value in a key listener.
9
10
        * fast/events/onchange-setvalue-expected.txt: Added.
11
        * fast/events/onchange-setvalue.html: Added.
12
1
2011-06-21  Mark Pilgrim  <pilgrim@chromium.org>
13
2011-06-21  Mark Pilgrim  <pilgrim@chromium.org>
2
14
3
        Reviewed by Tony Chang.
15
        Reviewed by Tony Chang.
- LayoutTests/fast/events/onchange-setvalue-expected.txt +8 lines
Line 0 LayoutTests/fast/events/onchange-setvalue-expected.txt_sec1
1
PASS events.length is 2
2
PASS events[0] is 'change e'
3
PASS events[1] is 'change es'
4
PASS events.length is 3
5
PASS events[0] is 'change a'
6
PASS events[1] is 'change ab'
7
PASS events[2] is 'change abc'
8
- LayoutTests/fast/events/onchange-setvalue.html +66 lines
Line 0 LayoutTests/fast/events/onchange-setvalue.html_sec1
1
<html>
2
<head>
3
<script src="../js/resources/js-test-pre.js"></script>
4
<body>
5
    <div id="test">
6
        <input type="text">
7
        <textarea type="text"></textarea>
8
    </div>
9
    <div id="console"></div>
10
</body>
11
<script>
12
13
    if (window.layoutTestController)
14
        layoutTestController.dumpAsText();
15
16
    var events = [];
17
18
    function keyListener(event)
19
    {
20
        event.target.value = event.target.value.replace('t', '');
21
    }
22
    
23
    function changeListener(event)
24
    {
25
        events.push(event.type + ' ' + event.target.value);
26
    }
27
28
    function sendKeysForString(target, str)
29
    {
30
        for (var i = 0; i < str.length; i++) {
31
            target.focus();
32
            eventSender.keyDown(str[i]);
33
            target.blur();
34
        }
35
    }
36
37
    var inputElement = document.body.getElementsByTagName('input')[0];
38
    inputElement.addEventListener('keyup', keyListener, false);
39
    inputElement.addEventListener('change', changeListener, false);
40
41
    if (window.eventSender)
42
        sendKeysForString(inputElement, 'test');
43
44
    shouldBe("events.length", "2");
45
    shouldBe("events[0]", "'change e'");
46
    shouldBe("events[1]", "'change es'");
47
48
49
    var textAreaElement = document.body.getElementsByTagName('textarea')[0];
50
    textAreaElement.addEventListener('keyup', keyListener, false);
51
    textAreaElement.addEventListener('change', changeListener, false);
52
    events.length = 0;
53
54
    if (window.eventSender)
55
        sendKeysForString(textAreaElement, 'atttbttc');
56
57
    shouldBe("events.length", "3");
58
    shouldBe("events[0]", "'change a'");
59
    shouldBe("events[1]", "'change ab'");
60
    shouldBe("events[2]", "'change abc'");
61
62
    // Hide test elements after run to avoid whitespace differences across platforms in the results.
63
    document.getElementById('test').style.display = 'none';
64
</script>
65
</html> 
66

Return to Bug 63092