Changeset 128404 in webkit


Ignore:
Timestamp:
Sep 12, 2012 10:50:07 PM (12 years ago)
Author:
yosin@chromium.org
Message:

New time input needs accessibility
https://bugs.webkit.org/show_bug.cgi?id=96032

Reviewed by Chris Fleizach.

Source/WebCore:

This patch adds accessibility support into multiple fields time input
UI by setting "role" HTML attribute of DateTimeFieldElement to "spinbutton"
and changing ARIA attributes to post value change notification.

This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.

Tests: fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes.html

fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification.html

  • html/shadow/DateTimeFieldElement.cpp:

(WebCore::DateTimeFieldElement::DateTimeFieldElement): Changed to set
"role" HTML attribute to "spinbutton".
(WebCore::DateTimeFieldElement::initialize): Changed to set new
parameter axHelpText to aria-help attribute and set aria-valuemax and
aria-valuemin attributes.
(WebCore::DateTimeFieldElement::updateVisibleValue): Changed to set
aria-valuetext and aria-valuenow attributes.

  • html/shadow/DateTimeFieldElement.h:

(DateTimeFieldElement): Changed to add new parameter axHelpText to initialize().

  • html/shadow/DateTimeFieldElements.cpp:

(WebCore::DateTimeAMPMFieldElement::create): Changed to add new argument.
(WebCore::DateTimeHourFieldElement::create): ditto.
(WebCore::DateTimeMillisecondFieldElement::create): ditto.
(WebCore::DateTimeMinuteFieldElement::create): ditto.
(WebCore::DateTimeSecondFieldElement::create): ditto.

  • html/shadow/DateTimeNumericFieldElement.cpp:

(WebCore::DateTimeNumericFieldElement::maximum): Added for DateTimeFieldElement::initialize().
(WebCore::DateTimeNumericFieldElement::minimum): ditto.

  • html/shadow/DateTimeNumericFieldElement.h:

(DateTimeNumericFieldElement): Added maximum() and minimum() declarations.

  • html/shadow/DateTimeSymbolicFieldElement.cpp:

(WebCore::DateTimeSymbolicFieldElement::maximum): Added for DateTimeFieldElement::initialize().
(WebCore::DateTimeSymbolicFieldElement::minimum): ditto.

  • html/shadow/DateTimeSymbolicFieldElement.h:

(DateTimeSymbolicFieldElement): Added maximum() and minimum() declarations.

LayoutTests:

This patch adds two tests for checking accessibility functionalities
in multiple fields time input UI.

This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.

  • fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes-expected.txt: Added.
  • fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes.html: Added to check ARIA attributes used in multiple fields time input UI.
  • fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification-expected.txt: Added.
  • fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification.html: Added to check accessibility notification supports in multiple fields time input UI.
Location:
trunk
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r128402 r128404  
     12012-09-12  Yoshifumi Inoue  <yosin@chromium.org>
     2
     3        New time input needs accessibility
     4        https://bugs.webkit.org/show_bug.cgi?id=96032
     5
     6        Reviewed by Chris Fleizach.
     7
     8        This patch adds two tests for checking accessibility functionalities
     9        in multiple fields time input UI.
     10
     11        This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
     12        ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.
     13
     14        * fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes-expected.txt: Added.
     15        * fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes.html: Added to check ARIA attributes used in multiple fields time input UI.
     16        * fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification-expected.txt: Added.
     17        * fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification.html: Added to check accessibility notification supports in multiple fields time input UI.
     18
    1192012-09-12  Kent Tamura  <tkent@chromium.org>
    220
  • trunk/Source/WebCore/ChangeLog

    r128403 r128404  
     12012-09-12  Yoshifumi Inoue  <yosin@chromium.org>
     2
     3        New time input needs accessibility
     4        https://bugs.webkit.org/show_bug.cgi?id=96032
     5
     6        Reviewed by Chris Fleizach.
     7
     8        This patch adds accessibility support into multiple fields time input
     9        UI by setting "role" HTML attribute of DateTimeFieldElement to "spinbutton"
     10        and changing ARIA attributes to post value change notification.
     11
     12        This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
     13        ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.
     14
     15        Tests: fast/forms/time-multiple-fields/time-multiple-fields-ax-aria-attributes.html
     16               fast/forms/time-multiple-fields/time-multiple-fields-ax-value-changed-notification.html
     17
     18        * html/shadow/DateTimeFieldElement.cpp:
     19        (WebCore::DateTimeFieldElement::DateTimeFieldElement): Changed to set
     20        "role" HTML attribute to "spinbutton".
     21        (WebCore::DateTimeFieldElement::initialize): Changed to set new
     22        parameter axHelpText to aria-help attribute and set aria-valuemax and
     23        aria-valuemin attributes.
     24        (WebCore::DateTimeFieldElement::updateVisibleValue): Changed to set
     25        aria-valuetext and aria-valuenow attributes.
     26        * html/shadow/DateTimeFieldElement.h:
     27        (DateTimeFieldElement): Changed to add new parameter axHelpText to initialize().
     28        * html/shadow/DateTimeFieldElements.cpp:
     29        (WebCore::DateTimeAMPMFieldElement::create): Changed to add new argument.
     30        (WebCore::DateTimeHourFieldElement::create): ditto.
     31        (WebCore::DateTimeMillisecondFieldElement::create): ditto.
     32        (WebCore::DateTimeMinuteFieldElement::create): ditto.
     33        (WebCore::DateTimeSecondFieldElement::create): ditto.
     34        * html/shadow/DateTimeNumericFieldElement.cpp:
     35        (WebCore::DateTimeNumericFieldElement::maximum): Added for DateTimeFieldElement::initialize().
     36        (WebCore::DateTimeNumericFieldElement::minimum): ditto.
     37        * html/shadow/DateTimeNumericFieldElement.h:
     38        (DateTimeNumericFieldElement): Added maximum() and minimum() declarations.
     39        * html/shadow/DateTimeSymbolicFieldElement.cpp:
     40        (WebCore::DateTimeSymbolicFieldElement::maximum): Added for DateTimeFieldElement::initialize().
     41        (WebCore::DateTimeSymbolicFieldElement::minimum): ditto.
     42        * html/shadow/DateTimeSymbolicFieldElement.h:
     43        (DateTimeSymbolicFieldElement): Added maximum() and minimum() declarations.
     44
    1452012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>
    246
  • trunk/Source/WebCore/html/shadow/DateTimeFieldElement.cpp

    r127235 r128404  
    3131#include "HTMLNames.h"
    3232#include "KeyboardEvent.h"
     33#include "LocalizedStrings.h"
    3334#include "RenderObject.h"
    3435#include "Text.h"
     36#include <wtf/text/WTFString.h>
    3537
    3638namespace WebCore {
     
    4648    , m_fieldOwner(&fieldOwner)
    4749{
     50    // On accessibility, DateTimeFieldElement acts like spin button.
     51    setAttribute(roleAttr, "spinbutton");
    4852}
    4953
     
    130134}
    131135
    132 void DateTimeFieldElement::initialize(const AtomicString& shadowPseudoId)
     136void DateTimeFieldElement::initialize(const AtomicString& shadowPseudoId, const String& axHelpText)
    133137{
     138    setAttribute(aria_helpAttr, axHelpText);
     139    setAttribute(aria_valueminAttr, String::number(minimum()));
     140    setAttribute(aria_valuemaxAttr, String::number(maximum()));
    134141    setShadowPseudoId(shadowPseudoId);
    135142    appendChild(Text::create(document(), visibleValue()));
     
    173180
    174181    textNode->replaceWholeText(newVisibleValue, ASSERT_NO_EXCEPTION);
     182    setAttribute(aria_valuetextAttr, hasValue() ? newVisibleValue : AXDateTimeFieldEmptyValueText());
     183    setAttribute(aria_valuenowAttr, newVisibleValue);
    175184
    176185    if (eventBehavior == DispatchEvent && m_fieldOwner)
  • trunk/Source/WebCore/html/shadow/DateTimeFieldElement.h

    r127235 r128404  
    7878    void focusOnNextField();
    7979    virtual void handleKeyboardEvent(KeyboardEvent*) = 0;
    80     void initialize(const AtomicString&);
     80    void initialize(const AtomicString& shadowPseudoId, const String& axHelpText);
     81    virtual int maximum() const = 0;
     82    virtual int minimum() const = 0;
    8183    virtual double unitInMillisecond() const = 0;
    8284    void updateVisibleValue(EventBehavior);
  • trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp

    r127085 r128404  
    2929
    3030#include "DateComponents.h"
     31#include "LocalizedStrings.h"
    3132#include <wtf/DateMath.h>
    3233
     
    4243    DEFINE_STATIC_LOCAL(AtomicString, ampmPsuedoId, ("-webkit-datetime-edit-ampm-field"));
    4344    RefPtr<DateTimeAMPMFieldElement> field = adoptRef(new DateTimeAMPMFieldElement(document, fieldOwner, ampmLabels));
    44     field->initialize(ampmPsuedoId);
     45    field->initialize(ampmPsuedoId, AXAMPMFieldText());
    4546    return field.release();
    4647}
     
    6970    DEFINE_STATIC_LOCAL(AtomicString, hourPsuedoId, ("-webkit-datetime-edit-hour-field"));
    7071    RefPtr<DateTimeHourFieldElement> field = adoptRef(new DateTimeHourFieldElement(document, fieldOwner, minimum, maximum));
    71     field->initialize(hourPsuedoId);
     72    field->initialize(hourPsuedoId, AXHourFieldText());
    7273    return field.release();
    7374}
     
    105106    DEFINE_STATIC_LOCAL(AtomicString, millisecondPsuedoId, ("-webkit-datetime-edit-millisecond-field"));
    106107    RefPtr<DateTimeMillisecondFieldElement> field = adoptRef(new DateTimeMillisecondFieldElement(document, fieldOwner));
    107     field->initialize(millisecondPsuedoId);
     108    field->initialize(millisecondPsuedoId, AXMillisecondFieldText());
    108109    return field.release();
    109110}
     
    130131    DEFINE_STATIC_LOCAL(AtomicString, minutePsuedoId, ("-webkit-datetime-edit-minute-field"));
    131132    RefPtr<DateTimeMinuteFieldElement> field = adoptRef(new DateTimeMinuteFieldElement(document, fieldOwner));
    132     field->initialize(minutePsuedoId);
     133    field->initialize(minutePsuedoId, AXMinuteFieldText());
    133134    return field.release();
    134135}
     
    155156    DEFINE_STATIC_LOCAL(AtomicString, secondPsuedoId, ("-webkit-datetime-edit-second-field"));
    156157    RefPtr<DateTimeSecondFieldElement> field = adoptRef(new DateTimeSecondFieldElement(document, fieldOwner));
    157     field->initialize(secondPsuedoId);
     158    field->initialize(secondPsuedoId, AXSecondFieldText());
    158159    return field.release();
    159160}
  • trunk/Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp

    r127234 r128404  
    112112}
    113113
     114int DateTimeNumericFieldElement::maximum() const
     115{
     116    return m_range.maximum;
     117}
     118
     119int DateTimeNumericFieldElement::minimum() const
     120{
     121    return m_range.minimum;
     122}
     123
    114124void DateTimeNumericFieldElement::setEmptyValue(const DateComponents& dateForReadOnlyField, EventBehavior eventBehavior)
    115125{
  • trunk/Source/WebCore/html/shadow/DateTimeNumericFieldElement.h

    r127234 r128404  
    6666    virtual void didBlur() OVERRIDE FINAL;
    6767    virtual void handleKeyboardEvent(KeyboardEvent*) OVERRIDE FINAL;
     68    virtual int maximum() const OVERRIDE FINAL;
     69    virtual int minimum() const OVERRIDE FINAL;
    6870    virtual void setEmptyValue(const DateComponents& dateForReadOnlyField, EventBehavior) OVERRIDE FINAL;
    6971    virtual void stepDown() OVERRIDE FINAL;
  • trunk/Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.cpp

    r127525 r128404  
    9696}
    9797
     98int DateTimeSymbolicFieldElement::maximum() const
     99{
     100    return static_cast<int>(m_symbols.size());
     101}
     102
     103int DateTimeSymbolicFieldElement::minimum() const
     104{
     105    return 1;
     106}
     107
    98108void DateTimeSymbolicFieldElement::setEmptyValue(const DateComponents&, EventBehavior eventBehavior)
    99109{
  • trunk/Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.h

    r127400 r128404  
    5050    virtual void handleKeyboardEvent(KeyboardEvent*) OVERRIDE FINAL;
    5151    virtual bool hasValue() const OVERRIDE FINAL;
     52    virtual int maximum() const OVERRIDE FINAL;
     53    virtual int minimum() const OVERRIDE FINAL;
    5254    virtual void setEmptyValue(const DateComponents& dateForReadOnlyField, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
    5355    virtual void stepDown() OVERRIDE FINAL;
Note: See TracChangeset for help on using the changeset viewer.