Title: [125962] trunk
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);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to