Title: [138836] trunk
Revision
138836
Author
jsb...@chromium.org
Date
2013-01-04 12:42:37 -0800 (Fri, 04 Jan 2013)

Log Message

Add tests for WebIDL type conversions
https://bugs.webkit.org/show_bug.cgi?id=105927

Reviewed by Adam Barth.

Source/WebCore:

Expose attributes of various WebIDL types for testing ECMAScript value conversion,
including edge cases such as NaNs, Infinities, etc. These attributes hang off
a TypeConversions object created via window.internals.typeConversions().

Test: fast/js/webidl-type-mapping.html

* CMakeLists.txt:
* DerivedSources.make:
* DerivedSources.pri:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.gyp/WebCore.gyp:
* WebCore.gypi:
* WebCore.vcproj/WebCoreTestSupport.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* testing/Internals.cpp:
(WebCore::Internals::typeConversions):
(WebCore):
* testing/Internals.h:
(WebCore):
* testing/Internals.idl:
* testing/TypeConversions.h: Added.
(WebCore):
(TypeConversions):
(WebCore::TypeConversions::create):
(WebCore::TypeConversions::testLong):
(WebCore::TypeConversions::setTestLong):
(WebCore::TypeConversions::testUnsignedLong):
(WebCore::TypeConversions::setTestUnsignedLong):
(WebCore::TypeConversions::testLongLong):
(WebCore::TypeConversions::setTestLongLong):
(WebCore::TypeConversions::testUnsignedLongLong):
(WebCore::TypeConversions::setTestUnsignedLongLong):
(WebCore::TypeConversions::TypeConversions):
* testing/TypeConversions.idl: Added.

LayoutTests:

This currently fails long long conversions of non-finites (which should map to 0). Patch
in progress at: http://wkbug.com/96798

* fast/js/webidl-type-mapping-expected.txt: Added.
* fast/js/webidl-type-mapping.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (138835 => 138836)


--- trunk/LayoutTests/ChangeLog	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/LayoutTests/ChangeLog	2013-01-04 20:42:37 UTC (rev 138836)
@@ -1,3 +1,16 @@
+2013-01-04  Joshua Bell  <jsb...@chromium.org>
+
+        Add tests for WebIDL type conversions
+        https://bugs.webkit.org/show_bug.cgi?id=105927
+
+        Reviewed by Adam Barth.
+
+        This currently fails long long conversions of non-finites (which should map to 0). Patch
+        in progress at: http://wkbug.com/96798
+
+        * fast/js/webidl-type-mapping-expected.txt: Added.
+        * fast/js/webidl-type-mapping.html: Added.
+
 2013-01-04  Stephen White  <senorbla...@chromium.org>
 
         Invalidation of some SVG filter attributes on HTML content doesn't work 

Added: trunk/LayoutTests/fast/js/webidl-type-mapping-expected.txt (0 => 138836)


--- trunk/LayoutTests/fast/js/webidl-type-mapping-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/js/webidl-type-mapping-expected.txt	2013-01-04 20:42:37 UTC (rev 138836)
@@ -0,0 +1,279 @@
+Exercise WebIDL type conversions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+converter = window.internals.typeConversions()
+
+PASS 'testLong' in converter is true
+PASS typeof converter.testLong === 'number' is true
+converter.testLong = 0
+PASS converter.testLong is 0
+converter.testLong = -1
+PASS converter.testLong is -1
+converter.testLong = 1
+PASS converter.testLong is 1
+converter.testLong = 0x7F
+PASS converter.testLong is 0x7F
+converter.testLong = 0x80
+PASS converter.testLong is 0x80
+converter.testLong = 0xFF
+PASS converter.testLong is 0xFF
+converter.testLong = -0x80
+PASS converter.testLong is -0x80
+converter.testLong = -0x81
+PASS converter.testLong is -0x81
+converter.testLong = 0x7FFF
+PASS converter.testLong is 0x7FFF
+converter.testLong = 0x8000
+PASS converter.testLong is 0x8000
+converter.testLong = 0xFFFF
+PASS converter.testLong is 0xFFFF
+converter.testLong = -0x8000
+PASS converter.testLong is -0x8000
+converter.testLong = -0x8001
+PASS converter.testLong is -0x8001
+converter.testLong = 0x7FFFFFFF
+PASS converter.testLong is 0x7FFFFFFF
+converter.testLong = 0x80000000
+PASS converter.testLong is -0x80000000
+converter.testLong = 0xFFFFFFFF
+PASS converter.testLong is -1
+converter.testLong = -0x80000000
+PASS converter.testLong is -0x80000000
+converter.testLong = -0x80000001
+PASS converter.testLong is 0x7FFFFFFF
+converter.testLong = 0xDCBA9876543210
+PASS converter.testLong is 0x76543210
+converter.testLong = Number.MAX_VALUE
+PASS converter.testLong is 0
+converter.testLong = Number.MIN_VALUE
+PASS converter.testLong is 0
+converter.testLong = -Number.MAX_VALUE
+PASS converter.testLong is 0
+converter.testLong = -Number.MIN_VALUE
+PASS converter.testLong is 0
+converter.testLong = 1.99
+PASS converter.testLong is 1
+converter.testLong = -1.99
+PASS converter.testLong is -1
+converter.testLong = Infinity
+PASS converter.testLong is 0
+converter.testLong = -Infinity
+PASS converter.testLong is 0
+converter.testLong = NaN
+PASS converter.testLong is 0
+converter.testLong = false
+PASS converter.testLong is 0
+converter.testLong = true
+PASS converter.testLong is 1
+converter.testLong = ''
+PASS converter.testLong is 0
+converter.testLong = 'abc'
+PASS converter.testLong is 0
+converter.testLong = null
+PASS converter.testLong is 0
+converter.testLong = undefined
+PASS converter.testLong is 0
+PASS converter.testLong = {valueOf:function(){throw new Error;}} threw exception Error.
+
+PASS 'testUnsignedLong' in converter is true
+PASS typeof converter.testUnsignedLong === 'number' is true
+converter.testUnsignedLong = 0
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = -1
+PASS converter.testUnsignedLong is 0xFFFFFFFF
+converter.testUnsignedLong = 1
+PASS converter.testUnsignedLong is 1
+converter.testUnsignedLong = 0x7F
+PASS converter.testUnsignedLong is 0x7F
+converter.testUnsignedLong = 0x80
+PASS converter.testUnsignedLong is 0x80
+converter.testUnsignedLong = 0xFF
+PASS converter.testUnsignedLong is 0xFF
+converter.testUnsignedLong = -0x80
+PASS converter.testUnsignedLong is 0xFFFFFF80
+converter.testUnsignedLong = -0x81
+PASS converter.testUnsignedLong is 0xFFFFFF7F
+converter.testUnsignedLong = 0x7FFF
+PASS converter.testUnsignedLong is 0x7FFF
+converter.testUnsignedLong = 0x8000
+PASS converter.testUnsignedLong is 0x8000
+converter.testUnsignedLong = 0xFFFF
+PASS converter.testUnsignedLong is 0xFFFF
+converter.testUnsignedLong = -0x8000
+PASS converter.testUnsignedLong is 0xFFFF8000
+converter.testUnsignedLong = -0x8001
+PASS converter.testUnsignedLong is 0xFFFF7FFF
+converter.testUnsignedLong = 0x7FFFFFFF
+PASS converter.testUnsignedLong is 0x7FFFFFFF
+converter.testUnsignedLong = 0x80000000
+PASS converter.testUnsignedLong is 0x80000000
+converter.testUnsignedLong = 0xFFFFFFFF
+PASS converter.testUnsignedLong is 0xFFFFFFFF
+converter.testUnsignedLong = -0x80000000
+PASS converter.testUnsignedLong is 0x80000000
+converter.testUnsignedLong = -0x80000001
+PASS converter.testUnsignedLong is 0x7FFFFFFF
+converter.testUnsignedLong = 0xDCBA9876543210
+PASS converter.testUnsignedLong is 0x76543210
+converter.testUnsignedLong = Number.MAX_VALUE
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = Number.MIN_VALUE
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = -Number.MAX_VALUE
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = -Number.MIN_VALUE
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = 1.99
+PASS converter.testUnsignedLong is 1
+converter.testUnsignedLong = -1.99
+PASS converter.testUnsignedLong is 0xFFFFFFFF
+converter.testUnsignedLong = Infinity
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = -Infinity
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = NaN
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = false
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = true
+PASS converter.testUnsignedLong is 1
+converter.testUnsignedLong = ''
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = 'abc'
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = null
+PASS converter.testUnsignedLong is 0
+converter.testUnsignedLong = undefined
+PASS converter.testUnsignedLong is 0
+PASS converter.testUnsignedLong = {valueOf:function(){throw new Error;}} threw exception Error.
+
+PASS 'testLongLong' in converter is true
+PASS typeof converter.testLongLong === 'number' is true
+converter.testLongLong = 0
+PASS converter.testLongLong is 0
+converter.testLongLong = -1
+PASS converter.testLongLong is -1
+converter.testLongLong = 1
+PASS converter.testLongLong is 1
+converter.testLongLong = 0x7F
+PASS converter.testLongLong is 0x7F
+converter.testLongLong = 0x80
+PASS converter.testLongLong is 0x80
+converter.testLongLong = 0xFF
+PASS converter.testLongLong is 0xFF
+converter.testLongLong = -0x80
+PASS converter.testLongLong is -0x80
+converter.testLongLong = -0x81
+PASS converter.testLongLong is -0x81
+converter.testLongLong = 0x7FFF
+PASS converter.testLongLong is 0x7FFF
+converter.testLongLong = 0x8000
+PASS converter.testLongLong is 0x8000
+converter.testLongLong = 0xFFFF
+PASS converter.testLongLong is 0xFFFF
+converter.testLongLong = -0x8000
+PASS converter.testLongLong is -0x8000
+converter.testLongLong = -0x8001
+PASS converter.testLongLong is -0x8001
+converter.testLongLong = 0x7FFFFFFF
+PASS converter.testLongLong is 0x7FFFFFFF
+converter.testLongLong = 0x80000000
+PASS converter.testLongLong is 0x80000000
+converter.testLongLong = 0xFFFFFFFF
+PASS converter.testLongLong is 0xFFFFFFFF
+converter.testLongLong = -0x80000000
+PASS converter.testLongLong is -0x80000000
+converter.testLongLong = -0x80000001
+PASS converter.testLongLong is -0x80000001
+converter.testLongLong = 0xDCBA9876543210
+PASS converter.testLongLong is 0xDCBA9876543210
+converter.testLongLong = Number.MIN_VALUE
+PASS converter.testLongLong is 0
+converter.testLongLong = -Number.MIN_VALUE
+PASS converter.testLongLong is 0
+converter.testLongLong = 1.99
+PASS converter.testLongLong is 1
+converter.testLongLong = -1.99
+PASS converter.testLongLong is -1
+converter.testLongLong = false
+PASS converter.testLongLong is 0
+converter.testLongLong = true
+PASS converter.testLongLong is 1
+converter.testLongLong = ''
+PASS converter.testLongLong is 0
+converter.testLongLong = 'abc'
+PASS converter.testLongLong is 0
+converter.testLongLong = null
+PASS converter.testLongLong is 0
+converter.testLongLong = undefined
+PASS converter.testLongLong is 0
+PASS converter.testLongLong = {valueOf:function(){throw new Error;}} threw exception Error.
+
+PASS 'testUnsignedLongLong' in converter is true
+PASS typeof converter.testUnsignedLongLong === 'number' is true
+converter.testUnsignedLongLong = 0
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = -1
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFFFFFF
+converter.testUnsignedLongLong = 1
+PASS converter.testUnsignedLongLong is 1
+converter.testUnsignedLongLong = 0x7F
+PASS converter.testUnsignedLongLong is 0x7F
+converter.testUnsignedLongLong = 0x80
+PASS converter.testUnsignedLongLong is 0x80
+converter.testUnsignedLongLong = 0xFF
+PASS converter.testUnsignedLongLong is 0xFF
+converter.testUnsignedLongLong = -0x80
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFFFF80
+converter.testUnsignedLongLong = -0x81
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFFFF7F
+converter.testUnsignedLongLong = 0x7FFF
+PASS converter.testUnsignedLongLong is 0x7FFF
+converter.testUnsignedLongLong = 0x8000
+PASS converter.testUnsignedLongLong is 0x8000
+converter.testUnsignedLongLong = 0xFFFF
+PASS converter.testUnsignedLongLong is 0xFFFF
+converter.testUnsignedLongLong = -0x8000
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFF8000
+converter.testUnsignedLongLong = -0x8001
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFF7FFF
+converter.testUnsignedLongLong = 0x7FFFFFFF
+PASS converter.testUnsignedLongLong is 0x7FFFFFFF
+converter.testUnsignedLongLong = 0x80000000
+PASS converter.testUnsignedLongLong is 0x80000000
+converter.testUnsignedLongLong = 0xFFFFFFFF
+PASS converter.testUnsignedLongLong is 0xFFFFFFFF
+converter.testUnsignedLongLong = -0x80000000
+PASS converter.testUnsignedLongLong is 0xFFFFFFFF80000000
+converter.testUnsignedLongLong = -0x80000001
+PASS converter.testUnsignedLongLong is 0xFFFFFFFF7FFFFFFF
+converter.testUnsignedLongLong = 0xDCBA9876543210
+PASS converter.testUnsignedLongLong is 0xDCBA9876543210
+converter.testUnsignedLongLong = Number.MIN_VALUE
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = -Number.MIN_VALUE
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = 1.99
+PASS converter.testUnsignedLongLong is 1
+converter.testUnsignedLongLong = -1.99
+PASS converter.testUnsignedLongLong is 0xFFFFFFFFFFFFFFFF
+converter.testUnsignedLongLong = false
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = true
+PASS converter.testUnsignedLongLong is 1
+converter.testUnsignedLongLong = ''
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = 'abc'
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = null
+PASS converter.testUnsignedLongLong is 0
+converter.testUnsignedLongLong = undefined
+PASS converter.testUnsignedLongLong is 0
+PASS converter.testUnsignedLongLong = {valueOf:function(){throw new Error;}} threw exception Error.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/js/webidl-type-mapping.html (0 => 138836)


--- trunk/LayoutTests/fast/js/webidl-type-mapping.html	                        (rev 0)
+++ trunk/LayoutTests/fast/js/webidl-type-mapping.html	2013-01-04 20:42:37 UTC (rev 138836)
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<script src=""
+<script>
+description("Exercise WebIDL type conversions.");
+
+quiet = true;
+evalAndLog("converter = window.internals.typeConversions()");
+debug("");
+
+function verifyAttribute(attribute)
+{
+    shouldBeTrue("'" + attribute + "' in converter", quiet);
+    shouldBeTrue("typeof converter." + attribute + " === 'number'", quiet);
+    evalAndLog("converter." + attribute + " = 123", quiet);
+    shouldBe("converter." + attribute, "123", quiet);
+    evalAndLog("converter." + attribute + " = 0", quiet);
+    shouldBe("converter." + attribute, "0", quiet);
+}
+
+function convert(attribute, value, expected)
+{
+    if (arguments.length < 3) {
+        expected = value;
+    }
+    evalAndLog("converter." + attribute + " = " + value);
+    shouldBe("converter." + attribute, expected);
+}
+
+function convertThrows(attribute, value)
+{
+    shouldThrow("converter." + attribute + " = " + value);
+}
+
+function testNonNumericToNumeric(attribute)
+{
+    convert(attribute, "false", "0");
+    convert(attribute, "true", "1");
+    convert(attribute, "''", "0");
+    convert(attribute, "'abc'", "0");
+    convert(attribute, "null", "0");
+    convert(attribute, "undefined", "0");
+}
+
+type = "testLong";
+verifyAttribute(type);
+convert(type, "0");
+convert(type, "-1");
+convert(type, "1");
+convert(type, "0x7F");
+convert(type, "0x80");
+convert(type, "0xFF");
+convert(type, "-0x80");
+convert(type, "-0x81");
+convert(type, "0x7FFF");
+convert(type, "0x8000");
+convert(type, "0xFFFF");
+convert(type, "-0x8000");
+convert(type, "-0x8001");
+convert(type, "0x7FFFFFFF");
+convert(type, "0x80000000", "-0x80000000");
+convert(type, "0xFFFFFFFF", "-1");
+convert(type, "-0x80000000");
+convert(type, "-0x80000001", "0x7FFFFFFF");
+convert(type, "0xDCBA9876543210", "0x76543210");
+convert(type, "Number.MAX_VALUE", "0");
+convert(type, "Number.MIN_VALUE", "0");
+convert(type, "-Number.MAX_VALUE", "0");
+convert(type, "-Number.MIN_VALUE", "0");
+convert(type, "1.99", "1");
+convert(type, "-1.99", "-1");
+convert(type, "Infinity", "0");
+convert(type, "-Infinity", "0");
+convert(type, "NaN", "0");
+testNonNumericToNumeric(type);
+convertThrows(type, "{valueOf:function(){throw new Error;}}");
+debug("");
+
+type = "testUnsignedLong";
+verifyAttribute(type);
+convert(type, "0");
+convert(type, "-1", "0xFFFFFFFF");
+convert(type, "1");
+convert(type, "0x7F");
+convert(type, "0x80");
+convert(type, "0xFF");
+convert(type, "-0x80", "0xFFFFFF80");
+convert(type, "-0x81", "0xFFFFFF7F");
+convert(type, "0x7FFF");
+convert(type, "0x8000");
+convert(type, "0xFFFF");
+convert(type, "-0x8000", "0xFFFF8000");
+convert(type, "-0x8001", "0xFFFF7FFF");
+convert(type, "0x7FFFFFFF");
+convert(type, "0x80000000");
+convert(type, "0xFFFFFFFF");
+convert(type, "-0x80000000", "0x80000000");
+convert(type, "-0x80000001", "0x7FFFFFFF");
+convert(type, "0xDCBA9876543210", "0x76543210");
+convert(type, "Number.MAX_VALUE", "0");
+convert(type, "Number.MIN_VALUE", "0");
+convert(type, "-Number.MAX_VALUE", "0");
+convert(type, "-Number.MIN_VALUE", "0");
+convert(type, "1.99", "1");
+convert(type, "-1.99", "0xFFFFFFFF");
+convert(type, "Infinity", "0");
+convert(type, "-Infinity", "0");
+convert(type, "NaN", "0");
+testNonNumericToNumeric(type);
+convertThrows(type, "{valueOf:function(){throw new Error;}}");
+debug("");
+
+type = "testLongLong";
+verifyAttribute(type);
+convert(type, "0");
+convert(type, "-1");
+convert(type, "1");
+convert(type, "0x7F");
+convert(type, "0x80");
+convert(type, "0xFF");
+convert(type, "-0x80");
+convert(type, "-0x81");
+convert(type, "0x7FFF");
+convert(type, "0x8000");
+convert(type, "0xFFFF");
+convert(type, "-0x8000");
+convert(type, "-0x8001");
+convert(type, "0x7FFFFFFF");
+convert(type, "0x80000000");
+convert(type, "0xFFFFFFFF");
+convert(type, "-0x80000000");
+convert(type, "-0x80000001");
+convert(type, "0xDCBA9876543210");
+convert(type, "Number.MIN_VALUE", "0");
+convert(type, "-Number.MIN_VALUE", "0");
+// FIXME: Inconsistent results between V8 and JSC.
+//convert(type, "Number.MAX_VALUE", "0");
+//convert(type, "-Number.MAX_VALUE", "0");
+convert(type, "1.99", "1");
+convert(type, "-1.99", "-1");
+// FIXME: Inconsistent results between V8 and JSC.
+//convert(type, "Infinity", "0");
+//convert(type, "-Infinity", "0");
+//convert(type, "NaN", "0");
+testNonNumericToNumeric(type);
+convertThrows(type, "{valueOf:function(){throw new Error;}}");
+debug("");
+
+type = "testUnsignedLongLong";
+verifyAttribute(type);
+convert(type, "0");
+convert(type, "-1", "0xFFFFFFFFFFFFFFFF");
+convert(type, "1");
+convert(type, "0x7F");
+convert(type, "0x80");
+convert(type, "0xFF");
+convert(type, "-0x80", "0xFFFFFFFFFFFFFF80");
+convert(type, "-0x81", "0xFFFFFFFFFFFFFF7F");
+convert(type, "0x7FFF");
+convert(type, "0x8000");
+convert(type, "0xFFFF");
+convert(type, "-0x8000", "0xFFFFFFFFFFFF8000");
+convert(type, "-0x8001", "0xFFFFFFFFFFFF7FFF");
+convert(type, "0x7FFFFFFF");
+convert(type, "0x80000000");
+convert(type, "0xFFFFFFFF");
+convert(type, "-0x80000000", "0xFFFFFFFF80000000");
+convert(type, "-0x80000001", "0xFFFFFFFF7FFFFFFF");
+convert(type, "0xDCBA9876543210");
+convert(type, "Number.MIN_VALUE", "0");
+convert(type, "-Number.MIN_VALUE", "0");
+// FIXME: Inconsistent results between V8 and JSC.
+//convert(type, "Number.MAX_VALUE", "0");
+//convert(type, "-Number.MAX_VALUE", "0");
+convert(type, "1.99", "1");
+convert(type, "-1.99", "0xFFFFFFFFFFFFFFFF");
+// FIXME: Inconsistent results between V8 and JSC.
+//convert(type, "Infinity", "0");
+//convert(type, "-Infinity", "0");
+//convert(type, "NaN", "0");
+testNonNumericToNumeric(type);
+convertThrows(type, "{valueOf:function(){throw new Error;}}");
+debug("");
+
+</script>
+<script src=""

Modified: trunk/Source/WebCore/CMakeLists.txt (138835 => 138836)


--- trunk/Source/WebCore/CMakeLists.txt	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/CMakeLists.txt	2013-01-04 20:42:37 UTC (rev 138836)
@@ -2760,6 +2760,7 @@
     testing/Internals.idl
     testing/InternalSettings.idl
     testing/MallocStatistics.idl
+    testing/TypeConversions.idl
 )
 
 set(WebCoreTestSupport_SOURCES

Modified: trunk/Source/WebCore/ChangeLog (138835 => 138836)


--- trunk/Source/WebCore/ChangeLog	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/ChangeLog	2013-01-04 20:42:37 UTC (rev 138836)
@@ -1,3 +1,46 @@
+2013-01-04  Joshua Bell  <jsb...@chromium.org>
+
+        Add tests for WebIDL type conversions
+        https://bugs.webkit.org/show_bug.cgi?id=105927
+
+        Reviewed by Adam Barth.
+
+        Expose attributes of various WebIDL types for testing ECMAScript value conversion,
+        including edge cases such as NaNs, Infinities, etc. These attributes hang off
+        a TypeConversions object created via window.internals.typeConversions().
+
+        Test: fast/js/webidl-type-mapping.html
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * DerivedSources.pri:
+        * GNUmakefile.list.am:
+        * Target.pri:
+        * WebCore.gyp/WebCore.gyp:
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCoreTestSupport.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:
+        * testing/Internals.cpp:
+        (WebCore::Internals::typeConversions):
+        (WebCore):
+        * testing/Internals.h:
+        (WebCore):
+        * testing/Internals.idl:
+        * testing/TypeConversions.h: Added.
+        (WebCore):
+        (TypeConversions):
+        (WebCore::TypeConversions::create):
+        (WebCore::TypeConversions::testLong):
+        (WebCore::TypeConversions::setTestLong):
+        (WebCore::TypeConversions::testUnsignedLong):
+        (WebCore::TypeConversions::setTestUnsignedLong):
+        (WebCore::TypeConversions::testLongLong):
+        (WebCore::TypeConversions::setTestLongLong):
+        (WebCore::TypeConversions::testUnsignedLongLong):
+        (WebCore::TypeConversions::setTestUnsignedLongLong):
+        (WebCore::TypeConversions::TypeConversions):
+        * testing/TypeConversions.idl: Added.
+
 2013-01-04  Stephen White  <senorbla...@chromium.org>
 
         Invalidation of some SVG filter attributes on HTML content doesn't work 

Modified: trunk/Source/WebCore/DerivedSources.make (138835 => 138836)


--- trunk/Source/WebCore/DerivedSources.make	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/DerivedSources.make	2013-01-04 20:42:37 UTC (rev 138836)
@@ -599,6 +599,7 @@
     $(WebCore)/testing/Internals.idl \
     $(WebCore)/testing/InternalSettings.idl \
     $(WebCore)/testing/MallocStatistics.idl \
+    $(WebCore)/testing/TypeConversions.idl \
     $(WebCore)/workers/AbstractWorker.idl \
     $(WebCore)/workers/DedicatedWorkerContext.idl \
     $(WebCore)/workers/SharedWorker.idl \

Modified: trunk/Source/WebCore/DerivedSources.pri (138835 => 138836)


--- trunk/Source/WebCore/DerivedSources.pri	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/DerivedSources.pri	2013-01-04 20:42:37 UTC (rev 138836)
@@ -459,6 +459,7 @@
     $$PWD/testing/Internals.idl \
     $$PWD/testing/InternalSettings.idl \
     $$PWD/testing/MallocStatistics.idl \
+    $$PWD/testing/TypeConversions.idl \
     $$PWD/workers/AbstractWorker.idl \
     $$PWD/workers/DedicatedWorkerContext.idl \
     $$PWD/workers/SharedWorker.idl \

Modified: trunk/Source/WebCore/GNUmakefile.list.am (138835 => 138836)


--- trunk/Source/WebCore/GNUmakefile.list.am	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/GNUmakefile.list.am	2013-01-04 20:42:37 UTC (rev 138836)
@@ -1738,6 +1738,7 @@
 	$(WebCore)/testing/Internals.idl \
 	$(WebCore)/testing/InternalSettings.idl \
 	$(WebCore)/testing/MallocStatistics.idl \
+	$(WebCore)/testing/TypeConversions.idl \
 	$(WebCore)/workers/AbstractWorker.idl \
 	$(WebCore)/workers/DedicatedWorkerContext.idl \
 	$(WebCore)/workers/SharedWorker.idl \

Modified: trunk/Source/WebCore/Target.pri (138835 => 138836)


--- trunk/Source/WebCore/Target.pri	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/Target.pri	2013-01-04 20:42:37 UTC (rev 138836)
@@ -2775,6 +2775,7 @@
     testing/Internals.h \
     testing/InternalSettings.h \
     testing/MallocStatistics.h \
+    testing/TypeConversions.h \
     workers/AbstractWorker.h \
     workers/DedicatedWorkerContext.h \
     workers/DedicatedWorkerThread.h \

Modified: trunk/Source/WebCore/WebCore.gyp/WebCore.gyp (138835 => 138836)


--- trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	2013-01-04 20:42:37 UTC (rev 138836)
@@ -2253,6 +2253,8 @@
         '<@(webcore_test_support_files)',
         '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/V8MallocStatistics.cpp',
         '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8MallocStatistics.h',
+        '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/V8TypeConversions.cpp',
+        '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8TypeConversions.h',
         '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/V8Internals.cpp',
         '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8Internals.h',
         '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/V8InternalSettings.cpp',

Modified: trunk/Source/WebCore/WebCore.gypi (138835 => 138836)


--- trunk/Source/WebCore/WebCore.gypi	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/WebCore.gypi	2013-01-04 20:42:37 UTC (rev 138836)
@@ -5063,6 +5063,7 @@
           'testing/Internals.idl',
           'testing/InternalSettings.idl',
           'testing/MallocStatistics.idl',
+          'testing/TypeConversions.idl',
           '<(SHARED_INTERMEDIATE_DIR)/webkit/InternalSettingsGenerated.idl',
         ],
         'webcore_test_support_files': [
@@ -5079,6 +5080,7 @@
             'testing/MallocStatistics.h',
             'testing/MockPagePopupDriver.cpp',
             'testing/MockPagePopupDriver.h',
+            'testing/TypeConversions.h',
             '<(SHARED_INTERMEDIATE_DIR)/webkit/InternalSettingsGenerated.cpp',
             '<(SHARED_INTERMEDIATE_DIR)/webkit/InternalSettingsGenerated.h',
         ],

Modified: trunk/Source/WebCore/WebCore.vcproj/WebCoreTestSupport.vcproj (138835 => 138836)


--- trunk/Source/WebCore/WebCore.vcproj/WebCoreTestSupport.vcproj	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCoreTestSupport.vcproj	2013-01-04 20:42:37 UTC (rev 138836)
@@ -696,6 +696,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\testing\TypeConversions.h"
+				>
+			</File>
+			<File
 				RelativePath="..\testing\Internals.cpp"
 				>
 				<FileConfiguration

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (138835 => 138836)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2013-01-04 20:42:37 UTC (rev 138836)
@@ -3900,6 +3900,8 @@
 		A73F95FF12C97BFE0031AAF9 /* RoundedRect.h in Headers */ = {isa = PBXBuildFile; fileRef = A73F95FD12C97BFE0031AAF9 /* RoundedRect.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		A740B59514C935AB00A77FA4 /* JSMallocStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B4EA6914C9348400C8F5BF /* JSMallocStatistics.h */; };
 		A740B59714C935AF00A77FA4 /* JSMallocStatistics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B4EA6814C9348400C8F5BF /* JSMallocStatistics.cpp */; };
+		EBF5121D1696496C0056BD25 /* JSTypeConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF5121B1696496C0056BD25 /* JSTypeConversions.h */; };
+		EBF5121C1696496C0056BD25 /* JSTypeConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF5121A1696496C0056BD25 /* JSTypeConversions.cpp */; };
 		A740B5A514C935AB00A77FA4 /* JSInternalSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B4EA7914C9348400C8F5BF /* JSInternalSettings.h */; };
 		A740B5A714C935AF00A77FA4 /* JSInternalSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B4EA7814C9348400C8F5BF /* JSInternalSettings.cpp */; };
 		A74BB76B13BDA86300FF7BF0 /* ExceptionCodePlaceholder.h in Headers */ = {isa = PBXBuildFile; fileRef = A74BB76A13BDA86300FF7BF0 /* ExceptionCodePlaceholder.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -11308,6 +11310,8 @@
 		A7B070D1130A409C00A3763C /* FrameActionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameActionScheduler.h; sourceTree = "<group>"; };
 		A7B4EA6814C9348400C8F5BF /* JSMallocStatistics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMallocStatistics.cpp; sourceTree = "<group>"; };
 		A7B4EA6914C9348400C8F5BF /* JSMallocStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMallocStatistics.h; sourceTree = "<group>"; };
+		EBF5121A1696496C0056BD25 /* JSTypeConversions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypeConversions.cpp; sourceTree = "<group>"; };
+		EBF5121B1696496C0056BD25 /* JSTypeConversions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypeConversions.h; sourceTree = "<group>"; };
 		A7B4EA7814C9348400C8F5BF /* JSInternalSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSInternalSettings.cpp; sourceTree = "<group>"; };
 		A7B4EA7914C9348400C8F5BF /* JSInternalSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInternalSettings.h; sourceTree = "<group>"; };
 		A7B6E69D0B291A9600D0529F /* DragData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragData.h; sourceTree = "<group>"; };
@@ -13804,6 +13808,8 @@
 		E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleSheetContents.h; sourceTree = "<group>"; };
 		E55F4979151B888000BB67DB /* LengthFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LengthFunctions.cpp; sourceTree = "<group>"; };
 		E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LengthFunctions.h; sourceTree = "<group>"; };
+		EB081CD81696084400553730 /* TypeConversions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeConversions.h; sourceTree = "<group>"; };
+		EB081CD91696084400553730 /* TypeConversions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = TypeConversions.idl; sourceTree = "<group>"; };
 		ED2BA83B09A24B91006C0AC4 /* DocumentMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentMarker.h; sourceTree = "<group>"; };
 		ED501DC50B249F2900AE18D9 /* EditorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = EditorMac.mm; path = mac/EditorMac.mm; sourceTree = "<group>"; };
 		EDE3A4FF0C7A430600956A37 /* ColorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMac.h; sourceTree = "<group>"; };
@@ -15325,6 +15331,8 @@
 				A7BF7EDE14C9175A0014489D /* InternalSettings.idl */,
 				A7BE7EDD14C9175A0014489D /* MallocStatistics.h */,
 				A7BE7EDE14C9175A0014489D /* MallocStatistics.idl */,
+				EB081CD81696084400553730 /* TypeConversions.h */,
+				EB081CD91696084400553730 /* TypeConversions.idl */,
 			);
 			path = testing;
 			sourceTree = "<group>";
@@ -15340,6 +15348,8 @@
 				53ED3FDD167A88E7006762E6 /* JSInternalSettingsGenerated.h */,
 				A7B4EA6814C9348400C8F5BF /* JSMallocStatistics.cpp */,
 				A7B4EA6914C9348400C8F5BF /* JSMallocStatistics.h */,
+				EBF5121A1696496C0056BD25 /* JSTypeConversions.cpp */,
+				EBF5121B1696496C0056BD25 /* JSTypeConversions.h */,
 			);
 			name = Testing;
 			sourceTree = "<group>";
@@ -22657,6 +22667,7 @@
 				417DA71E13735DFA007C57FB /* JSInternals.h in Headers */,
 				A740B5A514C935AB00A77FA4 /* JSInternalSettings.h in Headers */,
 				A740B59514C935AB00A77FA4 /* JSMallocStatistics.h in Headers */,
+				EBF5121D1696496C0056BD25 /* JSTypeConversions.h in Headers */,
 				41815C1F138319830057AAA4 /* WebCoreTestSupport.h in Headers */,
 				53ED3FDF167A88E7006762E6 /* JSInternalSettingsGenerated.h in Headers */,
 				53E29E5F167A8A1900586D3D /* InternalSettingsGenerated.h in Headers */,
@@ -26346,6 +26357,7 @@
 				417DA71D13735DFA007C57FB /* JSInternals.cpp in Sources */,
 				A740B5A714C935AF00A77FA4 /* JSInternalSettings.cpp in Sources */,
 				A740B59714C935AF00A77FA4 /* JSMallocStatistics.cpp in Sources */,
+				EBF5121C1696496C0056BD25 /* JSTypeConversions.cpp in Sources */,
 				41815C1E138319830057AAA4 /* WebCoreTestSupport.cpp in Sources */,
 				53ED3FDE167A88E7006762E6 /* JSInternalSettingsGenerated.cpp in Sources */,
 				53E29E5E167A8A1900586D3D /* InternalSettingsGenerated.cpp in Sources */,

Modified: trunk/Source/WebCore/testing/Internals.cpp (138835 => 138836)


--- trunk/Source/WebCore/testing/Internals.cpp	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/testing/Internals.cpp	2013-01-04 20:42:37 UTC (rev 138836)
@@ -83,6 +83,7 @@
 #include "StyleSheetContents.h"
 #include "TextIterator.h"
 #include "TreeScope.h"
+#include "TypeConversions.h"
 #include "ViewportArguments.h"
 #include <wtf/text/StringBuffer.h>
 
@@ -1703,6 +1704,11 @@
     return MallocStatistics::create();
 }
 
+PassRefPtr<TypeConversions> Internals::typeConversions() const
+{
+    return TypeConversions::create();
+}
+
 PassRefPtr<DOMStringList> Internals::getReferencedFilePaths() const
 {
     RefPtr<DOMStringList> stringList = DOMStringList::create();

Modified: trunk/Source/WebCore/testing/Internals.h (138835 => 138836)


--- trunk/Source/WebCore/testing/Internals.h	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/testing/Internals.h	2013-01-04 20:42:37 UTC (rev 138836)
@@ -55,6 +55,7 @@
 class WebKitPoint;
 class MallocStatistics;
 class SerializedScriptValue;
+class TypeConversions;
 
 typedef int ExceptionCode;
 
@@ -256,6 +257,7 @@
     void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(const String& scheme);
 
     PassRefPtr<MallocStatistics> mallocStatistics() const;
+    PassRefPtr<TypeConversions> typeConversions() const;
 
     PassRefPtr<DOMStringList> getReferencedFilePaths() const;
 

Modified: trunk/Source/WebCore/testing/Internals.idl (138835 => 138836)


--- trunk/Source/WebCore/testing/Internals.idl	2013-01-04 20:40:25 UTC (rev 138835)
+++ trunk/Source/WebCore/testing/Internals.idl	2013-01-04 20:42:37 UTC (rev 138836)
@@ -220,6 +220,7 @@
     void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(in DOMString scheme);
 
     MallocStatistics mallocStatistics();
+    TypeConversions typeConversions();
 
     DOMString[] getReferencedFilePaths();
 

Added: trunk/Source/WebCore/testing/TypeConversions.h (0 => 138836)


--- trunk/Source/WebCore/testing/TypeConversions.h	                        (rev 0)
+++ trunk/Source/WebCore/testing/TypeConversions.h	2013-01-04 20:42:37 UTC (rev 138836)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TypeConversions_h
+#define TypeConversions_h
+
+#include <wtf/FastMalloc.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class TypeConversions : public RefCounted<TypeConversions> {
+public:
+    static PassRefPtr<TypeConversions> create() { return adoptRef(new TypeConversions()); }
+
+    long testLong() { return m_testLong; }
+    void setTestLong(long value) { m_testLong = value; }
+    unsigned long testUnsignedLong() { return m_testUnsignedLong; }
+    void setTestUnsignedLong(unsigned long value) { m_testUnsignedLong = value; }
+
+    long long testLongLong() { return m_testLongLong; }
+    void setTestLongLong(long long value) { m_testLongLong = value; }
+    unsigned long long testUnsignedLongLong() { return m_testUnsignedLongLong; }
+    void setTestUnsignedLongLong(unsigned long long value) { m_testUnsignedLongLong = value; }
+
+private:
+    TypeConversions()
+    {
+    }
+
+    long m_testLong;
+    unsigned long m_testUnsignedLong;
+    long long m_testLongLong;
+    unsigned long long m_testUnsignedLongLong;
+};
+
+} // namespace WebCore
+
+#endif

Added: trunk/Source/WebCore/testing/TypeConversions.idl (0 => 138836)


--- trunk/Source/WebCore/testing/TypeConversions.idl	                        (rev 0)
+++ trunk/Source/WebCore/testing/TypeConversions.idl	2013-01-04 20:42:37 UTC (rev 138836)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    OmitConstructor
+] interface TypeConversions {
+    attribute long testLong;
+    attribute unsigned long testUnsignedLong;
+
+    attribute long long testLongLong;
+    attribute unsigned long long testUnsignedLongLong;
+};
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to