[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 <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 <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 <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 <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 <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 <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 <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