- Revision
- 125962
- Author
- [email protected]
- Date
- 2012-08-17 19:51:47 -0700 (Fri, 17 Aug 2012)
Log Message
Calendar picker shows wrong date when input element has year earlier than 100
https://bugs.webkit.org/show_bug.cgi?id=94100
Reviewed by Kent Tamura.
Source/WebCore:
Date.UTC can't set an year earlier than 100. So when the input has a value earlier than 100, calendar picker shows the wrong date.
Test: fast/forms/date/calendar-picker-appearance-pre-100.html
* Resources/pagepopups/calendarPicker.js:
(createUTCDate): Uses setUTCFullYear when the year is pre 100.
(parseDateString):
(DaysTable.prototype._renderMonth):
(DaysTable.prototype._maybeSetPreviousMonth):
(DaysTable.prototype._maybeSetNextMonth):
LayoutTests:
* fast/forms/date/calendar-picker-appearance-pre-100-expected.txt: Added.
* fast/forms/date/calendar-picker-appearance-pre-100.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (125961 => 125962)
--- trunk/LayoutTests/ChangeLog 2012-08-18 02:06:57 UTC (rev 125961)
+++ trunk/LayoutTests/ChangeLog 2012-08-18 02:51:47 UTC (rev 125962)
@@ -1,3 +1,13 @@
+2012-08-17 Keishi Hattori <[email protected]>
+
+ Calendar picker shows wrong date when input element has year earlier than 100
+ https://bugs.webkit.org/show_bug.cgi?id=94100
+
+ Reviewed by Kent Tamura.
+
+ * fast/forms/date/calendar-picker-appearance-pre-100-expected.txt: Added.
+ * fast/forms/date/calendar-picker-appearance-pre-100.html: Added.
+
2012-08-17 Dirk Pranke <[email protected]>
Unreviewed, rolling out r125897.
Added: trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100-expected.txt (0 => 125962)
--- trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100-expected.txt 2012-08-18 02:51:47 UTC (rev 125962)
@@ -0,0 +1,10 @@
+Check if year before 100 can be set.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS document.getElementById("date").value is "0002-02-03"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100.html (0 => 125962)
--- trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100.html (rev 0)
+++ trunk/LayoutTests/fast/forms/date/calendar-picker-appearance-pre-100.html 2012-08-18 02:51:47 UTC (rev 125962)
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<input type=date id=date value="0002-02-02">
+<script>
+function sendKey(input, keyName) {
+ var event = document.createEvent('KeyboardEvent');
+ event.initKeyboardEvent('keydown', true, true, document.defaultView, keyName);
+ input.dispatchEvent(event);
+}
+
+function finishTest() {
+ pickerWindow.removeEventListener('resize', finishTest);
+ sendKey(pickerWindow.global.daysTable._daysContainer, 'Right');
+ sendKey(pickerWindow.global.daysTable._daysContainer, 'Enter');
+ shouldBe('document.getElementById("date").value', '"0002-02-03"');
+ setTimeout(function() { finishJSTest(); }, 0);
+}
+
+description('Check if year before 100 can be set.');
+
+if (window.testRunner)
+ testRunner.waitUntilDone();
+
+window.jsTestIsAsync = true;
+
+if (window.internals)
+ internals.settings.setEnableMockPagePopup(true);
+
+var dateInput = document.getElementById('date');
+dateInput.offsetTop;
+sendKey(dateInput, 'Down');
+var pickerWindow = document.getElementById('mock-page-popup').contentWindow;
+pickerWindow.addEventListener('resize', finishTest, false);
+var successfullyParsed = true;
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (125961 => 125962)
--- trunk/Source/WebCore/ChangeLog 2012-08-18 02:06:57 UTC (rev 125961)
+++ trunk/Source/WebCore/ChangeLog 2012-08-18 02:51:47 UTC (rev 125962)
@@ -1,3 +1,21 @@
+2012-08-17 Keishi Hattori <[email protected]>
+
+ Calendar picker shows wrong date when input element has year earlier than 100
+ https://bugs.webkit.org/show_bug.cgi?id=94100
+
+ Reviewed by Kent Tamura.
+
+ Date.UTC can't set an year earlier than 100. So when the input has a value earlier than 100, calendar picker shows the wrong date.
+
+ Test: fast/forms/date/calendar-picker-appearance-pre-100.html
+
+ * Resources/pagepopups/calendarPicker.js:
+ (createUTCDate): Uses setUTCFullYear when the year is pre 100.
+ (parseDateString):
+ (DaysTable.prototype._renderMonth):
+ (DaysTable.prototype._maybeSetPreviousMonth):
+ (DaysTable.prototype._maybeSetNextMonth):
+
2012-08-17 Vangelis Kokkevis <[email protected]>
[chromium] Fix random noise around text in FPS HUD.
Modified: trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js (125961 => 125962)
--- trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js 2012-08-18 02:06:57 UTC (rev 125961)
+++ trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js 2012-08-18 02:51:47 UTC (rev 125962)
@@ -174,6 +174,13 @@
}
}
+function createUTCDate(year, month, date) {
+ var newDate = new Date(Date.UTC(year, month, date));
+ if (year < 100)
+ newDate.setUTCFullYear(year);
+ return newDate;
+};
+
/**
* @param {string=} opt_current
* @return {!Date}
@@ -182,11 +189,11 @@
if (opt_current) {
var result = opt_current.match(/(\d+)-(\d+)-(\d+)/);
if (result)
- return new Date(Date.UTC(Number(result[1]), Number(result[2]) - 1, Number(result[3])));
+ return createUTCDate(Number(result[1]), Number(result[2]) - 1, Number(result[3]));
}
var now = new Date();
// Create UTC date with same numbers as local date.
- return new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
+ return createUTCDate(now.getFullYear(), now.getMonth(), now.getDate());
}
/**
@@ -850,8 +857,7 @@
DaysTable.prototype._renderMonth = function(year, month) {
this._currentYear = year;
this._currentMonth = month;
- var dayIterator = new Date(Date.UTC(year, month, 1));
- dayIterator.setUTCFullYear(year);
+ var dayIterator = createUTCDate(year, month, 1);
var monthStartDay = dayIterator.getUTCDay();
var weekStartDay = global.params.weekStartDay || 0;
var startOffset = weekStartDay - monthStartDay;
@@ -968,7 +974,7 @@
DaysTable.prototype._maybeSetPreviousMonth = function() {
var year = global.yearMonthController.year();
var month = global.yearMonthController.month();
- var thisMonthStartTime = Date.UTC(year, month, 1);
+ var thisMonthStartTime = createUTCDate(year, month, 1).getTime();
if (global.minimumDate.getTime() >= thisMonthStartTime)
return false;
if (month == 0) {
@@ -991,7 +997,7 @@
month = 0;
} else
month++;
- var nextMonthStartTime = Date.UTC(year, month, 1);
+ var nextMonthStartTime = createUTCDate(year, month, 1).getTime();
if (global.maximumDate.getTime() < nextMonthStartTime)
return false;
this._navigateToMonthWithAnimation(year, month);