[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

tkent at chromium.org tkent at chromium.org
Thu Feb 4 21:28:50 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit e536ea331fcc748c330db36e6871bea42ba97c11
Author: tkent at chromium.org <tkent at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 27 04:45:37 2010 +0000

    2010-01-26  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Darin Adler.
    
            HTMLInputElement::valueAsNumber support except type=datetime-local.
            https://bugs.webkit.org/show_bug.cgi?id=32696
    
            input-valueasnumber-datetime-expected.txt and
            input-valueasnumber-time-expected.txt have FAIL lines because they
            test unimplemented features.
    
            * fast/forms/input-valueasnumber-date-expected.txt: Added.
            * fast/forms/input-valueasnumber-date.html: Added.
            * fast/forms/input-valueasnumber-datetime-expected.txt: Added.
            * fast/forms/input-valueasnumber-datetime.html: Added.
            * fast/forms/input-valueasnumber-month-expected.txt: Added.
            * fast/forms/input-valueasnumber-month.html: Added.
            * fast/forms/input-valueasnumber-number-expected.txt: Added.
            * fast/forms/input-valueasnumber-number.html: Added.
            * fast/forms/input-valueasnumber-range-expected.txt: Added.
            * fast/forms/input-valueasnumber-range.html: Added.
            * fast/forms/input-valueasnumber-time-expected.txt: Added.
            * fast/forms/input-valueasnumber-time.html: Added.
            * fast/forms/input-valueasnumber-unsupported-expected.txt: Added.
            * fast/forms/input-valueasnumber-unsupported.html: Added.
            * fast/forms/input-valueasnumber-week-expected.txt: Added.
            * fast/forms/input-valueasnumber-week.html: Added.
            * fast/forms/script-tests/input-valueasnumber-date.js: Added.
            * fast/forms/script-tests/input-valueasnumber-datetime.js: Added.
            * fast/forms/script-tests/input-valueasnumber-month.js: Added.
            * fast/forms/script-tests/input-valueasnumber-number.js: Added.
            * fast/forms/script-tests/input-valueasnumber-range.js: Added.
            * fast/forms/script-tests/input-valueasnumber-time.js: Added.
            * fast/forms/script-tests/input-valueasnumber-unsupported.js: Added.
            * fast/forms/script-tests/input-valueasnumber-week.js: Added.
    
    2010-01-26  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Darin Adler.
    
            HTMLInputElement::valueAsNumber support except type=datetime-local.
            https://bugs.webkit.org/show_bug.cgi?id=32696
    
            Tests: fast/forms/input-valueasnumber-date.html
                   fast/forms/input-valueasnumber-datetime.html
                   fast/forms/input-valueasnumber-month.html
                   fast/forms/input-valueasnumber-number.html
                   fast/forms/input-valueasnumber-range.html
                   fast/forms/input-valueasnumber-time.html
                   fast/forms/input-valueasnumber-unsupported.html
                   fast/forms/input-valueasnumber-week.html
    
            * html/HTMLInputElement.cpp:
            (WebCore::HTMLInputElement::valueAsNumber):
              According to the specification, we should return NaN for invalid values.
            (WebCore::HTMLInputElement::setValueAsNumber):
              According to the specification, throws NOT_SUPPORTED_ERR for Infinitiy or NaN,
              and throws INVALID_STATE_ERR for unsupported types.
            (WebCore::HTMLInputElement::formStringToDouble):
              According to the step 14 of Real Number in the specification, we
              should round -0 to 0.
            * html/HTMLInputElement.h: Declare valueAsNumber() and setValueAsNumber().
            * html/HTMLInputElement.idl: Add valueAsNumber.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53893 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 32c2277..24aace3 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,5 +1,41 @@
 2010-01-26  Kent Tamura  <tkent at chromium.org>
 
+        Reviewed by Darin Adler.
+
+        HTMLInputElement::valueAsNumber support except type=datetime-local.
+        https://bugs.webkit.org/show_bug.cgi?id=32696
+
+        input-valueasnumber-datetime-expected.txt and
+        input-valueasnumber-time-expected.txt have FAIL lines because they
+        test unimplemented features.
+
+        * fast/forms/input-valueasnumber-date-expected.txt: Added.
+        * fast/forms/input-valueasnumber-date.html: Added.
+        * fast/forms/input-valueasnumber-datetime-expected.txt: Added.
+        * fast/forms/input-valueasnumber-datetime.html: Added.
+        * fast/forms/input-valueasnumber-month-expected.txt: Added.
+        * fast/forms/input-valueasnumber-month.html: Added.
+        * fast/forms/input-valueasnumber-number-expected.txt: Added.
+        * fast/forms/input-valueasnumber-number.html: Added.
+        * fast/forms/input-valueasnumber-range-expected.txt: Added.
+        * fast/forms/input-valueasnumber-range.html: Added.
+        * fast/forms/input-valueasnumber-time-expected.txt: Added.
+        * fast/forms/input-valueasnumber-time.html: Added.
+        * fast/forms/input-valueasnumber-unsupported-expected.txt: Added.
+        * fast/forms/input-valueasnumber-unsupported.html: Added.
+        * fast/forms/input-valueasnumber-week-expected.txt: Added.
+        * fast/forms/input-valueasnumber-week.html: Added.
+        * fast/forms/script-tests/input-valueasnumber-date.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-datetime.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-month.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-number.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-range.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-time.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-unsupported.js: Added.
+        * fast/forms/script-tests/input-valueasnumber-week.js: Added.
+
+2010-01-26  Kent Tamura  <tkent at chromium.org>
+
         Reviewed by Eric Seidel.
 
         [Win] Add modifiers parameter support to Windows DumpRenderTree
diff --git a/LayoutTests/fast/forms/input-valueasnumber-date-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-date-expected.txt
new file mode 100644
index 0000000..0449bea
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-date-expected.txt
@@ -0,0 +1,31 @@
+Tests for .valueAsNumber with <input type=date>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("") is Number.NaN
+PASS valueAsNumberFor("1969-12-31") is Date.UTC(1969, 11, 31)
+PASS valueAsNumberFor("1970-01-01") is Date.UTC(1970, 0, 1)
+PASS valueAsNumberFor("2009-12-22") is Date.UTC(2009, 11, 22)
+PASS setValueAsNumberAndGetValue(1969, 11, 1) is "1969-12-01"
+PASS setValueAsNumberAndGetValue(1970, 0, 1) is "1970-01-01"
+PASS setValueAsNumberAndGetValue(2009, 11, 31) is "2009-12-31"
+PASS setValueAsNumberAndGetValue(10000, 0, 1) is "10000-01-01"
+PASS setValueAsNumberAndGetValue(794, 9, 22) is ""
+PASS setValueAsNumberAndGetValue(1582, 8, 30) is ""
+PASS setValueAsNumberAndGetValue(1582, 9, 15) is "1582-10-15"
+PASS setValueAsNumberAndGetValue(1582, 9, 31) is "1582-10-31"
+PASS setValueAsNumberAndGetValue(275760, 8, 13) is "275760-09-13"
+PASS setValueAsNumberAndGetValue(275760, 8, 14) is "275760-09-14"
+Tests to set invalid values to valueAsNumber:
+PASS input.value = ""; input.valueAsNumber = null; input.value is "1970-01-01"
+PASS input.valueAsNumber = "foo" threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Infinity threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.POSITIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-date.html b/LayoutTests/fast/forms/input-valueasnumber-date.html
new file mode 100644
index 0000000..b8a31dd
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-date.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-date.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-datetime-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-datetime-expected.txt
new file mode 100644
index 0000000..ecf0f33
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-datetime-expected.txt
@@ -0,0 +1,33 @@
+Tests for .valueAsNumber with <input type=datetime>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("") is Number.NaN
+PASS valueAsNumberFor("1969-12-31T12:34:56.789Z") is Date.UTC(1969, 11, 31, 12, 34, 56, 789)
+PASS valueAsNumberFor("1970-01-01T00:00:00.000Z") is Date.UTC(1970, 0, 1, 0, 0, 0)
+PASS valueAsNumberFor("2009-12-22T11:32:11Z") is Date.UTC(2009, 11, 22, 11, 32, 11)
+PASS setValueAsNumberAndGetValue(1969, 11, 1, 0, 0, 0, 0) is "1969-12-01T00:00Z"
+PASS setValueAsNumberAndGetValue(1970, 0, 1, 10, 1, 0, 100) is "1970-01-01T10:01:00.100Z"
+PASS setValueAsNumberAndGetValue(2009, 11, 31, 23, 59, 59, 999) is "2009-12-31T23:59:59.999Z"
+PASS setValueAsNumberAndGetValue(10000, 0, 1, 12, 0, 1, 0) is "10000-01-01T12:00:01Z"
+PASS setValueAsNumberAndGetValue(794, 9, 22, 0, 0, 0, 0) is ""
+PASS setValueAsNumberAndGetValue(1582, 9, 14, 23, 59, 59, 999) is ""
+PASS setValueAsNumberAndGetValue(1582, 9, 15, 0, 0, 0, 0) is "1582-10-15T00:00Z"
+PASS setValueAsNumberAndGetValue(275760, 8, 13, 0, 0, 0, 0) is "275760-09-13T00:00Z"
+PASS setValueAsNumberAndGetValue(275760, 8, 13, 0, 0, 0, 1) is "275760-09-13T00:00:00.001Z"
+Tests to set invalid values to valueAsNumber:
+PASS input.value = ""; input.valueAsNumber = null; input.value is "1970-01-01T00:00Z"
+PASS input.valueAsNumber = "foo" threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Infinity threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.POSITIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+Step attribute value and string representation:
+FAIL input.step = "1"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) should be 2010-01-21T00:00:00. Was 2010-01-21T00:00Z.
+FAIL input.step = "0.001"; setValueAsNumberAndGetValue(2010, 0, 21, 0, 0, 0, 0) should be 2010-01-21T00:00:00.000. Was 2010-01-21T00:00Z.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-datetime.html b/LayoutTests/fast/forms/input-valueasnumber-datetime.html
new file mode 100644
index 0000000..adc6f7e
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-datetime.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-datetime.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-month-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-month-expected.txt
new file mode 100644
index 0000000..e51d05a
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-month-expected.txt
@@ -0,0 +1,31 @@
+Tests for .valueAsNumber with <input type=month>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("") is Number.NaN
+PASS valueAsNumberFor("1969-12") is Date.UTC(1969, 11, 1, 0, 0, 0, 0)
+PASS valueAsNumberFor("1970-01") is Date.UTC(1970, 0, 1)
+PASS valueAsNumberFor("2009-12") is Date.UTC(2009, 11, 1)
+PASS setValueAsNumberAndGetValue(1969, 11, 1) is "1969-12"
+PASS setValueAsNumberAndGetValue(1970, 0, 1) is "1970-01"
+PASS setValueAsNumberAndGetValue(2009, 11, 31) is "2009-12"
+PASS setValueAsNumberAndGetValue(10000, 0, 1) is "10000-01"
+PASS setValueAsNumberAndGetValue(794, 9, 22) is ""
+PASS setValueAsNumberAndGetValue(1582, 8, 30) is ""
+PASS setValueAsNumberAndGetValue(1582, 9, 1) is "1582-10"
+PASS setValueAsNumberAndGetValue(1582, 9, 31) is "1582-10"
+PASS setValueAsNumberAndGetValue(275760, 8, 13) is "275760-09"
+PASS setValueAsNumberAndGetValue(275760, 8, 14) is "275760-09"
+Tests to set invalid values to valueAsNumber:
+PASS input.value = ""; input.valueAsNumber = null; input.value is "1970-01"
+PASS input.valueAsNumber = "foo" threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Infinity threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.POSITIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-month.html b/LayoutTests/fast/forms/input-valueasnumber-month.html
new file mode 100644
index 0000000..646a4ce
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-month.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-month.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-number-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-number-expected.txt
new file mode 100644
index 0000000..0d2030c
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-number-expected.txt
@@ -0,0 +1,53 @@
+Tests for .valueAsNumber with <input type=number>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("0") is 0
+PASS valueAsNumberFor("10") is 10
+PASS valueAsNumberFor("01") is 1
+PASS valueAsNumberFor("-0") is 0
+PASS valueAsNumberFor("-1.2") is -1.2
+PASS valueAsNumberFor("1.2E10") is 1.2E10
+PASS valueAsNumberFor("1.2E-10") is 1.2E-10
+PASS valueAsNumberFor("1.2E+10") is 1.2E10
+PASS valueAsNumberFor("12345678901234567890123456789012345678901234567890") is 1.2345678901234567E+49
+PASS valueAsNumberFor("0.12345678901234567890123456789012345678901234567890") is 0.123456789012345678
+valueAsNumber for invalid string values:
+PASS isNaN(valueAsNumberFor("")) is true
+PASS isNaN(valueAsNumberFor("abc")) is true
+PASS isNaN(valueAsNumberFor("0xff")) is true
+PASS isNaN(valueAsNumberFor("+1")) is true
+PASS isNaN(valueAsNumberFor(" 10")) is true
+PASS isNaN(valueAsNumberFor("10 ")) is true
+PASS isNaN(valueAsNumberFor(".2")) is true
+PASS isNaN(valueAsNumberFor("1E")) is true
+PASS isNaN(valueAsNumberFor("NaN")) is true
+PASS isNaN(valueAsNumberFor("nan")) is true
+PASS isNaN(valueAsNumberFor("Inf")) is true
+PASS isNaN(valueAsNumberFor("inf")) is true
+PASS isNaN(valueAsNumberFor("Infinity")) is true
+PASS isNaN(valueAsNumberFor("infinity")) is true
+Too huge exponent to support
+PASS isNaN(valueAsNumberFor("1.2E65535")) is true
+Tests for the valueAsNumber setter:
+PASS setValueAsNumberAndGetValue(0) is "0"
+PASS setValueAsNumberAndGetValue(10) is "10"
+PASS setValueAsNumberAndGetValue(01) is "1"
+PASS setValueAsNumberAndGetValue(-0) is "0"
+PASS setValueAsNumberAndGetValue(-1.2) is "-1.2"
+PASS setValueAsNumberAndGetValue(1.2e10) is "12000000000"
+PASS setValueAsNumberAndGetValue(1.2e-10) is "1.2e-10"
+PASS setValueAsNumberAndGetValue(1.2345678901234567e+49) is "1.2345678901234567e+49"
+Tests to set invalid values to valueAsNumber:
+PASS setValueAsNumberAndGetValue(null) is "0"
+PASS setValueAsNumberAndGetValue("foo") threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(NaN) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.NaN) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Infinity) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.POSITIVE_INFINITY) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.NEGATIVE_INFINITY) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-number.html b/LayoutTests/fast/forms/input-valueasnumber-number.html
new file mode 100644
index 0000000..9c67821
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-number.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-number.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-range-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-range-expected.txt
new file mode 100644
index 0000000..4fbe286
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-range-expected.txt
@@ -0,0 +1,53 @@
+Tests for .valueAsNumber with <input type=range>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("0") is 0
+PASS valueAsNumberFor("10") is 10
+PASS valueAsNumberFor("01") is 1
+PASS valueAsNumberFor("-0") is 0
+PASS valueAsNumberFor("-1.2") is 0
+PASS valueAsNumberFor("1.2E10") is 100
+PASS valueAsNumberFor("1.2E-10") is 0
+PASS valueAsNumberFor("1.2E+10") is 100
+PASS valueAsNumberFor("12345678901234567890123456789012345678901234567890") is 100
+PASS valueAsNumberFor("0.12345678901234567890123456789012345678901234567890") is 0
+valueAsNumber for invalid string values:
+PASS valueAsNumberFor("") is 50
+PASS valueAsNumberFor("abc") is 50
+PASS valueAsNumberFor("0xff") is 50
+PASS valueAsNumberFor("+1") is 50
+PASS valueAsNumberFor(" 10") is 50
+PASS valueAsNumberFor("10 ") is 50
+PASS valueAsNumberFor(".2") is 50
+PASS valueAsNumberFor("1E") is 50
+PASS valueAsNumberFor("NaN") is 50
+PASS valueAsNumberFor("nan") is 50
+PASS valueAsNumberFor("Inf") is 50
+PASS valueAsNumberFor("inf") is 50
+PASS valueAsNumberFor("Infinity") is 50
+PASS valueAsNumberFor("infinity") is 50
+Too huge exponent to support
+PASS valueAsNumberFor("1.2E65535") is 50
+Tests for the valueAsNumber setter:
+PASS setValueAsNumberAndGetValue(0) is "0"
+PASS setValueAsNumberAndGetValue(10) is "10"
+PASS setValueAsNumberAndGetValue(01) is "1"
+PASS setValueAsNumberAndGetValue(-0) is "0"
+PASS setValueAsNumberAndGetValue(-1.2) is "0"
+PASS setValueAsNumberAndGetValue(1.2e10) is "100"
+PASS setValueAsNumberAndGetValue(1.2e-10) is "0"
+PASS setValueAsNumberAndGetValue(1.2345678901234567e+49) is "100"
+Tests to set invalid values to valueAsNumber:
+PASS setValueAsNumberAndGetValue(null) is "0"
+PASS setValueAsNumberAndGetValue("foo") threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(NaN) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.NaN) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Infinity) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.POSITIVE_INFINITY) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS setValueAsNumberAndGetValue(Number.NEGATIVE_INFINITY) threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-range.html b/LayoutTests/fast/forms/input-valueasnumber-range.html
new file mode 100644
index 0000000..ef4a9fe
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-range.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-range.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-time-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-time-expected.txt
new file mode 100644
index 0000000..e3c94dd
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-time-expected.txt
@@ -0,0 +1,33 @@
+Tests for .valueAsNumber with <input type=time>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("") is Number.NaN
+PASS valueAsNumberFor("00:00:00.000") is Date.UTC(1970, 0, 1, 0, 0, 0, 0)
+PASS valueAsNumberFor("04:35") is Date.UTC(1970, 0, 1, 4, 35, 0, 0)
+PASS valueAsNumberFor("23:59:59.999") is Date.UTC(1970, 0, 1, 23, 59, 59, 999)
+PASS setValueAsNumberAndGetValue(0, 0, 0, 0) is "00:00"
+PASS setValueAsNumberAndGetValue(0, 0, 1, 0) is "00:00:01"
+PASS setValueAsNumberAndGetValue(0, 0, 0, 2) is "00:00:00.002"
+PASS setValueAsNumberAndGetValue(11, 59, 59, 999) is "11:59:59.999"
+PASS setValueAsNumberAndGetValue(12, 0, 0, 0) is "12:00"
+PASS setValueAsNumberAndGetValue(23, 59, 59, 999) is "23:59:59.999"
+PASS setValueAsNumberAndGetValue(24, 0, 0, 0) is "00:00"
+PASS setValueAsNumberAndGetValue(48, 0, 13, 0) is "00:00:13"
+PASS setValueAsNumberAndGetValue(-23, -59, -59, 0) is "00:00:01"
+Tests to set invalid values to valueAsNumber:
+PASS input.value = ""; input.valueAsNumber = null; input.value is "00:00"
+PASS input.valueAsNumber = "foo" threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Infinity threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.POSITIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+Step attribute value and string representation:
+FAIL input.step = "1"; setValueAsNumberAndGetValue(0, 0, 0, 0) should be 00:00:00. Was 00:00.
+FAIL input.step = "0.001"; setValueAsNumberAndGetValue(0, 0, 0, 0) should be 00:00:00.000. Was 00:00.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-time.html b/LayoutTests/fast/forms/input-valueasnumber-time.html
new file mode 100644
index 0000000..2476381
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-time.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-time.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-unsupported-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-unsupported-expected.txt
new file mode 100644
index 0000000..6d320b7
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-unsupported-expected.txt
@@ -0,0 +1,57 @@
+Tests for .valueAsNumber with non-supported input types.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Check for type=button
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=checkbox
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=color
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=email
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=file
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=hidden
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=image
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=khtml_isindex
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=password
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=radio
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=reset
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=search
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=submit
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=tel
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=text
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+Check for type=url
+PASS input.valueAsNumber is Number.NaN
+PASS input.valueAsNumber = 0 threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-unsupported.html b/LayoutTests/fast/forms/input-valueasnumber-unsupported.html
new file mode 100644
index 0000000..ed3e55d
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-unsupported.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-unsupported.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/input-valueasnumber-week-expected.txt b/LayoutTests/fast/forms/input-valueasnumber-week-expected.txt
new file mode 100644
index 0000000..f8078d6
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-week-expected.txt
@@ -0,0 +1,47 @@
+Tests for .valueAsNumber with <input type=week>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS valueAsNumberFor("") is Number.NaN
+PASS valueAsNumberFor("2007-W01") is Date.UTC(2007, 0, 1)
+PASS valueAsNumberFor("2008-W01") is Date.UTC(2007, 11, 31)
+PASS valueAsNumberFor("2003-W01") is Date.UTC(2002, 11, 30)
+PASS valueAsNumberFor("2004-W01") is Date.UTC(2003, 11, 29, 0, 0, 0, 0)
+PASS valueAsNumberFor("2010-W01") is Date.UTC(2010, 0, 4)
+PASS valueAsNumberFor("2005-W01") is Date.UTC(2005, 0, 3)
+PASS valueAsNumberFor("2006-W01") is Date.UTC(2006, 0, 2)
+Various January 1st:
+PASS setValueAsNumberAndGetValue(2007, 0, 1) is "2007-W01"
+PASS setValueAsNumberAndGetValue(2008, 0, 1) is "2008-W01"
+PASS setValueAsNumberAndGetValue(2003, 0, 1) is "2003-W01"
+PASS setValueAsNumberAndGetValue(2004, 0, 1) is "2004-W01"
+PASS setValueAsNumberAndGetValue(2010, 0, 1) is "2009-W53"
+PASS setValueAsNumberAndGetValue(2005, 0, 1) is "2004-W53"
+PASS setValueAsNumberAndGetValue(2006, 0, 1) is "2005-W52"
+Normal cases:
+PASS setValueAsNumberAndGetValue(2010, 0, 3) is "2009-W53"
+PASS setValueAsNumberAndGetValue(2010, 0, 4) is "2010-W01"
+PASS setValueAsNumberAndGetValue(2010, 0, 10) is "2010-W01"
+PASS setValueAsNumberAndGetValue(2010, 0, 11) is "2010-W02"
+PASS setValueAsNumberAndGetValue(2010, 0, 17) is "2010-W02"
+PASS setValueAsNumberAndGetValue(2010, 11, 31) is "2010-W52"
+Around Gregorian calendar starting year:
+PASS setValueAsNumberAndGetValue(1582, 9, 14) is ""
+PASS setValueAsNumberAndGetValue(1582, 9, 15) is ""
+PASS setValueAsNumberAndGetValue(1582, 11, 31) is ""
+PASS setValueAsNumberAndGetValue(1583, 0, 1) is ""
+PASS setValueAsNumberAndGetValue(1583, 0, 2) is ""
+PASS setValueAsNumberAndGetValue(1583, 0, 3) is "1583-W01"
+Tests to set invalid values to valueAsNumber:
+PASS input.value = ""; input.valueAsNumber = null; input.value is "1970-W01"
+PASS input.valueAsNumber = "foo" threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NaN threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Infinity threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.POSITIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS input.valueAsNumber = Number.NEGATIVE_INFINITY threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/input-valueasnumber-week.html b/LayoutTests/fast/forms/input-valueasnumber-week.html
new file mode 100644
index 0000000..a0293ad
--- /dev/null
+++ b/LayoutTests/fast/forms/input-valueasnumber-week.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/input-valueasnumber-week.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-date.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-date.js
new file mode 100644
index 0000000..3fc9a2a
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-date.js
@@ -0,0 +1,42 @@
+description('Tests for .valueAsNumber with &lt;input type=date>.');
+
+var input = document.createElement('input');
+input.type = 'date';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(year, month, day) {
+    input.valueAsNumber = Date.UTC(year, month, day);
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("")', 'Number.NaN');
+shouldBe('valueAsNumberFor("1969-12-31")', 'Date.UTC(1969, 11, 31)');
+shouldBe('valueAsNumberFor("1970-01-01")', 'Date.UTC(1970, 0, 1)');
+shouldBe('valueAsNumberFor("2009-12-22")', 'Date.UTC(2009, 11, 22)');
+
+shouldBe('setValueAsNumberAndGetValue(1969, 11, 1)', '"1969-12-01"');
+shouldBe('setValueAsNumberAndGetValue(1970, 0, 1)', '"1970-01-01"');
+shouldBe('setValueAsNumberAndGetValue(2009, 11, 31)', '"2009-12-31"');
+shouldBe('setValueAsNumberAndGetValue(10000, 0, 1)', '"10000-01-01"');
+
+shouldBe('setValueAsNumberAndGetValue(794, 9, 22)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 8, 30)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 15)', '"1582-10-15"');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 31)', '"1582-10-31"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 13)', '"275760-09-13"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 14)', '"275760-09-14"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('input.value = ""; input.valueAsNumber = null; input.value', '"1970-01-01"');
+shouldThrow('input.valueAsNumber = "foo"', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Infinity', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.POSITIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NEGATIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-datetime.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-datetime.js
new file mode 100644
index 0000000..36e5755
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-datetime.js
@@ -0,0 +1,47 @@
+description('Tests for .valueAsNumber with &lt;input type=datetime>.');
+
+var input = document.createElement('input');
+input.type = 'datetime';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(year, month, day, hour, minute, second, msec) {
+    input.valueAsNumber = Date.UTC(year, month, day, hour, minute, second, msec);
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("")', 'Number.NaN');
+shouldBe('valueAsNumberFor("1969-12-31T12:34:56.789Z")', 'Date.UTC(1969, 11, 31, 12, 34, 56, 789)');
+shouldBe('valueAsNumberFor("1970-01-01T00:00:00.000Z")', 'Date.UTC(1970, 0, 1, 0, 0, 0)');
+shouldBe('valueAsNumberFor("2009-12-22T11:32:11Z")', 'Date.UTC(2009, 11, 22, 11, 32, 11)');
+
+shouldBe('setValueAsNumberAndGetValue(1969, 11, 1, 0, 0, 0, 0)', '"1969-12-01T00:00Z"');
+shouldBe('setValueAsNumberAndGetValue(1970, 0, 1, 10, 1, 0, 100)', '"1970-01-01T10:01:00.100Z"');
+shouldBe('setValueAsNumberAndGetValue(2009, 11, 31, 23, 59, 59, 999)', '"2009-12-31T23:59:59.999Z"');
+shouldBe('setValueAsNumberAndGetValue(10000, 0, 1, 12, 0, 1, 0)', '"10000-01-01T12:00:01Z"');
+
+shouldBe('setValueAsNumberAndGetValue(794, 9, 22, 0, 0, 0, 0)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 14, 23, 59, 59, 999)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 15, 0, 0, 0, 0)', '"1582-10-15T00:00Z"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 13, 0, 0, 0, 0)', '"275760-09-13T00:00Z"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 13, 0, 0, 0, 1)', '"275760-09-13T00:00:00.001Z"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('input.value = ""; input.valueAsNumber = null; input.value', '"1970-01-01T00:00Z"');
+shouldThrow('input.valueAsNumber = "foo"', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Infinity', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.POSITIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NEGATIVE_INFINITY', '"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:00"');
+// 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.000"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-month.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-month.js
new file mode 100644
index 0000000..21cb4ec
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-month.js
@@ -0,0 +1,42 @@
+description('Tests for .valueAsNumber with &lt;input type=month>.');
+
+var input = document.createElement('input');
+input.type = 'month';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(year, month, day) {
+    input.valueAsNumber = Date.UTC(year, month, day);
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("")', 'Number.NaN');
+shouldBe('valueAsNumberFor("1969-12")', 'Date.UTC(1969, 11, 1, 0, 0, 0, 0)');
+shouldBe('valueAsNumberFor("1970-01")', 'Date.UTC(1970, 0, 1)');
+shouldBe('valueAsNumberFor("2009-12")', 'Date.UTC(2009, 11, 1)');
+
+shouldBe('setValueAsNumberAndGetValue(1969, 11, 1)', '"1969-12"');
+shouldBe('setValueAsNumberAndGetValue(1970, 0, 1)', '"1970-01"');
+shouldBe('setValueAsNumberAndGetValue(2009, 11, 31)', '"2009-12"');
+shouldBe('setValueAsNumberAndGetValue(10000, 0, 1)', '"10000-01"');
+
+shouldBe('setValueAsNumberAndGetValue(794, 9, 22)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 8, 30)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 1)', '"1582-10"');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 31)', '"1582-10"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 13)', '"275760-09"');
+shouldBe('setValueAsNumberAndGetValue(275760, 8, 14)', '"275760-09"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('input.value = ""; input.valueAsNumber = null; input.value', '"1970-01"');
+shouldThrow('input.valueAsNumber = "foo"', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Infinity', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.POSITIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NEGATIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-number.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-number.js
new file mode 100644
index 0000000..b166937
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-number.js
@@ -0,0 +1,65 @@
+description('Tests for .valueAsNumber with &lt;input type=number>.');
+
+var input = document.createElement('input');
+input.type = 'number';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(num) {
+    input.valueAsNumber = num;
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("0")', '0');
+shouldBe('valueAsNumberFor("10")', '10');
+shouldBe('valueAsNumberFor("01")', '1');
+shouldBe('valueAsNumberFor("-0")', '0'); // "-0" is 0 in HTML5.
+shouldBe('valueAsNumberFor("-1.2")', '-1.2');
+shouldBe('valueAsNumberFor("1.2E10")', '1.2E10');
+shouldBe('valueAsNumberFor("1.2E-10")', '1.2E-10');
+shouldBe('valueAsNumberFor("1.2E+10")', '1.2E10');
+shouldBe('valueAsNumberFor("12345678901234567890123456789012345678901234567890")', '1.2345678901234567E+49');
+shouldBe('valueAsNumberFor("0.12345678901234567890123456789012345678901234567890")', '0.123456789012345678');
+
+debug('valueAsNumber for invalid string values:');
+shouldBeTrue('isNaN(valueAsNumberFor(""))');
+shouldBeTrue('isNaN(valueAsNumberFor("abc"))');
+shouldBeTrue('isNaN(valueAsNumberFor("0xff"))');
+shouldBeTrue('isNaN(valueAsNumberFor("+1"))');
+shouldBeTrue('isNaN(valueAsNumberFor(" 10"))');
+shouldBeTrue('isNaN(valueAsNumberFor("10 "))');
+shouldBeTrue('isNaN(valueAsNumberFor(".2"))');
+shouldBeTrue('isNaN(valueAsNumberFor("1E"))');
+shouldBeTrue('isNaN(valueAsNumberFor("NaN"))');
+shouldBeTrue('isNaN(valueAsNumberFor("nan"))');
+shouldBeTrue('isNaN(valueAsNumberFor("Inf"))');
+shouldBeTrue('isNaN(valueAsNumberFor("inf"))');
+shouldBeTrue('isNaN(valueAsNumberFor("Infinity"))');
+shouldBeTrue('isNaN(valueAsNumberFor("infinity"))');
+
+debug('Too huge exponent to support');
+shouldBeTrue('isNaN(valueAsNumberFor("1.2E65535"))');
+
+debug('Tests for the valueAsNumber setter:');
+shouldBe('setValueAsNumberAndGetValue(0)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(10)', '"10"');
+shouldBe('setValueAsNumberAndGetValue(01)', '"1"');
+shouldBe('setValueAsNumberAndGetValue(-0)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(-1.2)', '"-1.2"');
+shouldBe('setValueAsNumberAndGetValue(1.2e10)', '"12000000000"');
+shouldBe('setValueAsNumberAndGetValue(1.2e-10)', '"1.2e-10"');
+shouldBe('setValueAsNumberAndGetValue(1.2345678901234567e+49)', '"1.2345678901234567e+49"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('setValueAsNumberAndGetValue(null)', '"0"');
+shouldThrow('setValueAsNumberAndGetValue("foo")', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(NaN)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.NaN)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Infinity)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.POSITIVE_INFINITY)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.NEGATIVE_INFINITY)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-range.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-range.js
new file mode 100644
index 0000000..97d17e8
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-range.js
@@ -0,0 +1,70 @@
+description('Tests for .valueAsNumber with &lt;input type=range>.');
+
+var input = document.createElement('input');
+input.type = 'range';
+document.body.appendChild(input);
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    input.offsetWidth; // Force to make a renderer work.
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(num) {
+    input.valueAsNumber = num;
+    input.offsetWidth; // Force to make a renderer work.
+    return input.value;
+}
+
+// The default values for type=range: min=0 max=100 step=1
+// Values are modifies for these restrictions.
+shouldBe('valueAsNumberFor("0")', '0');
+shouldBe('valueAsNumberFor("10")', '10');
+shouldBe('valueAsNumberFor("01")', '1');
+shouldBe('valueAsNumberFor("-0")', '0');
+shouldBe('valueAsNumberFor("-1.2")', '0');
+shouldBe('valueAsNumberFor("1.2E10")', '100');
+shouldBe('valueAsNumberFor("1.2E-10")', '0');
+shouldBe('valueAsNumberFor("1.2E+10")', '100');
+shouldBe('valueAsNumberFor("12345678901234567890123456789012345678901234567890")', '100');
+shouldBe('valueAsNumberFor("0.12345678901234567890123456789012345678901234567890")', '0');
+
+debug('valueAsNumber for invalid string values:');
+shouldBe('valueAsNumberFor("")', '50');
+shouldBe('valueAsNumberFor("abc")', '50');
+shouldBe('valueAsNumberFor("0xff")', '50');
+shouldBe('valueAsNumberFor("+1")', '50');
+shouldBe('valueAsNumberFor(" 10")', '50');
+shouldBe('valueAsNumberFor("10 ")', '50');
+shouldBe('valueAsNumberFor(".2")', '50');
+shouldBe('valueAsNumberFor("1E")', '50');
+shouldBe('valueAsNumberFor("NaN")', '50');
+shouldBe('valueAsNumberFor("nan")', '50');
+shouldBe('valueAsNumberFor("Inf")', '50');
+shouldBe('valueAsNumberFor("inf")', '50');
+shouldBe('valueAsNumberFor("Infinity")', '50');
+shouldBe('valueAsNumberFor("infinity")', '50');
+
+debug('Too huge exponent to support');
+shouldBe('valueAsNumberFor("1.2E65535")', '50');
+
+debug('Tests for the valueAsNumber setter:');
+shouldBe('setValueAsNumberAndGetValue(0)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(10)', '"10"');
+shouldBe('setValueAsNumberAndGetValue(01)', '"1"');
+shouldBe('setValueAsNumberAndGetValue(-0)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(-1.2)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(1.2e10)', '"100"');
+shouldBe('setValueAsNumberAndGetValue(1.2e-10)', '"0"');
+shouldBe('setValueAsNumberAndGetValue(1.2345678901234567e+49)', '"100"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('setValueAsNumberAndGetValue(null)', '"0"');
+shouldThrow('setValueAsNumberAndGetValue("foo")', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(NaN)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.NaN)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Infinity)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.POSITIVE_INFINITY)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('setValueAsNumberAndGetValue(Number.NEGATIVE_INFINITY)', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-time.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-time.js
new file mode 100644
index 0000000..c207f2f
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-time.js
@@ -0,0 +1,46 @@
+description('Tests for .valueAsNumber with &lt;input type=time>.');
+
+var input = document.createElement('input');
+input.type = 'time';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(hour, minute, second, ms) {
+    input.valueAsNumber = ((hour * 60 + minute) * 60 + second) * 1000 + ms;
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("")', 'Number.NaN');
+shouldBe('valueAsNumberFor("00:00:00.000")', 'Date.UTC(1970, 0, 1, 0, 0, 0, 0)');
+shouldBe('valueAsNumberFor("04:35")', 'Date.UTC(1970, 0, 1, 4, 35, 0, 0)');
+shouldBe('valueAsNumberFor("23:59:59.999")', 'Date.UTC(1970, 0, 1, 23, 59, 59, 999)');
+
+shouldBe('setValueAsNumberAndGetValue(0, 0, 0, 0)', '"00:00"');
+shouldBe('setValueAsNumberAndGetValue(0, 0, 1, 0)', '"00:00:01"');
+shouldBe('setValueAsNumberAndGetValue(0, 0, 0, 2)', '"00:00:00.002"');
+shouldBe('setValueAsNumberAndGetValue(11, 59, 59, 999)', '"11:59:59.999"');
+shouldBe('setValueAsNumberAndGetValue(12, 0, 0, 0)', '"12:00"');
+shouldBe('setValueAsNumberAndGetValue(23, 59, 59, 999)', '"23:59:59.999"');
+shouldBe('setValueAsNumberAndGetValue(24, 0, 0, 0)', '"00:00"');
+shouldBe('setValueAsNumberAndGetValue(48, 0, 13, 0)', '"00:00:13"');
+shouldBe('setValueAsNumberAndGetValue(-23, -59, -59, 0)', '"00:00:01"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('input.value = ""; input.valueAsNumber = null; input.value', '"00:00"');
+shouldThrow('input.valueAsNumber = "foo"', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Infinity', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.POSITIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NEGATIVE_INFINITY', '"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(0, 0, 0, 0)', '"00:00:00"');
+// 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(0, 0, 0, 0)', '"00:00:00.000"');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-unsupported.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-unsupported.js
new file mode 100644
index 0000000..238b9c5
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-unsupported.js
@@ -0,0 +1,32 @@
+description('Tests for .valueAsNumber with non-supported input types.');
+
+var input = document.createElement('input');
+input.type = 'range';
+document.body.appendChild(input);
+
+function checkValueAsNumber(type) {
+    debug('Check for type=' + type);
+    input.value = '0';
+    input.type = type;
+    shouldBe('input.valueAsNumber', 'Number.NaN');
+    shouldThrow('input.valueAsNumber = 0', '"Error: INVALID_STATE_ERR: DOM Exception 11"');
+}
+
+checkValueAsNumber('button');
+checkValueAsNumber('checkbox');
+checkValueAsNumber('color');
+checkValueAsNumber('email');
+checkValueAsNumber('file');
+checkValueAsNumber('hidden');
+checkValueAsNumber('image');
+checkValueAsNumber('khtml_isindex');
+checkValueAsNumber('password');
+checkValueAsNumber('radio');
+checkValueAsNumber('reset');
+checkValueAsNumber('search');
+checkValueAsNumber('submit');
+checkValueAsNumber('tel');
+checkValueAsNumber('text');
+checkValueAsNumber('url');
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/forms/script-tests/input-valueasnumber-week.js b/LayoutTests/fast/forms/script-tests/input-valueasnumber-week.js
new file mode 100644
index 0000000..00b788b
--- /dev/null
+++ b/LayoutTests/fast/forms/script-tests/input-valueasnumber-week.js
@@ -0,0 +1,68 @@
+description('Tests for .valueAsNumber with &lt;input type=week>.');
+
+var input = document.createElement('input');
+input.type = 'week';
+
+function valueAsNumberFor(stringValue) {
+    input.value = stringValue;
+    return input.valueAsNumber;
+}
+
+function setValueAsNumberAndGetValue(year, month, day) {
+    input.valueAsNumber = Date.UTC(year, month, day);
+    return input.value;
+}
+
+shouldBe('valueAsNumberFor("")', 'Number.NaN');
+// January 1st is Monday. W01 starts on January 1nd.
+shouldBe('valueAsNumberFor("2007-W01")', 'Date.UTC(2007, 0, 1)');
+// January 1st is Tuesday. W01 starts on December 31th.
+shouldBe('valueAsNumberFor("2008-W01")', 'Date.UTC(2007, 11, 31)');
+// January 1st is Wednesday. W01 starts on December 29th.
+shouldBe('valueAsNumberFor("2003-W01")', 'Date.UTC(2002, 11, 30)');
+// January 1st is Thursday. W01 starts on December 29th.
+shouldBe('valueAsNumberFor("2004-W01")', 'Date.UTC(2003, 11, 29, 0, 0, 0, 0)');
+// January 1st is Friday. W01 starts on January 4th.
+shouldBe('valueAsNumberFor("2010-W01")', 'Date.UTC(2010, 0, 4)');
+// January 1st is Saturday. W01 starts on January 3rd.
+shouldBe('valueAsNumberFor("2005-W01")', 'Date.UTC(2005, 0, 3)');
+// January 1st is Sunday. W01 starts on January 2nd.
+shouldBe('valueAsNumberFor("2006-W01")', 'Date.UTC(2006, 0, 2)');
+
+debug('Various January 1st:');
+shouldBe('setValueAsNumberAndGetValue(2007, 0, 1)', '"2007-W01"');
+shouldBe('setValueAsNumberAndGetValue(2008, 0, 1)', '"2008-W01"');
+shouldBe('setValueAsNumberAndGetValue(2003, 0, 1)', '"2003-W01"');
+shouldBe('setValueAsNumberAndGetValue(2004, 0, 1)', '"2004-W01"');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 1)', '"2009-W53"');
+shouldBe('setValueAsNumberAndGetValue(2005, 0, 1)', '"2004-W53"');
+shouldBe('setValueAsNumberAndGetValue(2006, 0, 1)', '"2005-W52"');
+
+debug('Normal cases:');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 3)', '"2009-W53"');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 4)', '"2010-W01"');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 10)', '"2010-W01"');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 11)', '"2010-W02"');
+shouldBe('setValueAsNumberAndGetValue(2010, 0, 17)', '"2010-W02"');
+shouldBe('setValueAsNumberAndGetValue(2010, 11, 31)', '"2010-W52"');
+
+debug('Around Gregorian calendar starting year:');
+// Gregorian calendar started in 1582. We don't support that year.
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 14)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 9, 15)', '""');
+shouldBe('setValueAsNumberAndGetValue(1582, 11, 31)', '""');
+// January 1st is Saturday. W01 starts on January 3rd.
+shouldBe('setValueAsNumberAndGetValue(1583, 0, 1)', '""');
+shouldBe('setValueAsNumberAndGetValue(1583, 0, 2)', '""');
+shouldBe('setValueAsNumberAndGetValue(1583, 0, 3)', '"1583-W01"');
+
+debug('Tests to set invalid values to valueAsNumber:');
+shouldBe('input.value = ""; input.valueAsNumber = null; input.value', '"1970-W01"');
+shouldThrow('input.valueAsNumber = "foo"', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NaN', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Infinity', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.POSITIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+shouldThrow('input.valueAsNumber = Number.NEGATIVE_INFINITY', '"Error: NOT_SUPPORTED_ERR: DOM Exception 9"');
+
+var successfullyParsed = true;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 07c549a..38129e1 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,31 @@
+2010-01-26  Kent Tamura  <tkent at chromium.org>
+
+        Reviewed by Darin Adler.
+
+        HTMLInputElement::valueAsNumber support except type=datetime-local.
+        https://bugs.webkit.org/show_bug.cgi?id=32696
+
+        Tests: fast/forms/input-valueasnumber-date.html
+               fast/forms/input-valueasnumber-datetime.html
+               fast/forms/input-valueasnumber-month.html
+               fast/forms/input-valueasnumber-number.html
+               fast/forms/input-valueasnumber-range.html
+               fast/forms/input-valueasnumber-time.html
+               fast/forms/input-valueasnumber-unsupported.html
+               fast/forms/input-valueasnumber-week.html
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::valueAsNumber):
+          According to the specification, we should return NaN for invalid values.
+        (WebCore::HTMLInputElement::setValueAsNumber):
+          According to the specification, throws NOT_SUPPORTED_ERR for Infinitiy or NaN,
+          and throws INVALID_STATE_ERR for unsupported types.
+        (WebCore::HTMLInputElement::formStringToDouble):
+          According to the step 14 of Real Number in the specification, we
+          should round -0 to 0.
+        * html/HTMLInputElement.h: Declare valueAsNumber() and setValueAsNumber().
+        * html/HTMLInputElement.idl: Add valueAsNumber.
+
 2010-01-26  Dave Hyatt  <hyatt at apple.com>
 
         Reviewed by Oliver Hunt.
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index a1ffb3f..b60cdfd 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -1467,6 +1467,94 @@ void HTMLInputElement::setValueAsDate(double value, ExceptionCode& ec)
     setValue(dateTime.toString());
 }
 
+double HTMLInputElement::valueAsNumber() const
+{
+    const double nan = numeric_limits<double>::quiet_NaN();
+    switch (inputType()) {
+    case DATE:
+    case DATETIME:
+    case MONTH:
+    case TIME:
+    case WEEK: {
+        ISODateTime dateTime;
+        if (!formStringToISODateTime(inputType(), value(), &dateTime))
+            return nan;
+        return dateTime.millisecondsSinceEpoch();
+    }
+    case NUMBER:
+    case RANGE: {
+        double numberValue;
+        if (!formStringToDouble(value(), &numberValue))
+            return nan;
+        return numberValue;
+    }
+
+    case BUTTON:
+    case CHECKBOX:
+    case COLOR:
+    case DATETIMELOCAL: // FIXME: Unlike valueAsDate, valueAsNumber should support DATETIMELOCAL type.
+    case EMAIL:
+    case FILE:
+    case HIDDEN:
+    case IMAGE:
+    case ISINDEX:
+    case PASSWORD:
+    case RADIO:
+    case RESET:
+    case SEARCH:
+    case SUBMIT:
+    case TELEPHONE:
+    case TEXT:
+    case URL:
+        return nan;
+    }
+    ASSERT_NOT_REACHED();
+    return nan;
+}
+
+void HTMLInputElement::setValueAsNumber(double newValue, ExceptionCode& ec)
+{
+    if (!isfinite(newValue)) {
+        ec = NOT_SUPPORTED_ERR;
+        return;
+    }
+    switch (inputType()) {
+    case DATE:
+    case DATETIME:
+    case MONTH:
+    case TIME:
+    case WEEK:
+        setValueAsDate(newValue, ec);
+        return;
+    case NUMBER:
+    case RANGE:
+        setValue(formStringFromDouble(newValue));
+        return;
+
+    case DATETIMELOCAL: // FIXME: implement ISODateTime.toString()
+    case BUTTON:
+    case CHECKBOX:
+    case COLOR:
+    case EMAIL:
+    case FILE:
+    case HIDDEN:
+    case IMAGE:
+    case ISINDEX:
+    case PASSWORD:
+    case RADIO:
+    case RESET:
+    case SEARCH:
+    case SUBMIT:
+    case TELEPHONE:
+    case TEXT:
+    case URL:
+        ec = INVALID_STATE_ERR;
+        return;
+    }
+    ASSERT_NOT_REACHED();
+    return;
+}
+
 String HTMLInputElement::placeholder() const
 {
     return getAttribute(placeholderAttr).string();
@@ -2195,8 +2283,11 @@ bool HTMLInputElement::formStringToDouble(const String& src, double* out)
     if (!valid)
         return false;
     // NaN and Infinity are not valid numbers according to the standard.
-    if (isnan(value) || isinf(value))
+    if (!isfinite(value))
         return false;
+    // -0 -> 0
+    if (!value)
+        value = 0;
     if (out)
         *out = value;
     return true;
diff --git a/WebCore/html/HTMLInputElement.h b/WebCore/html/HTMLInputElement.h
index 2b7b28b..2cd08c9 100644
--- a/WebCore/html/HTMLInputElement.h
+++ b/WebCore/html/HTMLInputElement.h
@@ -147,6 +147,9 @@ public:
     double valueAsDate() const;
     void setValueAsDate(double, ExceptionCode&);
 
+    double valueAsNumber() const;
+    void setValueAsNumber(double, ExceptionCode&);
+
     virtual String placeholder() const;
     virtual void setPlaceholder(const String&);
 
diff --git a/WebCore/html/HTMLInputElement.idl b/WebCore/html/HTMLInputElement.idl
index e528208..4563120 100644
--- a/WebCore/html/HTMLInputElement.idl
+++ b/WebCore/html/HTMLInputElement.idl
@@ -58,6 +58,7 @@ module html {
                  attribute [ConvertNullToNullString] DOMString useMap;
                  attribute [ConvertNullToNullString] DOMString value;
                  attribute Date            valueAsDate setter raises(DOMException);
+                 attribute double          valueAsNumber setter raises(DOMException);
 #if defined(ENABLE_DATALIST) && ENABLE_DATALIST
         readonly attribute HTMLOptionElement selectedOption;
 #endif

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list