Title: [131284] branches/chromium/1271
Revision
131284
Author
[email protected]
Date
2012-10-14 18:21:54 -0700 (Sun, 14 Oct 2012)

Log Message

Merge 130848 - Sub-fields in input[type=time] should not be focusable if the input is disabled or read-only
https://bugs.webkit.org/show_bug.cgi?id=98850

Reviewed by Kentaro Hara.

Source/WebCore:

Covered by additional test cases of
time-multiple-fields/time-multiple-fields-keyboard-events.html and
time-multiple-fields/time-multiple-fields-mouse-events.html.

* html/shadow/DateTimeFieldElement.h:
(FieldOwner): Add isFieldOwnerDisabledOrReadOnly.
* html/shadow/DateTimeFieldElement.cpp:
(WebCore::DateTimeFieldElement::isFocusable):
Check isFieldOwnerDisabledOrReadOnly, and calls HTMLElement::isFocusable()
just in case.
* html/shadow/DateTimeEditElement.cpp:
(WebCore::DateTimeEditElement::isFieldOwnerDisabledOrReadOnly): Added.
* html/shadow/DateTimeEditElement.h:
(DateTimeEditElement): Declare isFieldOwnerDisabledOrReadOnly.

LayoutTests:

* fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events-expected.txt:
* fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html:
* fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt:
* fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html:


[email protected]
Review URL: https://codereview.chromium.org/11150011

Modified Paths

Diff

Modified: branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events-expected.txt (131283 => 131284)


--- branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events-expected.txt	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events-expected.txt	2012-10-15 01:21:54 UTC (rev 131284)
@@ -26,6 +26,9 @@
 PASS input.value is "03:05"
 PASS input.value is "07:05"
 PASS document.activeElement.id is "another"
+== Tab navigation should skip disabled/readonly inputs ==
+PASS document.activeElement.id is "another"
+PASS document.activeElement.id is "another"
 == Shfit+Tab key ==
 PASS input.value is "15:00"
 PASS input.value is "15:03"

Modified: branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html (131283 => 131284)


--- branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html	2012-10-15 01:21:54 UTC (rev 131284)
@@ -98,6 +98,19 @@
 keyDown('\t');
 shouldBeEqualToString('document.activeElement.id', 'another');
 
+beginTest('Tab navigation should skip disabled/readonly inputs', '');
+before.focus();
+input.disabled = true;
+keyDown('\t');
+shouldBeEqualToString('document.activeElement.id', 'another');
+input.disabled = false;
+
+before.focus();
+input.readOnly = true;
+keyDown('\t');
+shouldBeEqualToString('document.activeElement.id', 'another');
+input.readOnly = false;
+
 beginTest('Shfit+Tab key', '03:00');
 another.focus();
 keyDown('\t', ['shiftKey']);

Modified: branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt (131283 => 131284)


--- branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt	2012-10-15 01:21:54 UTC (rev 131284)
@@ -17,6 +17,9 @@
 PASS input.value is "02:25"
 = Click down part of spin button =
 PASS input.value is "02:24"
+= Click on a disabled/readonly field =
+PASS input.value is "02:24"
+PASS input.value is "02:24"
 
 PASS successfullyParsed is true
 

Modified: branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html (131283 => 131284)


--- branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html	2012-10-15 01:21:54 UTC (rev 131284)
@@ -66,6 +66,20 @@
 mouseClick();
 shouldBeEqualToString('input.value', '02:24');
 
+debug('= Click on a disabled/readonly field =');
+input.disabled = true;
+mouseMoveTo(12, 14);
+mouseClick();
+keyDown('upArrow');
+shouldBeEqualToString('input.value', '02:24'); // Not changed.
+input.disabled = false;
+input.readOnly = true;
+mouseMoveTo(12, 14);
+mouseClick();
+keyDown('upArrow');
+shouldBeEqualToString('input.value', '02:24'); // Not changed.
+input.readOnly = false;
+
 debug('');
 </script>
 <script src=""

Modified: branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.cpp (131283 => 131284)


--- branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-10-15 01:21:54 UTC (rev 131284)
@@ -335,6 +335,11 @@
     return m_editControlOwner && m_editControlOwner->isEditControlOwnerDisabled();
 }
 
+bool DateTimeEditElement::isFieldOwnerDisabledOrReadOnly() const
+{
+    return isDisabled() || isReadOnly();
+}
+
 bool DateTimeEditElement::isReadOnly() const
 {
     return m_editControlOwner && m_editControlOwner->isEditControlOwnerReadOnly();

Modified: branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.h (131283 => 131284)


--- branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-10-15 01:21:54 UTC (rev 131284)
@@ -108,6 +108,7 @@
     virtual void fieldValueChanged() OVERRIDE FINAL;
     virtual bool focusOnNextField(const DateTimeFieldElement&) OVERRIDE FINAL;
     virtual bool focusOnPreviousField(const DateTimeFieldElement&) OVERRIDE FINAL;
+    virtual bool isFieldOwnerDisabledOrReadOnly() const OVERRIDE FINAL;
 
     // SpinButtonElement::SpinButtonOwner functions.
     virtual void focusAndSelectSpinButtonOwner() OVERRIDE FINAL;

Modified: branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.cpp (131283 => 131284)


--- branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.cpp	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.cpp	2012-10-15 01:21:54 UTC (rev 131284)
@@ -144,7 +144,11 @@
 
 bool DateTimeFieldElement::isFocusable() const
 {
-    return !isReadOnly();
+    if (isReadOnly())
+        return false;
+    if (m_fieldOwner && m_fieldOwner->isFieldOwnerDisabledOrReadOnly())
+        return false;
+    return HTMLElement::isFocusable();
 }
 
 bool DateTimeFieldElement::isReadOnly() const

Modified: branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.h (131283 => 131284)


--- branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.h	2012-10-15 00:28:18 UTC (rev 131283)
+++ branches/chromium/1271/Source/WebCore/html/shadow/DateTimeFieldElement.h	2012-10-15 01:21:54 UTC (rev 131284)
@@ -55,6 +55,7 @@
         virtual void fieldValueChanged() = 0;
         virtual bool focusOnNextField(const DateTimeFieldElement&) = 0;
         virtual bool focusOnPreviousField(const DateTimeFieldElement&) = 0;
+        virtual bool isFieldOwnerDisabledOrReadOnly() const = 0;
     };
 
     virtual void defaultEventHandler(Event*) OVERRIDE;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to