Title: [141889] trunk
Revision
141889
Author
[email protected]
Date
2013-02-05 05:54:16 -0800 (Tue, 05 Feb 2013)

Log Message

INPUT_MULTIPLE_FIELDS_UI: element.focus() should not focus on disabled sub-fields.
https://bugs.webkit.org/show_bug.cgi?id=108924

Reviewed by Kentaro Hara.

Source/WebCore:

The first field may be non-focusable. We should search sub-fields for
focusable one.

Test: fast/forms/date-multiple-fields/date-multiple-fields-focus.html

* html/shadow/DateTimeEditElement.cpp:
(WebCore::DateTimeEditElement::focusOnNextFocusableField):
Added. A private helper function.
(WebCore::DateTimeEditElement::focusIfNoFocus): Use focusOnNextFocusableField.
(WebCore::DateTimeEditElement::focusByOwner): Ditto.
(WebCore::DateTimeEditElement::focusOnNextField): Ditto.
* html/shadow/DateTimeEditElement.h:
(DateTimeEditElement): Declare focusOnNextFocusableField.

LayoutTests:

* fast/forms/date-multiple-fields/date-multiple-fields-focus-expected.txt: Added.
* fast/forms/date-multiple-fields/date-multiple-fields-focus.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (141888 => 141889)


--- trunk/LayoutTests/ChangeLog	2013-02-05 13:52:22 UTC (rev 141888)
+++ trunk/LayoutTests/ChangeLog	2013-02-05 13:54:16 UTC (rev 141889)
@@ -1,3 +1,13 @@
+2013-02-05  Kent Tamura  <[email protected]>
+
+        INPUT_MULTIPLE_FIELDS_UI: element.focus() should not focus on disabled sub-fields.
+        https://bugs.webkit.org/show_bug.cgi?id=108924
+
+        Reviewed by Kentaro Hara.
+
+        * fast/forms/date-multiple-fields/date-multiple-fields-focus-expected.txt: Added.
+        * fast/forms/date-multiple-fields/date-multiple-fields-focus.html: Added.
+
 2013-02-04  Vsevolod Vlasov  <[email protected]>
 
         Web Inspector: Create separate project for each file system added to inspector.

Added: trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus-expected.txt (0 => 141889)


--- trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus-expected.txt	2013-02-05 13:54:16 UTC (rev 141889)
@@ -0,0 +1,11 @@
+Check if element.focus() does not focus on disabled sub-fields.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS internals.youngestShadowRoot(dateInput).activeElement.getAttribute("pseudo") is "-webkit-datetime-edit-month-field"
+PASS internals.youngestShadowRoot(dateInput).activeElement.getAttribute("pseudo") is "-webkit-datetime-edit-month-field"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus.html (0 => 141889)


--- trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-focus.html	2013-02-05 13:54:16 UTC (rev 141889)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<body>
+<script src=""
+<script>
+description('Check if element.focus() does not focus on disabled sub-fields.');
+if (window.internals)
+    internals.settings.setLangAttributeAwareFormControlUIEnabled(true);
+else
+    debug('This test requires DRT/WRT.');
+
+var dateInput = document.createElement('input');
+dateInput.lang = 'ja-jp';
+dateInput.type = 'date';
+dateInput.min = '2013-02-01';
+dateInput.max = '2013-03-30';
+document.body.appendChild(dateInput);
+// Assume the date format is "yyyy/MM/dd"
+
+dateInput.focus();
+// Because the year field is fixed, the first focusable element is the
+// month field.
+shouldBeEqualToString('internals.youngestShadowRoot(dateInput).activeElement.getAttribute("pseudo")', '-webkit-datetime-edit-month-field');
+dateInput.blur();
+dateInput.focus();
+shouldBeEqualToString('internals.youngestShadowRoot(dateInput).activeElement.getAttribute("pseudo")', '-webkit-datetime-edit-month-field');
+
+dateInput.remove();
+</script>
+<script src=""
+</body>

Modified: trunk/Source/WebCore/ChangeLog (141888 => 141889)


--- trunk/Source/WebCore/ChangeLog	2013-02-05 13:52:22 UTC (rev 141888)
+++ trunk/Source/WebCore/ChangeLog	2013-02-05 13:54:16 UTC (rev 141889)
@@ -1,3 +1,24 @@
+2013-02-05  Kent Tamura  <[email protected]>
+
+        INPUT_MULTIPLE_FIELDS_UI: element.focus() should not focus on disabled sub-fields.
+        https://bugs.webkit.org/show_bug.cgi?id=108924
+
+        Reviewed by Kentaro Hara.
+
+        The first field may be non-focusable. We should search sub-fields for
+        focusable one.
+
+        Test: fast/forms/date-multiple-fields/date-multiple-fields-focus.html
+
+        * html/shadow/DateTimeEditElement.cpp:
+        (WebCore::DateTimeEditElement::focusOnNextFocusableField):
+        Added. A private helper function.
+        (WebCore::DateTimeEditElement::focusIfNoFocus): Use focusOnNextFocusableField.
+        (WebCore::DateTimeEditElement::focusByOwner): Ditto.
+        (WebCore::DateTimeEditElement::focusOnNextField): Ditto.
+        * html/shadow/DateTimeEditElement.h:
+        (DateTimeEditElement): Declare focusOnNextFocusableField.
+
 2013-02-04  Vsevolod Vlasov  <[email protected]>
 
         Web Inspector: Create separate project for each file system added to inspector.

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (141888 => 141889)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2013-02-05 13:52:22 UTC (rev 141888)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2013-02-05 13:54:16 UTC (rev 141889)
@@ -506,15 +506,12 @@
 {
     if (focusedFieldIndex() != invalidFieldIndex)
         return;
-
-    if (DateTimeFieldElement* field = fieldAt(0))
-        field->focus();
+    focusOnNextFocusableField(0);
 }
 
 void DateTimeEditElement::focusByOwner()
 {
-    if (DateTimeFieldElement* field = fieldAt(0))
-        field->focus();
+    focusOnNextFocusableField(0);
 }
 
 DateTimeFieldElement* DateTimeEditElement::focusedField() const
@@ -538,12 +535,9 @@
         m_editControlOwner->editControlValueChanged();
 }
 
-bool DateTimeEditElement::focusOnNextField(const DateTimeFieldElement& field)
+bool DateTimeEditElement::focusOnNextFocusableField(size_t startIndex)
 {
-    const size_t startFieldIndex = fieldIndexOf(field);
-    if (startFieldIndex == invalidFieldIndex)
-        return false;
-    for (size_t fieldIndex = startFieldIndex + 1; fieldIndex < m_fields.size(); ++fieldIndex) {
+    for (size_t fieldIndex = startIndex; fieldIndex < m_fields.size(); ++fieldIndex) {
         if (m_fields[fieldIndex]->isFocusable()) {
             m_fields[fieldIndex]->focus();
             return true;
@@ -552,6 +546,14 @@
     return false;
 }
 
+bool DateTimeEditElement::focusOnNextField(const DateTimeFieldElement& field)
+{
+    const size_t startFieldIndex = fieldIndexOf(field);
+    if (startFieldIndex == invalidFieldIndex)
+        return false;
+    return focusOnNextFocusableField(startFieldIndex + 1);
+}
+
 bool DateTimeEditElement::focusOnPreviousField(const DateTimeFieldElement& field)
 {
     const size_t startFieldIndex = fieldIndexOf(field);

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.h (141888 => 141889)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2013-02-05 13:52:22 UTC (rev 141888)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2013-02-05 13:54:16 UTC (rev 141889)
@@ -123,6 +123,7 @@
     size_t fieldIndexOf(const DateTimeFieldElement&) const;
     DateTimeFieldElement* focusedField() const;
     size_t focusedFieldIndex() const;
+    bool focusOnNextFocusableField(size_t startIndex);
     bool isDisabled() const;
     bool isReadOnly() const;
     void layout(const LayoutParameters&, const DateComponents&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to