Diff
Modified: trunk/LayoutTests/ChangeLog (131852 => 131853)
--- trunk/LayoutTests/ChangeLog 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/ChangeLog 2012-10-19 04:45:47 UTC (rev 131853)
@@ -1,3 +1,30 @@
+2012-10-18 Kunihiko Sakamoto <[email protected]>
+
+ Implement value sanitization algorithm for type=datetime
+ https://bugs.webkit.org/show_bug.cgi?id=76893
+
+ Reviewed by Kent Tamura.
+
+ Added a test for the value sanitization algorithm for type=datetime.
+ Also updated affected tests.
+
+ * fast/forms/datetime/ValidityState-typeMismatch-datetime-expected.txt:
+ * fast/forms/datetime/ValidityState-typeMismatch-datetime.html:
+ '0001-01-01T00:00+01:00' is an invalid value because that is before
+ 0001-01-01 00:00 UTC. '0001-01-01T00:00-01:00' is a valid value.
+ * fast/forms/datetime/datetime-value-sanitization-expected.txt: Added.
+ * fast/forms/datetime/datetime-value-sanitization.html: Added.
+ * fast/forms/datetime/input-valueasdate-datetime-expected.txt:
+ * fast/forms/datetime/input-valueasdate-datetime.html:
+ Setting valueAsDate should run the algorithm to convert a Date object to a
+ string, that returns valid normalized forced-UTC global date and time string.
+ See http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#dom-input-valueasdate
+ * fast/forms/datetime/input-valueasnumber-datetime-expected.txt:
+ * fast/forms/datetime/input-valueasnumber-datetime.html:
+ Setting valueAsNumber should run the algorithm to convert a number to a
+ string, that returns valid normalized forced-UTC global date and time string.
+ See http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#dom-input-valueasnumber
+
2012-10-18 Dirk Pranke <[email protected]>
Unreviewed, expectations and baselines for chromium-mac-mountainlion
Modified: trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime-expected.txt (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime-expected.txt 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime-expected.txt 2012-10-19 04:45:47 UTC (rev 131853)
@@ -15,7 +15,7 @@
PASS "0001-01-01T00:00:00.000Z" is a correct valid datetime string.
PASS "0001-01-01T00:00:00.000+00:00" is a correct valid datetime string.
PASS "0001-01-01T01:30+01:30" is a correct valid datetime string.
-PASS "0001-01-01T00:00+01:00" is a correct valid datetime string.
+PASS "0001-01-01T00:00-01:00" is a correct valid datetime string.
PASS " 2009-09-07T16:49Z " is an invalid datetime string and was sanitized.
PASS "2009-09-07T16:49z" is an invalid datetime string and was sanitized.
PASS "2009-09-07t16:49Z" is an invalid datetime string and was sanitized.
@@ -34,6 +34,7 @@
PASS "0000-12-31T23:59:59Z" is an invalid datetime string and was sanitized.
PASS "2147483647-12-31T23:59-00:01" is an invalid datetime string and was sanitized.
PASS "2147483648-01-01T00:00:00Z" is an invalid datetime string and was sanitized.
+PASS "0001-01-01T00:00+01:00" is an invalid datetime string and was sanitized.
PASS "invalid" is an invalid datetime string and was sanitized while disabled.
PASS successfullyParsed is true
Modified: trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime.html (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime.html 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/ValidityState-typeMismatch-datetime.html 2012-10-19 04:45:47 UTC (rev 131853)
@@ -51,7 +51,7 @@
shouldBeValid('0001-01-01T00:00:00.000Z');
shouldBeValid('0001-01-01T00:00:00.000+00:00');
shouldBeValid('0001-01-01T01:30+01:30');
-shouldBeValid('0001-01-01T00:00+01:00');
+shouldBeValid('0001-01-01T00:00-01:00');
// Invalid values
shouldBeInvalid(' 2009-09-07T16:49Z ');
@@ -72,6 +72,7 @@
shouldBeInvalid('0000-12-31T23:59:59Z');
shouldBeInvalid('2147483647-12-31T23:59-00:01');
shouldBeInvalid('2147483648-01-01T00:00:00Z');
+shouldBeInvalid('0001-01-01T00:00+01:00');
// Disabled
shouldBeInvalid('invalid', true);
Added: trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization-expected.txt (0 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization-expected.txt 2012-10-19 04:45:47 UTC (rev 131853)
@@ -0,0 +1,38 @@
+Tests for value sanitization algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Valid values:
+PASS input.value = "2009-09-07T16:49Z"; input.value is "2009-09-07T16:49Z"
+PASS input.value = "2009-09-07T16:49:31.123Z"; input.value is "2009-09-07T16:49:31.123Z"
+Valid values, normalized:
+PASS input.value = "2009-09-07T16:49:00Z"; input.value is "2009-09-07T16:49Z"
+PASS input.value = "2009-09-07T16:49:00.000Z"; input.value is "2009-09-07T16:49Z"
+PASS input.value = "2012-01-01T00:00+00:00"; input.value is "2012-01-01T00:00Z"
+PASS input.value = "2012-01-01T00:00-00:00"; input.value is "2012-01-01T00:00Z"
+PASS input.value = "2012-01-01T00:00+01:00"; input.value is "2011-12-31T23:00Z"
+PASS input.value = "2012-01-01T00:00-01:00"; input.value is "2012-01-01T01:00Z"
+PASS input.value = "2011-12-31T23:59:59.999-23:59"; input.value is "2012-01-01T23:58:59.999Z"
+Invalid values:
+PASS input.value = "a"; input.value is ""
+PASS input.value = "2009-09-07T16:49Z "; input.value is ""
+PASS input.value = " 2009-09-07T16:49Z"; input.value is ""
+PASS input.value = "2009-09-07T16:49"; input.value is ""
+PASS input.value = "2009-09-07T16:49"; input.value is ""
+PASS input.value = "2009-09-07T16:49-24:00"; input.value is ""
+PASS input.value = "2009-09-07T16:49-01:00:00"; input.value is ""
+PASS input.value = "0000-12-31T23:59"; input.value is ""
+PASS input.value = "2012-01-00T00:00"; input.value is ""
+PASS input.value = "2012-00-01T00:00"; input.value is ""
+PASS input.value = "0001-01-01T00:00:60"; input.value is ""
+PASS input.value = "0001-01-01T00:60:00"; input.value is ""
+PASS input.value = "0001-01-01T24:00:00"; input.value is ""
+PASS input.value = "0001-01-32T00:00:00"; input.value is ""
+PASS input.value = "0001-02-29T00:00:00"; input.value is ""
+PASS input.value = "0001-13-01T00:00:00"; input.value is ""
+PASS input.value = "2147483648-01-01T00:00:00"; input.value is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization.html (0 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization.html (rev 0)
+++ trunk/LayoutTests/fast/forms/datetime/datetime-value-sanitization.html 2012-10-19 04:45:47 UTC (rev 131853)
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script>
+description('Tests for value sanitization algorithm.');
+
+var input = document.createElement('input');
+input.type = 'datetime';
+
+debug('Valid values:');
+shouldBeEqualToString('input.value = "2009-09-07T16:49Z"; input.value', '2009-09-07T16:49Z');
+shouldBeEqualToString('input.value = "2009-09-07T16:49:31.123Z"; input.value', '2009-09-07T16:49:31.123Z');
+
+debug('Valid values, normalized:');
+shouldBeEqualToString('input.value = "2009-09-07T16:49:00Z"; input.value', '2009-09-07T16:49Z');
+shouldBeEqualToString('input.value = "2009-09-07T16:49:00.000Z"; input.value', '2009-09-07T16:49Z');
+shouldBeEqualToString('input.value = "2012-01-01T00:00+00:00"; input.value', '2012-01-01T00:00Z');
+shouldBeEqualToString('input.value = "2012-01-01T00:00-00:00"; input.value', '2012-01-01T00:00Z');
+shouldBeEqualToString('input.value = "2012-01-01T00:00+01:00"; input.value', '2011-12-31T23:00Z');
+shouldBeEqualToString('input.value = "2012-01-01T00:00-01:00"; input.value', '2012-01-01T01:00Z');
+shouldBeEqualToString('input.value = "2011-12-31T23:59:59.999-23:59"; input.value', '2012-01-01T23:58:59.999Z');
+
+debug('Invalid values:');
+shouldBeEqualToString('input.value = "a"; input.value', '');
+shouldBeEqualToString('input.value = "2009-09-07T16:49Z "; input.value', '');
+shouldBeEqualToString('input.value = " 2009-09-07T16:49Z"; input.value', '');
+shouldBeEqualToString('input.value = "2009-09-07T16:49"; input.value', '');
+shouldBeEqualToString('input.value = "2009-09-07T16:49"; input.value', '');
+shouldBeEqualToString('input.value = "2009-09-07T16:49-24:00"; input.value', '');
+shouldBeEqualToString('input.value = "2009-09-07T16:49-01:00:00"; input.value', '');
+shouldBeEqualToString('input.value = "0000-12-31T23:59"; input.value', '');
+shouldBeEqualToString('input.value = "2012-01-00T00:00"; input.value', '');
+shouldBeEqualToString('input.value = "2012-00-01T00:00"; input.value', '');
+shouldBeEqualToString('input.value = "0001-01-01T00:00:60"; input.value', '');
+shouldBeEqualToString('input.value = "0001-01-01T00:60:00"; input.value', '');
+shouldBeEqualToString('input.value = "0001-01-01T24:00:00"; input.value', '');
+shouldBeEqualToString('input.value = "0001-01-32T00:00:00"; input.value', '');
+shouldBeEqualToString('input.value = "0001-02-29T00:00:00"; input.value', '');
+shouldBeEqualToString('input.value = "0001-13-01T00:00:00"; input.value', '');
+shouldBeEqualToString('input.value = "2147483648-01-01T00:00:00"; input.value', '');
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime-expected.txt (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime-expected.txt 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime-expected.txt 2012-10-19 04:45:47 UTC (rev 131853)
@@ -20,8 +20,8 @@
PASS input.value = "2010-01-01T00:00Z"; input.valueAsDate = document; input.value is ""
PASS input.value = "2010-01-01T00:00Z"; input.valueAsDate = null; input.value is ""
Step attribute value and string representation:
-PASS input.step = "1"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00:00Z"
-PASS input.step = "0.001"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00:00.000Z"
+PASS input.step = "1"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00Z"
+PASS input.step = "0.001"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00Z"
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime.html (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime.html 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/input-valueasdate-datetime.html 2012-10-19 04:45:47 UTC (rev 131853)
@@ -47,10 +47,9 @@
shouldBe('input.value = "2010-01-01T00:00Z"; input.valueAsDate = null; input.value', '""');
debug('Step attribute value and string representation:');
-// If the step attribute value is 1 second and the second part is 0, we should show the second part.
-shouldBe('input.step = "1"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00:00Z"');
-// If the step attribute value is 0.001 second and the millisecond part is 0, we should show the millisecond part.
-shouldBe('input.step = "0.001"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00:00.000Z"');
+// String representation should not depend on the step attribute.
+shouldBe('input.step = "1"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00Z"');
+shouldBe('input.step = "0.001"; setValueAsDateAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00Z"');
</script>
<script src=""
</body>
Modified: trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime-expected.txt (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime-expected.txt 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime-expected.txt 2012-10-19 04:45:47 UTC (rev 131853)
@@ -26,8 +26,8 @@
PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
PASS input.valueAsNumber = Date.UTC(275760, 8, 13, 0, 0, 0, 1) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
Step attribute value and string representation:
-PASS input.step = "1"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00:00Z"
-PASS input.step = "0.001"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00:00.000Z"
+PASS input.step = "1"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00Z"
+PASS input.step = "0.001"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) is "2010-01-21T00:00Z"
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime.html (131852 => 131853)
--- trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime.html 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/LayoutTests/fast/forms/datetime/input-valueasnumber-datetime.html 2012-10-19 04:45:47 UTC (rev 131853)
@@ -53,10 +53,9 @@
shouldThrow('input.valueAsNumber = Date.UTC(275760, 8, 13, 0, 0, 0, 1)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
debug('Step attribute value and string representation:');
-// If the step attribute value is 1 second and the second part is 0, we should show the second part.
-shouldBe('input.step = "1"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00:00Z"');
-// If the step attribute value is 0.001 second and the millisecond part is 0, we should show the millisecond part.
-shouldBe('input.step = "0.001"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00:00.000Z"');
+// String representation should not depend on the step attribute.
+shouldBe('input.step = "1"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00Z"');
+shouldBe('input.step = "0.001"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0)', '"2010-01-21T00:00Z"');
</script>
<script src=""
</body>
Modified: trunk/Source/WebCore/ChangeLog (131852 => 131853)
--- trunk/Source/WebCore/ChangeLog 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/Source/WebCore/ChangeLog 2012-10-19 04:45:47 UTC (rev 131853)
@@ -1,3 +1,25 @@
+2012-10-18 Kunihiko Sakamoto <[email protected]>
+
+ Implement value sanitization algorithm for type=datetime
+ https://bugs.webkit.org/show_bug.cgi?id=76893
+
+ Reviewed by Kent Tamura.
+
+ Implement the value sanitization algorithm for type=datetime that adjusts
+ the value to a valid normalized forced-UTC global date and time string.
+ See http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#valid-normalized-forced-utc-global-date-and-time-string
+
+ Test: fast/forms/datetime/datetime-value-sanitization.html
+
+ * html/DateTimeInputType.cpp:
+ (WebCore::DateTimeInputType::sanitizeValue): Implemented.
+ (WebCore):
+ * html/DateTimeInputType.h:
+ (DateTimeInputType): Add sanitizeValue.
+ * platform/DateComponents.cpp:
+ (WebCore::DateComponents::addMinute): Fixed a bug that caused wrong adjustment
+ of timezone offset (e.g. 2012-10-17T01:00+01:00 -> 2012-10-17T01:-60Z).
+
2012-10-18 Byungwoo Lee <[email protected]>
Fix build warning.
Modified: trunk/Source/WebCore/html/DateTimeInputType.cpp (131852 => 131853)
--- trunk/Source/WebCore/html/DateTimeInputType.cpp 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/Source/WebCore/html/DateTimeInputType.cpp 2012-10-19 04:45:47 UTC (rev 131853)
@@ -160,6 +160,14 @@
}
#endif
+String DateTimeInputType::sanitizeValue(const String& proposedValue) const
+{
+ DateComponents date;
+ if (!parseToDateComponents(proposedValue, &date))
+ return String();
+ return date.toString();
+}
+
} // namespace WebCore
#endif
Modified: trunk/Source/WebCore/html/DateTimeInputType.h (131852 => 131853)
--- trunk/Source/WebCore/html/DateTimeInputType.h 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/Source/WebCore/html/DateTimeInputType.h 2012-10-19 04:45:47 UTC (rev 131853)
@@ -57,6 +57,7 @@
virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const OVERRIDE;
virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
virtual bool isDateTimeField() const OVERRIDE;
+ virtual String sanitizeValue(const String&) const OVERRIDE;
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
// BaseMultipleFieldsDateAndTimeInputType functions
Modified: trunk/Source/WebCore/platform/DateComponents.cpp (131852 => 131853)
--- trunk/Source/WebCore/platform/DateComponents.cpp 2012-10-19 04:35:15 UTC (rev 131852)
+++ trunk/Source/WebCore/platform/DateComponents.cpp 2012-10-19 04:45:47 UTC (rev 131853)
@@ -247,8 +247,8 @@
if (minute > 59) {
carry = minute / 60;
minute = minute % 60;
- } else if (m_minute < 0) {
- carry = (59 - m_minute) / 60;
+ } else if (minute < 0) {
+ carry = (59 - minute) / 60;
minute += carry * 60;
carry = -carry;
ASSERT(minute >= 0 && minute <= 59);