<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[200547] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/200547">200547</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-05-07 14:14:20 -0700 (Sat, 07 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Next step on dictionary bindings, along with other bindings refinements
https://bugs.webkit.org/show_bug.cgi?id=157451

Reviewed by Chris Dumez.

Source/WebCore:

Converted one dictionary, the one passed to the constructor in FontFace.

* WebCore.xcodeproj/project.pbxproj: Updated for name change of JSDOMBuild.h to
JSDOMConvert.h and also let Xcode update a file type.

* bindings/js/JSDOMBinding.cpp:
(WebCore::propertyValue): Added.
* bindings/js/JSDOMBinding.h: Use pragma once. Remove unnecessary forward declaration.
Move all declarations to the top of the file, separating them from definitions. This
is a small step toward better overview of what's in this file and paves the way for
future simplifications and improvements we can make after we observe patterns.
Also removed a couple unused functions.

* bindings/js/JSDOMConvert.h: Renamed from JSDOMBuild.h.
Renamed function templates from build to convert. Added convertOptional.

* bindings/js/ReadableStreamController.cpp:
(WebCore::callFunction): Use auto and remove some unneeded namespacing.
(WebCore::ReadableStreamController::invoke): Ditto. Also remove use of helper function
getPropertyFromObject, since this was the only call site and it was not very helpful.
(WebCore::ReadableStreamController::isControlledReadableStreamLocked): Ditto.
(WebCore::createReadableStream): Ditto.
(WebCore::getReadableStreamReader): Ditto.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateEnumerationImplementationContent): Updated for name change from build to
convert and JSDOMBuild.h to JSDOMConvert.h.
(GenerateDictionaryImplementationContent): Ditto. Also added code to handle optional
and added explicit exception checking, using local variables. Not clear longer term
if the local variable approach is OK since this will unnecessarily change types like
const String&amp; to String.
(GenerateParametersCheck): Removed local variable $optional and use $parameter-&gt;isOptional
directly consistently. This is slightly clearer because the old code used a mix of the
two, and also is a better pattern for when we refactor this into smaller functions.
Note that this function name is not good any more--this is a lot more then parameter checks.
(GetNativeType): Return appropriate name for dictionary types.
(JSValueToNative): Updated for name change from build to convert and JSDOMBuild.h to
JSDOMConvert.h.

* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
Regenerated results.

* bindings/scripts/test/TestObj.idl: Added another dictionary test case, just a copy
of the current state of the one in FontFace.idl.

* css/CSSFontFace.cpp:
(WebCore::CSSFontFace::setUnicodeRange): Update for simplified UnicodeRange struct.
(WebCore::CSSFontFace::setFeatureSettings): Fix to correctly handle being called
with &quot;normal&quot;. Also fix so it doesn't call fontPropertyChanged if nothing changed.
Also got rid of return value, which had no real value: it was returning false for
some bad inputs, but others would just lead to assertions, and the real reason this
was OK is that this function is only passed known-valid values.

* css/CSSFontFace.h: Used prama once. Tweaked formatting. Removed return value from
the setFeatureSettings function. Changed UnicodeRange to be struct with public data
members instead a struct with a constructor and getter functions.

* css/CSSFontSelector.cpp:
(WebCore::CSSFontSelector::addFontFaceRule): Updated since setFeatureSettings no
longer has a boolean return value.

* css/CSSSegmentedFontFace.cpp:
(WebCore::appendFontWithInvalidUnicodeRangeIfLoading): Updated for simplified
UnicodeRange struct.

* css/FontFace.cpp:
(WebCore::valueFromDictionary): Deleted.
(WebCore::FontFace::create): Updated to take the descriptors as a struct instead of
a WebCore::Dictionary. Also made that argument optional as specified in the current
specification draft.
(WebCore::FontFace::setFeatureSettings): Updated since setFeatureSettings no longer
has a boolean return value.
(WebCore::FontFace::unicodeRange): Updated for simplified UnicodeRange struct.

* css/FontFace.h: Used pragma once. Removed unneeded includes and forward declarations.
Derived privately from CSSFontFace::Client. Added a FontFace::Descriptors struct and
used it as an argument to the create function as described above.

* css/FontFace.idl: Added FontFaceDescriptors and changed the argument to the
constructor to be an optional FontFaceDescriptors instead of a Dictionary.

Tools:

* Scripts/do-webcore-rename: Use this to rename JSDOMBuild.h to JSDOMConvert.h.
Also skip test expectations in a directory that this was modifying unnecessarily.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingcpp">trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingh">trunk/Source/WebCore/bindings/js/JSDOMBinding.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsReadableStreamControllercpp">trunk/Source/WebCore/bindings/js/ReadableStreamController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestObjidl">trunk/Source/WebCore/bindings/scripts/test/TestObj.idl</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFacecpp">trunk/Source/WebCore/css/CSSFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceh">trunk/Source/WebCore/css/CSSFontFace.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorcpp">trunk/Source/WebCore/css/CSSFontSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSSegmentedFontFacecpp">trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssFontFacecpp">trunk/Source/WebCore/css/FontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssFontFaceh">trunk/Source/WebCore/css/FontFace.h</a></li>
<li><a href="#trunkSourceWebCorecssFontFaceidl">trunk/Source/WebCore/css/FontFace.idl</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsdowebcorerename">trunk/Tools/Scripts/do-webcore-rename</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMConverth">trunk/Source/WebCore/bindings/js/JSDOMConvert.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBuildh">trunk/Source/WebCore/bindings/js/JSDOMBuild.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/ChangeLog        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -1,3 +1,92 @@
</span><ins>+2016-05-07  Darin Adler  &lt;darin@apple.com&gt;
+
+        Next step on dictionary bindings, along with other bindings refinements
+        https://bugs.webkit.org/show_bug.cgi?id=157451
+
+        Reviewed by Chris Dumez.
+
+        Converted one dictionary, the one passed to the constructor in FontFace.
+
+        * WebCore.xcodeproj/project.pbxproj: Updated for name change of JSDOMBuild.h to
+        JSDOMConvert.h and also let Xcode update a file type.
+
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::propertyValue): Added.
+        * bindings/js/JSDOMBinding.h: Use pragma once. Remove unnecessary forward declaration.
+        Move all declarations to the top of the file, separating them from definitions. This
+        is a small step toward better overview of what's in this file and paves the way for
+        future simplifications and improvements we can make after we observe patterns.
+        Also removed a couple unused functions.
+
+        * bindings/js/JSDOMConvert.h: Renamed from JSDOMBuild.h.
+        Renamed function templates from build to convert. Added convertOptional.
+
+        * bindings/js/ReadableStreamController.cpp:
+        (WebCore::callFunction): Use auto and remove some unneeded namespacing.
+        (WebCore::ReadableStreamController::invoke): Ditto. Also remove use of helper function
+        getPropertyFromObject, since this was the only call site and it was not very helpful.
+        (WebCore::ReadableStreamController::isControlledReadableStreamLocked): Ditto.
+        (WebCore::createReadableStream): Ditto.
+        (WebCore::getReadableStreamReader): Ditto.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateEnumerationImplementationContent): Updated for name change from build to
+        convert and JSDOMBuild.h to JSDOMConvert.h.
+        (GenerateDictionaryImplementationContent): Ditto. Also added code to handle optional
+        and added explicit exception checking, using local variables. Not clear longer term
+        if the local variable approach is OK since this will unnecessarily change types like
+        const String&amp; to String.
+        (GenerateParametersCheck): Removed local variable $optional and use $parameter-&gt;isOptional
+        directly consistently. This is slightly clearer because the old code used a mix of the
+        two, and also is a better pattern for when we refactor this into smaller functions.
+        Note that this function name is not good any more--this is a lot more then parameter checks.
+        (GetNativeType): Return appropriate name for dictionary types.
+        (JSValueToNative): Updated for name change from build to convert and JSDOMBuild.h to
+        JSDOMConvert.h.
+
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        Regenerated results.
+
+        * bindings/scripts/test/TestObj.idl: Added another dictionary test case, just a copy
+        of the current state of the one in FontFace.idl.
+
+        * css/CSSFontFace.cpp:
+        (WebCore::CSSFontFace::setUnicodeRange): Update for simplified UnicodeRange struct.
+        (WebCore::CSSFontFace::setFeatureSettings): Fix to correctly handle being called
+        with &quot;normal&quot;. Also fix so it doesn't call fontPropertyChanged if nothing changed.
+        Also got rid of return value, which had no real value: it was returning false for
+        some bad inputs, but others would just lead to assertions, and the real reason this
+        was OK is that this function is only passed known-valid values.
+
+        * css/CSSFontFace.h: Used prama once. Tweaked formatting. Removed return value from
+        the setFeatureSettings function. Changed UnicodeRange to be struct with public data
+        members instead a struct with a constructor and getter functions.
+
+        * css/CSSFontSelector.cpp:
+        (WebCore::CSSFontSelector::addFontFaceRule): Updated since setFeatureSettings no
+        longer has a boolean return value.
+
+        * css/CSSSegmentedFontFace.cpp:
+        (WebCore::appendFontWithInvalidUnicodeRangeIfLoading): Updated for simplified
+        UnicodeRange struct.
+
+        * css/FontFace.cpp:
+        (WebCore::valueFromDictionary): Deleted.
+        (WebCore::FontFace::create): Updated to take the descriptors as a struct instead of
+        a WebCore::Dictionary. Also made that argument optional as specified in the current
+        specification draft.
+        (WebCore::FontFace::setFeatureSettings): Updated since setFeatureSettings no longer
+        has a boolean return value.
+        (WebCore::FontFace::unicodeRange): Updated for simplified UnicodeRange struct.
+
+        * css/FontFace.h: Used pragma once. Removed unneeded includes and forward declarations.
+        Derived privately from CSSFontFace::Client. Added a FontFace::Descriptors struct and
+        used it as an argument to the create function as described above.
+
+        * css/FontFace.idl: Added FontFaceDescriptors and changed the argument to the
+        constructor to be an optional FontFaceDescriptors instead of a Dictionary.
+
</ins><span class="cx"> 2016-05-07  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         Rework FontFace promise attribute handling
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -3515,6 +3515,7 @@
</span><span class="cx">                 9307F1130AF2C8BE00DBA31A /* DOMNodeInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85B498FA0ADB340200925CBB /* DOMNodeInternal.h */; };
</span><span class="cx">                 9307F1D70AF2D59000DBA31A /* HitTestResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9307F1D50AF2D59000DBA31A /* HitTestResult.cpp */; };
</span><span class="cx">                 9307F1D80AF2D59000DBA31A /* HitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 9307F1D60AF2D59000DBA31A /* HitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                930841341CDDB15500B0958C /* JSDOMConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 930841331CDDB15500B0958C /* JSDOMConvert.h */; };
</ins><span class="cx">                 930908910AF7EDE40081DF01 /* HitTestRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 930908900AF7EDE40081DF01 /* HitTestRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 930C90DD19CF965300D6C21A /* InlineIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 930C90DC19CF965300D6C21A /* InlineIterator.cpp */; };
</span><span class="cx">                 93153BDA14181F7A00FCF5BE /* missingImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 93153BD914181F7A00FCF5BE /* missingImage@2x.png */; };
</span><span class="lines">@@ -9666,7 +9667,7 @@
</span><span class="cx">                 51741D0B0B07259A00ED442C /* BackForwardClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51741D0D0B07259A00ED442C /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryItem.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51741D0E0B07259A00ED442C /* HistoryItem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HistoryItem.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                51748FA21CC6EEEB00728D84 /* WorkerGlobalScopeConstructors.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file; path = WorkerGlobalScopeConstructors.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                51748FA21CC6EEEB00728D84 /* WorkerGlobalScopeConstructors.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WorkerGlobalScopeConstructors.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 5174E20810A1F44F00F95E6F /* PopStateEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PopStateEvent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5174E20B10A1F49A00F95E6F /* PopStateEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PopStateEvent.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51771DFC1BDB475600CAE8E4 /* MemoryObjectStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryObjectStore.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -11163,6 +11164,7 @@
</span><span class="cx">                 9307061309E0CA8200B17FE4 /* DerivedSources.make */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; lineEnding = 0; path = DerivedSources.make; sourceTree = &quot;&lt;group&gt;&quot;; usesTabs = 1; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
</span><span class="cx">                 9307F1D50AF2D59000DBA31A /* HitTestResult.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HitTestResult.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9307F1D60AF2D59000DBA31A /* HitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HitTestResult.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                930841331CDDB15500B0958C /* JSDOMConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMConvert.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 930908900AF7EDE40081DF01 /* HitTestRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HitTestRequest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 930C90DC19CF965300D6C21A /* InlineIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InlineIterator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93153BD914181F7A00FCF5BE /* missingImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;missingImage@2x.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -22302,6 +22304,7 @@
</span><span class="cx">                                 93B70D4709EB0C7C009D8468 /* JSDOMBinding.cpp */,
</span><span class="cx">                                 93B70D4809EB0C7C009D8468 /* JSDOMBinding.h */,
</span><span class="cx">                                 413C2C331BC29A7B0075204C /* JSDOMConstructor.h */,
</span><ins>+                                930841331CDDB15500B0958C /* JSDOMConvert.h */,
</ins><span class="cx">                                 E1C36CBC0EB08062007410BC /* JSDOMGlobalObject.cpp */,
</span><span class="cx">                                 E1C36C020EB076D6007410BC /* JSDOMGlobalObject.h */,
</span><span class="cx">                                 7C2BDD3B17C7F98B0038FF15 /* JSDOMGlobalObjectTask.cpp */,
</span><span class="lines">@@ -25480,6 +25483,7 @@
</span><span class="cx">                                 BC80C9880CD294EE00A0B7B3 /* CSSTimingFunctionValue.h in Headers */,
</span><span class="cx">                                 9AB1F38018E2489A00534743 /* CSSToLengthConversionData.h in Headers */,
</span><span class="cx">                                 A882DA231593848D000115ED /* CSSToStyleMap.h in Headers */,
</span><ins>+                                930841341CDDB15500B0958C /* JSDOMConvert.h in Headers */,
</ins><span class="cx">                                 371F53E90D2704F900ECE0D5 /* CSSUnicodeRangeValue.h in Headers */,
</span><span class="cx">                                 DD7CDF250A23CF9800069928 /* CSSUnknownRule.h in Headers */,
</span><span class="cx">                                 BC7D8FF01BD03B6400FFE540 /* CSSUnsetValue.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;HTMLParserIdioms.h&quot;
</span><span class="cx"> #include &quot;IDBDatabaseException.h&quot;
</span><ins>+#include &quot;JSDOMConvert.h&quot;
</ins><span class="cx"> #include &quot;JSDOMWindowCustom.h&quot;
</span><span class="cx"> #include &quot;JSExceptionBase.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><span class="lines">@@ -839,4 +840,9 @@
</span><span class="cx">     return CallType::Host;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+JSValue propertyValue(ExecState&amp; state, JSValue value, const char* propertyName)
+{
+    return value.get(&amp;state, Identifier::fromString(&amp;state, propertyName));
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -21,8 +21,7 @@
</span><span class="cx">  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef JSDOMBinding_h
-#define JSDOMBinding_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMGlobalObject.h&quot;
</span><span class="cx"> #include &quot;JSDOMWrapper.h&quot;
</span><span class="lines">@@ -55,7 +54,6 @@
</span><span class="cx"> // and function definitions below, even for template and inline functions.
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><del>-class HashEntry;
</del><span class="cx"> class JSFunction;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -69,6 +67,9 @@
</span><span class="cx"> class Node;
</span><span class="cx"> 
</span><span class="cx"> struct ExceptionCodeWithMessage;
</span><ins>+
+typedef int ExceptionCode;
+
</ins><span class="cx"> struct ExceptionDetails {
</span><span class="cx">     String message;
</span><span class="cx">     int lineNumber { 0 };
</span><span class="lines">@@ -76,8 +77,35 @@
</span><span class="cx">     String sourceURL;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-typedef int ExceptionCode;
</del><ins>+// Base class for all constructor objects in the JSC bindings.
+class DOMConstructorObject : public JSDOMObject {
+public:
+    typedef JSDOMObject Base;
+    static const unsigned StructureFlags = Base::StructureFlags | JSC::ImplementsHasInstance | JSC::ImplementsDefaultHasInstance | JSC::TypeOfShouldCallGetCallData;
+    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject*, JSC::JSValue);
</ins><span class="cx"> 
</span><ins>+protected:
+    DOMConstructorObject(JSC::Structure*, JSDOMGlobalObject&amp;);
+
+    static String className(const JSObject*);
+    static JSC::CallType getCallData(JSCell*, JSC::CallData&amp;);
+};
+
+class DOMConstructorJSBuiltinObject : public DOMConstructorObject {
+public:
+    typedef DOMConstructorObject Base;
+
+protected:
+    DOMConstructorJSBuiltinObject(JSC::Structure*, JSDOMGlobalObject&amp;);
+    static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;);
+
+    JSC::JSFunction* initializeFunction();
+    void setInitializeFunction(JSC::VM&amp;, JSC::JSFunction&amp;);
+
+private:
+    JSC::WriteBarrier&lt;JSC::JSFunction&gt; m_initializeFunction;
+};
+
</ins><span class="cx"> DOMWindow&amp; callerDOMWindow(JSC::ExecState*);
</span><span class="cx"> DOMWindow&amp; activeDOMWindow(JSC::ExecState*);
</span><span class="cx"> DOMWindow&amp; firstDOMWindow(JSC::ExecState*);
</span><span class="lines">@@ -100,47 +128,210 @@
</span><span class="cx"> WEBCORE_EXPORT JSC::EncodedJSValue throwGetterTypeError(JSC::ExecState&amp;, const char* interfaceName, const char* attributeName);
</span><span class="cx"> WEBCORE_EXPORT JSC::EncodedJSValue throwThisTypeError(JSC::ExecState&amp;, const char* interfaceName, const char* functionName);
</span><span class="cx"> 
</span><del>-// Base class for all constructor objects in the JSC bindings.
-class DOMConstructorObject : public JSDOMObject {
-public:
-    typedef JSDOMObject Base;
-    static const unsigned StructureFlags = Base::StructureFlags | JSC::ImplementsHasInstance | JSC::ImplementsDefaultHasInstance | JSC::TypeOfShouldCallGetCallData;
</del><ins>+WEBCORE_EXPORT JSC::Structure* getCachedDOMStructure(JSDOMGlobalObject&amp;, const JSC::ClassInfo*);
+WEBCORE_EXPORT JSC::Structure* cacheDOMStructure(JSDOMGlobalObject&amp;, JSC::Structure*, const JSC::ClassInfo*);
</ins><span class="cx"> 
</span><del>-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
</del><ins>+template&lt;typename WrapperClass&gt; JSC::Structure* getDOMStructure(JSC::VM&amp;, JSDOMGlobalObject&amp;);
+template&lt;typename WrapperClass&gt; JSC::Structure* deprecatedGetDOMStructure(JSC::ExecState*);
+template&lt;typename WrapperClass&gt; JSC::JSObject* getDOMPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</ins><span class="cx"> 
</span><del>-protected:
-    DOMConstructorObject(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-        : JSDOMObject(structure, globalObject)
-    {
-    }
</del><ins>+void callFunctionWithCurrentArguments(JSC::ExecState&amp;, JSC::JSObject&amp; thisObject, JSC::JSFunction&amp;);
</ins><span class="cx"> 
</span><del>-    static String className(const JSObject*) { return ASCIILiteral(&quot;Function&quot;); }
-    static JSC::CallType getCallData(JSCell*, JSC::CallData&amp;);
-};
</del><ins>+template&lt;typename JSClass&gt; JSC::EncodedJSValue createJSBuiltin(JSC::ExecState&amp;, JSC::JSFunction&amp; initializeFunction, JSDOMGlobalObject&amp;);
</ins><span class="cx"> 
</span><del>-class DOMConstructorJSBuiltinObject : public DOMConstructorObject {
-public:
-    typedef DOMConstructorObject Base;
</del><ins>+JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&amp;, JSC::ArrayBuffer*);
+void* wrapperKey(JSC::ArrayBuffer*);
</ins><span class="cx"> 
</span><del>-protected:
-    DOMConstructorJSBuiltinObject(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-        : DOMConstructorObject(structure, globalObject) { }
</del><ins>+JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld&amp;, void*);
+JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld&amp;, ScriptWrappable*);
+JSC::JSArrayBuffer* getInlineCachedWrapper(DOMWrapperWorld&amp;, JSC::ArrayBuffer*);
</ins><span class="cx"> 
</span><del>-    static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;);
</del><ins>+bool setInlineCachedWrapper(DOMWrapperWorld&amp;, void*, JSDOMObject*, JSC::WeakHandleOwner*);
+bool setInlineCachedWrapper(DOMWrapperWorld&amp;, ScriptWrappable*, JSDOMObject* wrapper, JSC::WeakHandleOwner* wrapperOwner);
+bool setInlineCachedWrapper(DOMWrapperWorld&amp;, JSC::ArrayBuffer*, JSC::JSArrayBuffer* wrapper, JSC::WeakHandleOwner* wrapperOwner);
</ins><span class="cx"> 
</span><del>-    JSC::JSFunction* initializeFunction() { return m_initializeFunction.get(); }
-    void setInitializeFunction(JSC::VM&amp; vm, JSC::JSFunction&amp; function) { m_initializeFunction.set(vm, this, &amp;function); }
</del><ins>+bool clearInlineCachedWrapper(DOMWrapperWorld&amp;, void*, JSDOMObject*);
+bool clearInlineCachedWrapper(DOMWrapperWorld&amp;, ScriptWrappable*, JSDOMObject* wrapper);
+bool clearInlineCachedWrapper(DOMWrapperWorld&amp;, JSC::ArrayBuffer*, JSC::JSArrayBuffer* wrapper);
</ins><span class="cx"> 
</span><del>-private:
-    JSC::WriteBarrier&lt;JSC::JSFunction&gt; m_initializeFunction;
</del><ins>+#define CREATE_DOM_WRAPPER(globalObject, className, object) createWrapper&lt;JS##className&gt;(globalObject, static_cast&lt;className*&gt;(object))
+
+template&lt;typename DOMClass&gt; JSC::JSObject* getCachedWrapper(DOMWrapperWorld&amp;, DOMClass*);
+template&lt;typename DOMClass, typename WrapperClass&gt; void cacheWrapper(DOMWrapperWorld&amp;, DOMClass*, WrapperClass*);
+template&lt;typename DOMClass, typename WrapperClass&gt; void uncacheWrapper(DOMWrapperWorld&amp;, DOMClass*, WrapperClass*);
+
+template&lt;typename WrapperClass, typename DOMClass&gt; JSDOMObject* createWrapper(JSDOMGlobalObject*, DOMClass*);
+template&lt;typename WrapperClass, typename DOMClass&gt; JSC::JSValue wrap(JSDOMGlobalObject*, DOMClass&amp;);
+template&lt;typename WrapperClass, typename DOMClass&gt; JSC::JSValue getExistingWrapper(JSDOMGlobalObject*, DOMClass*);
+template&lt;typename WrapperClass, typename DOMClass&gt; JSC::JSValue createNewWrapper(JSDOMGlobalObject*, DOMClass*);
+
+void addImpureProperty(const AtomicString&amp;);
+
+const JSC::HashTable&amp; getHashTableForGlobalData(JSC::VM&amp;, const JSC::HashTable&amp; staticTable);
+
+WEBCORE_EXPORT void reportException(JSC::ExecState*, JSC::JSValue exception, CachedScript* = nullptr);
+WEBCORE_EXPORT void reportException(JSC::ExecState*, JSC::Exception*, CachedScript* = nullptr, ExceptionDetails* = nullptr);
+void reportCurrentException(JSC::ExecState*);
+
+JSC::JSValue createDOMException(JSC::ExecState*, ExceptionCode);
+
+// Convert a DOM implementation exception code into a JavaScript exception in the execution state.
+WEBCORE_EXPORT void setDOMException(JSC::ExecState*, ExceptionCode);
+void setDOMException(JSC::ExecState*, const ExceptionCodeWithMessage&amp;);
+
+JSC::JSValue jsString(JSC::ExecState*, const URL&amp;); // empty if the URL is null
+
+JSC::JSValue jsStringOrNull(JSC::ExecState*, const String&amp;); // null if the string is null
+JSC::JSValue jsStringOrNull(JSC::ExecState*, const URL&amp;); // null if the URL is null
+
+JSC::JSValue jsStringOrUndefined(JSC::ExecState*, const String&amp;); // undefined if the string is null
+JSC::JSValue jsStringOrUndefined(JSC::ExecState*, const URL&amp;); // undefined if the URL is null
+
+// See JavaScriptCore for explanation: Should be used for any string that is already owned by another
+// object, to let the engine know that collecting the JSString wrapper is unlikely to save memory.
+JSC::JSValue jsOwnedStringOrNull(JSC::ExecState*, const String&amp;);
+
+String propertyNameToString(JSC::PropertyName);
+
+AtomicString propertyNameToAtomicString(JSC::PropertyName);
+
+// FIXME: This is only used by legacy code and should go away. Use valueToStringTreatingNullAsEmptyString() instead.
+String valueToStringWithNullCheck(JSC::ExecState*, JSC::JSValue); // null if the value is null
+
+String valueToStringTreatingNullAsEmptyString(JSC::ExecState*, JSC::JSValue);
+String valueToStringWithUndefinedOrNullCheck(JSC::ExecState*, JSC::JSValue); // null if the value is null or undefined
+
+template&lt;typename T&gt; JSC::JSValue toNullableJSNumber(Optional&lt;T&gt;); // null if the optional is null
+
+int32_t finiteInt32Value(JSC::JSValue, JSC::ExecState*, bool&amp; okay);
+
+// The following functions convert values to integers as per the WebIDL specification.
+// The conversion fails if the value cannot be converted to a number or, if EnforceRange is specified,
+// the value is outside the range of the destination integer type.
+
+enum IntegerConversionConfiguration { NormalConversion, EnforceRange, Clamp };
+
+WEBCORE_EXPORT int32_t toInt32EnforceRange(JSC::ExecState*, JSC::JSValue);
+WEBCORE_EXPORT uint32_t toUInt32EnforceRange(JSC::ExecState*, JSC::JSValue);
+
+WEBCORE_EXPORT int32_t toInt32Clamp(JSC::ExecState*, JSC::JSValue);
+WEBCORE_EXPORT uint32_t toUInt32Clamp(JSC::ExecState*, JSC::JSValue);
+
+WEBCORE_EXPORT int8_t toInt8(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+WEBCORE_EXPORT uint8_t toUInt8(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+
+WEBCORE_EXPORT int16_t toInt16(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+WEBCORE_EXPORT uint16_t toUInt16(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+
+int32_t toInt32(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+uint32_t toUInt32(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+
+WEBCORE_EXPORT int64_t toInt64(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+WEBCORE_EXPORT uint64_t toUInt64(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
+
+// Returns a Date instance for the specified value, or NaN if the date is not a number.
+JSC::JSValue jsDateOrNaN(JSC::ExecState*, double);
+
+// Returns a Date instance for the specified value, or null if the value is NaN or infinity.
+JSC::JSValue jsDateOrNull(JSC::ExecState*, double);
+
+// NaN if the value can't be converted to a date.
+double valueToDate(JSC::ExecState*, JSC::JSValue);
+
+// Validates that the passed object is a sequence type per section 4.1.13 of the WebIDL spec.
+JSC::JSObject* toJSSequence(JSC::ExecState*, JSC::JSValue, unsigned&amp; length);
+
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, JSC::ArrayBuffer*);
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, JSC::ArrayBufferView*);
+JSC::JSValue toJS(JSC::ExecState*, JSC::JSGlobalObject*, JSC::ArrayBufferView*);
+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr&lt;T&gt;);
+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr&lt;T&gt;);
+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T&gt;&amp;);
+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;RefPtr&lt;T&gt;&gt;&amp;);
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const String&amp;);
+
+JSC::JSValue toJSIterator(JSC::ExecState&amp;, JSDOMGlobalObject&amp;, JSC::JSValue);
+template&lt;typename T&gt; JSC::JSValue toJSIterator(JSC::ExecState&amp;, JSDOMGlobalObject&amp;, const T&amp;);
+
+JSC::JSValue toJSIteratorEnd(JSC::ExecState&amp;);
+
+template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T, inlineCapacity&gt;&amp;);
+template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T, inlineCapacity&gt;*);
+WEBCORE_EXPORT JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr&lt;DOMStringList&gt;);
+
+template&lt;typename Value1, typename Value2&gt; JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, const Value1&amp;, const Value2&amp;);
+
+RefPtr&lt;JSC::ArrayBufferView&gt; toArrayBufferView(JSC::JSValue);
+RefPtr&lt;JSC::Int8Array&gt; toInt8Array(JSC::JSValue);
+RefPtr&lt;JSC::Int16Array&gt; toInt16Array(JSC::JSValue);
+RefPtr&lt;JSC::Int32Array&gt; toInt32Array(JSC::JSValue);
+RefPtr&lt;JSC::Uint8Array&gt; toUint8Array(JSC::JSValue);
+RefPtr&lt;JSC::Uint8ClampedArray&gt; toUint8ClampedArray(JSC::JSValue);
+RefPtr&lt;JSC::Uint16Array&gt; toUint16Array(JSC::JSValue);
+RefPtr&lt;JSC::Uint32Array&gt; toUint32Array(JSC::JSValue);
+RefPtr&lt;JSC::Float32Array&gt; toFloat32Array(JSC::JSValue);
+RefPtr&lt;JSC::Float64Array&gt; toFloat64Array(JSC::JSValue);
+
+template&lt;typename T, typename JSType&gt; Vector&lt;RefPtr&lt;T&gt;&gt; toRefPtrNativeArray(JSC::ExecState*, JSC::JSValue, T* (*)(JSC::JSValue));
+template&lt;typename T&gt; Vector&lt;T&gt; toNativeArray(JSC::ExecState*, JSC::JSValue);
+template&lt;typename T&gt; Vector&lt;T&gt; toNativeArguments(JSC::ExecState*, size_t startIndex = 0);
+
+bool shouldAllowAccessToNode(JSC::ExecState*, Node*);
+bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*);
+bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*, String&amp; message);
+bool shouldAllowAccessToDOMWindow(JSC::ExecState*, DOMWindow&amp;, String&amp; message);
+
+enum SecurityReportingOption { DoNotReportSecurityError, ReportSecurityError };
+
+class BindingSecurity {
+public:
+    static bool shouldAllowAccessToNode(JSC::ExecState*, Node*);
+    static bool shouldAllowAccessToDOMWindow(JSC::ExecState*, DOMWindow&amp;, SecurityReportingOption = ReportSecurityError);
+    static bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*, SecurityReportingOption = ReportSecurityError);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-WEBCORE_EXPORT JSC::Structure* getCachedDOMStructure(JSDOMGlobalObject&amp;, const JSC::ClassInfo*);
-WEBCORE_EXPORT JSC::Structure* cacheDOMStructure(JSDOMGlobalObject&amp;, JSC::Structure*, const JSC::ClassInfo*);
</del><ins>+void printErrorMessageForFrame(Frame*, const String&amp; message);
</ins><span class="cx"> 
</span><ins>+String propertyNameToString(JSC::PropertyName);
+AtomicString propertyNameToAtomicString(JSC::PropertyName);
+
+template&lt;typename DOMClass&gt; const JSC::HashTableValue* getStaticValueSlotEntryWithoutCaching(JSC::ExecState*, JSC::PropertyName);
+template&lt;JSC::NativeFunction, int length&gt; JSC::EncodedJSValue nonCachingStaticFunctionGetter(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+
+JSC::JSValue propertyValue(JSC::ExecState&amp;, JSC::JSValue, const char* propertyName);
+
+// Inline functions and template definitions.
+
+inline JSC::Structure* DOMConstructorObject::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+{
+    return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+}
+
+inline DOMConstructorObject::DOMConstructorObject(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
+    : JSDOMObject(structure, globalObject)
+{
+}
+
+inline String DOMConstructorObject::className(const JSObject*)
+{
+    return ASCIILiteral(&quot;Function&quot;);
+}
+
+inline DOMConstructorJSBuiltinObject::DOMConstructorJSBuiltinObject(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
+    : DOMConstructorObject(structure, globalObject)
+{
+}
+
+inline JSC::JSFunction* DOMConstructorJSBuiltinObject::initializeFunction()
+{
+    return m_initializeFunction.get();
+}
+
+inline void DOMConstructorJSBuiltinObject::setInitializeFunction(JSC::VM&amp; vm, JSC::JSFunction&amp; function)
+{
+    m_initializeFunction.set(vm, this, &amp;function);
+}
+
</ins><span class="cx"> inline JSDOMGlobalObject* deprecatedGlobalObjectForPrototype(JSC::ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     // FIXME: Callers to this function should be using the global object
</span><span class="lines">@@ -167,8 +358,6 @@
</span><span class="cx">     return JSC::jsCast&lt;JSC::JSObject*&gt;(asObject(getDOMStructure&lt;WrapperClass&gt;(vm, *JSC::jsCast&lt;JSDOMGlobalObject*&gt;(globalObject))-&gt;storedPrototype()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void callFunctionWithCurrentArguments(JSC::ExecState&amp;, JSC::JSObject&amp; thisObject, JSC::JSFunction&amp;);
-
</del><span class="cx"> template&lt;typename JSClass&gt; inline JSC::EncodedJSValue createJSBuiltin(JSC::ExecState&amp; state, JSC::JSFunction&amp; initializeFunction, JSDOMGlobalObject&amp; globalObject)
</span><span class="cx"> {
</span><span class="cx">     JSC::JSObject* object = JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject.vm(), globalObject), &amp;globalObject);
</span><span class="lines">@@ -258,7 +447,6 @@
</span><span class="cx">     weakRemove(world.m_wrappers, wrapperKey(domObject), wrapper);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#define CREATE_DOM_WRAPPER(globalObject, className, object) createWrapper&lt;JS##className&gt;(globalObject, static_cast&lt;className*&gt;(object))
</del><span class="cx"> template&lt;typename WrapperClass, typename DOMClass&gt; inline JSDOMObject* createWrapper(JSDOMGlobalObject* globalObject, DOMClass* node)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(node);
</span><span class="lines">@@ -288,44 +476,6 @@
</span><span class="cx">     return createWrapper&lt;WrapperClass&gt;(globalObject, domObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void addImpureProperty(const AtomicString&amp;);
-
-const JSC::HashTable&amp; getHashTableForGlobalData(JSC::VM&amp;, const JSC::HashTable&amp; staticTable);
-
-WEBCORE_EXPORT void reportException(JSC::ExecState*, JSC::JSValue exception, CachedScript* = nullptr);
-WEBCORE_EXPORT void reportException(JSC::ExecState*, JSC::Exception*, CachedScript* = nullptr, ExceptionDetails* = nullptr);
-void reportCurrentException(JSC::ExecState*);
-
-JSC::JSValue createDOMException(JSC::ExecState*, ExceptionCode);
-
-// Convert a DOM implementation exception code into a JavaScript exception in the execution state.
-WEBCORE_EXPORT void setDOMException(JSC::ExecState*, ExceptionCode);
-void setDOMException(JSC::ExecState*, const ExceptionCodeWithMessage&amp;);
-
-JSC::JSValue jsString(JSC::ExecState*, const URL&amp;); // empty if the URL is null
-
-JSC::JSValue jsStringOrNull(JSC::ExecState*, const String&amp;); // null if the string is null
-JSC::JSValue jsStringOrNull(JSC::ExecState*, const URL&amp;); // null if the URL is null
-
-JSC::JSValue jsStringOrUndefined(JSC::ExecState*, const String&amp;); // undefined if the string is null
-JSC::JSValue jsStringOrUndefined(JSC::ExecState*, const URL&amp;); // undefined if the URL is null
-
-// See JavaScriptCore for explanation: Should be used for any string that is already owned by another
-// object, to let the engine know that collecting the JSString wrapper is unlikely to save memory.
-JSC::JSValue jsOwnedStringOrNull(JSC::ExecState*, const String&amp;);
-
-String propertyNameToString(JSC::PropertyName);
-
-AtomicString propertyNameToAtomicString(JSC::PropertyName);
-
-// FIXME: This is only used by legacy code and should go away. Use valueToStringTreatingNullAsEmptyString() instead.
-String valueToStringWithNullCheck(JSC::ExecState*, JSC::JSValue); // null if the value is null
-
-String valueToStringTreatingNullAsEmptyString(JSC::ExecState*, JSC::JSValue);
-String valueToStringWithUndefinedOrNullCheck(JSC::ExecState*, JSC::JSValue); // null if the value is null or undefined
-
-template&lt;typename T&gt; JSC::JSValue toNullableJSNumber(Optional&lt;T&gt;); // null if the optional is null
-
</del><span class="cx"> inline int32_t finiteInt32Value(JSC::JSValue value, JSC::ExecState* exec, bool&amp; okay)
</span><span class="cx"> {
</span><span class="cx">     double number = value.toNumber(exec);
</span><span class="lines">@@ -333,24 +483,6 @@
</span><span class="cx">     return JSC::toInt32(number);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-enum IntegerConversionConfiguration {
-    NormalConversion,
-    EnforceRange,
-    Clamp
-};
-
-WEBCORE_EXPORT int32_t toInt32EnforceRange(JSC::ExecState*, JSC::JSValue);
-WEBCORE_EXPORT uint32_t toUInt32EnforceRange(JSC::ExecState*, JSC::JSValue);
-
-WEBCORE_EXPORT int32_t toInt32Clamp(JSC::ExecState*, JSC::JSValue);
-WEBCORE_EXPORT uint32_t toUInt32Clamp(JSC::ExecState*, JSC::JSValue);
-
-WEBCORE_EXPORT int8_t toInt8(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-WEBCORE_EXPORT uint8_t toUInt8(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-
-WEBCORE_EXPORT int16_t toInt16(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-WEBCORE_EXPORT uint16_t toUInt16(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-
</del><span class="cx"> /*
</span><span class="cx">     Convert a value to an integer as per &lt;http://www.w3.org/TR/WebIDL/&gt;.
</span><span class="cx">     The conversion fails if the value cannot be converted to a number or,
</span><span class="lines">@@ -383,18 +515,6 @@
</span><span class="cx">     return value.toUInt32(exec);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WEBCORE_EXPORT int64_t toInt64(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-WEBCORE_EXPORT uint64_t toUInt64(JSC::ExecState*, JSC::JSValue, IntegerConversionConfiguration);
-
-// Returns a Date instance for the specified value, or NaN if the date is not a number.
-JSC::JSValue jsDateOrNaN(JSC::ExecState*, double);
-
-// Returns a Date instance for the specified value, or null if the value is NaN or infinity.
-JSC::JSValue jsDateOrNull(JSC::ExecState*, double);
-
-// NaN if the value can't be converted to a date.
-double valueToDate(JSC::ExecState*, JSC::JSValue);
-
</del><span class="cx"> // Validates that the passed object is a sequence type per section 4.1.13 of the WebIDL spec.
</span><span class="cx"> inline JSC::JSObject* toJSSequence(JSC::ExecState* exec, JSC::JSValue value, unsigned&amp; length)
</span><span class="cx"> {
</span><span class="lines">@@ -550,8 +670,6 @@
</span><span class="cx">     return constructArray(&amp;state, 0, globalObject, args);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WEBCORE_EXPORT JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr&lt;DOMStringList&gt;);
-
</del><span class="cx"> inline RefPtr&lt;JSC::ArrayBufferView&gt; toArrayBufferView(JSC::JSValue value)
</span><span class="cx"> {
</span><span class="cx">     auto* wrapper = JSC::jsDynamicCast&lt;JSC::JSArrayBufferView*&gt;(value);
</span><span class="lines">@@ -575,7 +693,7 @@
</span><span class="cx"> template&lt;&gt; struct NativeValueTraits&lt;String&gt; {
</span><span class="cx">     static inline bool nativeValue(JSC::ExecState* exec, JSC::JSValue jsValue, String&amp; indexedValue)
</span><span class="cx">     {
</span><del>-        indexedValue = jsValue.toString(exec)-&gt;value(exec);
</del><ins>+        indexedValue = jsValue.toWTFString(exec);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="lines">@@ -657,7 +775,7 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; Vector&lt;T&gt; toNativeArguments(JSC::ExecState* exec, size_t startIndex = 0)
</del><ins>+template&lt;typename T&gt; Vector&lt;T&gt; toNativeArguments(JSC::ExecState* exec, size_t startIndex)
</ins><span class="cx"> {
</span><span class="cx">     size_t length = exec-&gt;argumentCount();
</span><span class="cx">     ASSERT(startIndex &lt;= length);
</span><span class="lines">@@ -675,13 +793,6 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool shouldAllowAccessToNode(JSC::ExecState*, Node*);
-bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*);
-bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*, String&amp; message);
-bool shouldAllowAccessToDOMWindow(JSC::ExecState*, DOMWindow&amp;, String&amp; message);
-
-void printErrorMessageForFrame(Frame*, const String&amp; message);
-
</del><span class="cx"> inline String propertyNameToString(JSC::PropertyName propertyName)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!propertyName.isSymbol());
</span><span class="lines">@@ -707,40 +818,14 @@
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;JSC::NativeFunction nativeFunction, int length&gt;
-JSC::EncodedJSValue nonCachingStaticFunctionGetter(JSC::ExecState* exec, JSC::EncodedJSValue, JSC::PropertyName propertyName)
</del><ins>+template&lt;JSC::NativeFunction nativeFunction, int length&gt; JSC::EncodedJSValue nonCachingStaticFunctionGetter(JSC::ExecState* exec, JSC::EncodedJSValue, JSC::PropertyName propertyName)
</ins><span class="cx"> {
</span><span class="cx">     return JSC::JSValue::encode(JSC::JSFunction::create(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), length, propertyName.publicName(), nativeFunction));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-enum SecurityReportingOption {
-    DoNotReportSecurityError,
-    ReportSecurityError,
-};
-
-class BindingSecurity {
-public:
-    static bool shouldAllowAccessToNode(JSC::ExecState*, Node*);
-    static bool shouldAllowAccessToDOMWindow(JSC::ExecState*, DOMWindow&amp;, SecurityReportingOption = ReportSecurityError);
-    static bool shouldAllowAccessToFrame(JSC::ExecState*, Frame*, SecurityReportingOption = ReportSecurityError);
-};
-
-inline JSC::JSValue getPropertyFromObject(JSC::ExecState&amp; exec, JSC::JSObject&amp; object, const char* identifier)
-{
-    return object.get(&amp;exec, JSC::Identifier::fromString(&amp;exec, identifier));
-}
-
-inline void setPropertyToObject(JSC::ExecState&amp; exec, JSC::JSObject&amp; object, const char* name, JSC::JSValue value)
-{
-    JSC::PutPropertySlot propertySlot(&amp;object);
-    JSC::JSObject::put(&amp;object, &amp;exec, JSC::Identifier::fromString(&amp;exec, name), value, propertySlot);
-}
-
</del><span class="cx"> template&lt;typename T&gt; inline JSC::JSValue toNullableJSNumber(Optional&lt;T&gt; optionalNumber)
</span><span class="cx"> {
</span><span class="cx">     return optionalNumber ? JSC::jsNumber(optionalNumber.value()) : JSC::jsNull();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // JSDOMBinding_h
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBuildh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/js/JSDOMBuild.h (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBuild.h        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/js/JSDOMBuild.h        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -1,52 +0,0 @@
</span><del>-/*
-
-Copyright (C) 2016 Apple 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 INC. 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 INC. 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.
-
-*/
-
-#pragma once
-
-#include &quot;JSDOMBinding.h&quot;
-
-namespace WebCore {
-
-template&lt;typename T&gt; T build(JSC::ExecState&amp;, JSC::JSValue);
-template&lt;typename T, unsigned characterCount&gt; T build(JSC::ExecState&amp;, JSC::JSValue, const char (&amp;propertyName)[characterCount]);
-enum class ShouldAllowNonFinite { No, Yes };
-template&lt;typename T&gt; T build(JSC::ExecState&amp;, JSC::JSValue, ShouldAllowNonFinite);
-
-template&lt;typename T, unsigned characterCount&gt; inline T build(JSC::ExecState&amp; state, JSC::JSValue value, const char (&amp;propertyName)[characterCount])
-{
-    return build&lt;T&gt;(state, value.get(&amp;state, JSC::Identifier::fromString(&amp;state, propertyName)));
-}
-
-template&lt;typename T&gt; inline T build(JSC::ExecState&amp; state, JSC::JSValue value, ShouldAllowNonFinite allowNonFinite)
-{
-    static_assert(std::is_same&lt;T, float&gt;::value || std::is_same&lt;T, double&gt;::value, &quot;Should be called with converting to float or double&quot;);
-    double number = value.toNumber(&amp;state);
-    if (allowNonFinite == ShouldAllowNonFinite::No &amp;&amp; UNLIKELY(!std::isfinite(number)))
-        throwNonFiniteTypeError(state);
-    return static_cast&lt;T&gt;(number);
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConverthfromrev200546trunkSourceWebCorebindingsjsJSDOMBuildh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/bindings/js/JSDOMConvert.h (from rev 200546, trunk/Source/WebCore/bindings/js/JSDOMBuild.h) (0 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConvert.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/js/JSDOMConvert.h        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+/*
+
+Copyright (C) 2016 Apple 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 INC. 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 INC. 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.
+
+*/
+
+#pragma once
+
+#include &quot;JSDOMBinding.h&quot;
+
+namespace WebCore {
+
+enum class ShouldAllowNonFinite { No, Yes };
+
+template&lt;typename T&gt; T convert(JSC::ExecState&amp;, JSC::JSValue);
+template&lt;typename T&gt; T convert(JSC::ExecState&amp;, JSC::JSValue, ShouldAllowNonFinite);
+
+template&lt;typename T&gt; Optional&lt;T&gt; convertOptional(JSC::ExecState&amp;, JSC::JSValue);
+template&lt;typename T, typename U&gt; T convertOptional(JSC::ExecState&amp;, JSC::JSValue, U&amp;&amp; defaultValue);
+
+template&lt;typename T&gt; Optional&lt;T&gt; inline convertOptional(JSC::ExecState&amp; state, JSC::JSValue value)
+{
+    return value.isUndefined() ? Nullopt : convert&lt;T&gt;(state, value);
+}
+
+template&lt;typename T, typename U&gt; inline T convertOptional(JSC::ExecState&amp; state, JSC::JSValue value, U&amp;&amp; defaultValue)
+{
+    return value.isUndefined() ? std::forward&lt;U&gt;(defaultValue) : convert&lt;T&gt;(state, value);
+}
+
+template&lt;&gt; inline String convert&lt;String&gt;(JSC::ExecState&amp; state, JSC::JSValue value)
+{
+    return value.toWTFString(&amp;state);
+}
+
+template&lt;typename T&gt; inline T convert(JSC::ExecState&amp; state, JSC::JSValue value, ShouldAllowNonFinite allowNonFinite)
+{
+    static_assert(std::is_same&lt;T, float&gt;::value || std::is_same&lt;T, double&gt;::value, &quot;Should be called with converting to float or double&quot;);
+    double number = value.toNumber(&amp;state);
+    if (allowNonFinite == ShouldAllowNonFinite::No &amp;&amp; UNLIKELY(!std::isfinite(number)))
+        throwNonFiniteTypeError(state);
+    return static_cast&lt;T&gt;(number);
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsjsReadableStreamControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ReadableStreamController.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ReadableStreamController.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/js/ReadableStreamController.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -41,15 +41,15 @@
</span><span class="cx"> static inline JSC::JSValue callFunction(JSC::ExecState&amp; state, JSC::JSValue jsFunction, JSC::JSValue thisValue, const JSC::ArgList&amp; arguments)
</span><span class="cx"> {
</span><span class="cx">     JSC::CallData callData;
</span><del>-    JSC::CallType callType = JSC::getCallData(jsFunction, callData);
-    return JSC::call(&amp;state, jsFunction, callType, callData, thisValue, arguments);
</del><ins>+    auto callType = JSC::getCallData(jsFunction, callData);
+    return call(&amp;state, jsFunction, callType, callData, thisValue, arguments);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSC::JSValue ReadableStreamController::invoke(JSC::ExecState&amp; state, JSC::JSObject&amp; object, const char* propertyName, JSC::JSValue parameter)
</span><span class="cx"> {
</span><span class="cx">     JSC::JSLockHolder lock(&amp;state);
</span><span class="cx"> 
</span><del>-    JSC::JSValue function = getPropertyFromObject(state, object, propertyName);
</del><ins>+    auto function = object.get(&amp;state, JSC::Identifier::fromString(&amp;state, propertyName));
</ins><span class="cx">     if (state.hadException())
</span><span class="cx">         return JSC::jsUndefined();
</span><span class="cx"> 
</span><span class="lines">@@ -67,18 +67,18 @@
</span><span class="cx"> 
</span><span class="cx"> bool ReadableStreamController::isControlledReadableStreamLocked() const
</span><span class="cx"> {
</span><del>-    JSC::ExecState&amp; state = *globalObject()-&gt;globalExec();
</del><ins>+    auto&amp; state = *globalObject()-&gt;globalExec();
</ins><span class="cx">     JSC::JSLockHolder lock(&amp;state);
</span><span class="cx"> 
</span><del>-    JSVMClientData&amp; clientData = *static_cast&lt;JSVMClientData*&gt;(state.vm().clientData);
-    JSC::JSValue readableStream = m_jsController-&gt;get(&amp;state, clientData.builtinNames().controlledReadableStreamPrivateName());
</del><ins>+    auto&amp; clientData = *static_cast&lt;JSVMClientData*&gt;(state.vm().clientData);
+    auto readableStream = m_jsController-&gt;get(&amp;state, clientData.builtinNames().controlledReadableStreamPrivateName());
</ins><span class="cx">     ASSERT(!state.hadException());
</span><span class="cx"> 
</span><del>-    JSC::JSValue isLocked = globalObject()-&gt;builtinInternalFunctions().readableStreamInternals().m_isReadableStreamLockedFunction.get();
</del><ins>+    auto isLocked = globalObject()-&gt;builtinInternalFunctions().readableStreamInternals().m_isReadableStreamLockedFunction.get();
</ins><span class="cx"> 
</span><span class="cx">     JSC::MarkedArgumentBuffer arguments;
</span><span class="cx">     arguments.append(readableStream);
</span><del>-    JSC::JSValue result = callFunction(state, isLocked, JSC::jsUndefined(), arguments);
</del><ins>+    auto result = callFunction(state, isLocked, JSC::jsUndefined(), arguments);
</ins><span class="cx">     ASSERT(!state.hadException());
</span><span class="cx"> 
</span><span class="cx">     return result.isTrue();
</span><span class="lines">@@ -88,29 +88,29 @@
</span><span class="cx"> {
</span><span class="cx">     JSC::JSLockHolder lock(&amp;state);
</span><span class="cx"> 
</span><del>-    JSC::JSValue jsSource = source ? toJS(&amp;state, globalObject, source) : JSC::jsUndefined();
</del><ins>+    auto jsSource = source ? toJS(&amp;state, globalObject, source) : JSC::jsUndefined();
</ins><span class="cx">     JSC::Strong&lt;JSC::Unknown&gt; protect(state.vm(), jsSource);
</span><span class="cx"> 
</span><span class="cx">     JSC::MarkedArgumentBuffer arguments;
</span><span class="cx">     arguments.append(jsSource);
</span><span class="cx"> 
</span><del>-    JSC::JSValue constructor = JSReadableStream::getConstructor(state.vm(), globalObject);
</del><ins>+    auto constructor = JSReadableStream::getConstructor(state.vm(), globalObject);
</ins><span class="cx"> 
</span><span class="cx">     JSC::ConstructData constructData;
</span><del>-    JSC::ConstructType constructType = JSC::getConstructData(constructor, constructData);
</del><ins>+    auto constructType = JSC::getConstructData(constructor, constructData);
</ins><span class="cx">     ASSERT(constructType != JSC::ConstructType::None);
</span><span class="cx"> 
</span><del>-    return JSC::construct(&amp;state, constructor, constructType, constructData, arguments);
</del><ins>+    return construct(&amp;state, constructor, constructType, constructData, arguments);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSC::JSValue getReadableStreamReader(JSC::ExecState&amp; state, JSC::JSValue readableStream)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(readableStream.isObject());
</span><span class="cx"> 
</span><del>-    JSC::JSValue getReader = readableStream.getObject()-&gt;get(&amp;state, JSC::Identifier::fromString(&amp;state, &quot;getReader&quot;));
</del><ins>+    auto getReader = readableStream.getObject()-&gt;get(&amp;state, JSC::Identifier::fromString(&amp;state, &quot;getReader&quot;));
</ins><span class="cx">     ASSERT(!state.hadException());
</span><span class="cx"> 
</span><del>-    JSC::JSValue reader = callFunction(state, getReader, readableStream, JSC::MarkedArgumentBuffer());
</del><ins>+    auto reader = callFunction(state, getReader, readableStream, JSC::MarkedArgumentBuffer());
</ins><span class="cx">     ASSERT(!state.hadException());
</span><span class="cx"> 
</span><span class="cx">     return reader;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -916,9 +916,9 @@
</span><span class="cx">         $result .= &quot;}\n\n&quot;;
</span><span class="cx"> 
</span><span class="cx">         # FIXME: A little ugly to have this be a side effect instead of a return value.
</span><del>-        AddToImplIncludes(&quot;JSDOMBuild.h&quot;);
</del><ins>+        AddToImplIncludes(&quot;JSDOMConvert.h&quot;);
</ins><span class="cx"> 
</span><del>-        $result .= &quot;template&lt;&gt; $className build&lt;$className&gt;(ExecState&amp; state, JSValue value)\n&quot;;
</del><ins>+        $result .= &quot;template&lt;&gt; $className convert&lt;$className&gt;(ExecState&amp; state, JSValue value)\n&quot;;
</ins><span class="cx">         $result .= &quot;{\n&quot;;
</span><span class="cx">         $result .= &quot;    auto result = parse&lt;$className&gt;(state, value);\n&quot;;
</span><span class="cx">         $result .= &quot;    if (UNLIKELY(!result)) {\n&quot;;
</span><span class="lines">@@ -959,17 +959,30 @@
</span><span class="cx">         my $className = GetDictionaryClassName($interface, $name);
</span><span class="cx"> 
</span><span class="cx">         # FIXME: A little ugly to have this be a side effect instead of a return value.
</span><del>-        AddToImplIncludes(&quot;JSDOMBuild.h&quot;);
</del><ins>+        AddToImplIncludes(&quot;JSDOMConvert.h&quot;);
</ins><span class="cx"> 
</span><del>-        $result .= &quot;template&lt;&gt; $className build&lt;$className&gt;(ExecState&amp; state, JSValue value)\n&quot;;
</del><ins>+        $result .= &quot;template&lt;&gt; $className convert&lt;$className&gt;(ExecState&amp; state, JSValue value)\n&quot;;
</ins><span class="cx">         $result .= &quot;{\n&quot;;
</span><del>-        $result .= &quot;    return { \n&quot;;
-
</del><ins>+        my $needExceptionCheck = 0;
</ins><span class="cx">         foreach my $member (@{$dictionary-&gt;members}) {
</span><del>-            $result .= &quot;        build&lt;&quot; . GetNativeTypeFromSignature($interface, $member) . &quot;&gt;(state, value, \&quot;&quot; . $member-&gt;name . &quot;\&quot;),\n&quot;;
</del><ins>+            if ($needExceptionCheck) {
+                $result .= &quot;    if (UNLIKELY(state.hadException()))\n&quot;;
+                $result .= &quot;        return { };\n&quot;;
+            }
+            # FIXME: Eventually we will want this to call JSValueToNative.
+            my $function = $member-&gt;isOptional ? &quot;convertOptional&quot; : &quot;convert&quot;;
+            my $defaultValueWithLeadingComma = $member-&gt;isOptional ? &quot;, &quot; . $member-&gt;default : &quot;&quot;;
+            $result .= &quot;    auto &quot; . $member-&gt;name . &quot; = &quot; . $function . &quot;&lt;&quot; . GetNativeTypeFromSignature($interface, $member) . &quot;&gt;&quot;
+                . &quot;(state, propertyValue(state, value, \&quot;&quot; . $member-&gt;name . &quot;\&quot;)&quot; . $defaultValueWithLeadingComma . &quot;);\n&quot;;
+            $needExceptionCheck = 1;
</ins><span class="cx">         }
</span><del>-
-        $result .= &quot;    };\n&quot;;
</del><ins>+        $result .= &quot;    return { &quot;;
+        my $comma = &quot;&quot;;
+        foreach my $member (@{$dictionary-&gt;members}) {
+            $result .= $comma . &quot;WTFMove(&quot; . $member-&gt;name . &quot;)&quot;;
+            $comma = &quot;, &quot;;
+        }
+        $result .= &quot; };\n&quot;;
</ins><span class="cx">         $result .= &quot;}\n\n&quot;;
</span><span class="cx"> 
</span><span class="cx">         $result .= &quot;#endif\n\n&quot; if $conditionalString;
</span><span class="lines">@@ -3586,11 +3599,10 @@
</span><span class="cx">     my $argsIndex = 0;
</span><span class="cx">     foreach my $parameter (@{$function-&gt;parameters}) {
</span><span class="cx">         my $argType = $parameter-&gt;type;
</span><del>-        my $optional = $parameter-&gt;isOptional;
</del><span class="cx"> 
</span><del>-        die &quot;Optional parameters of non-nullable wrapper types are not supported&quot; if $optional &amp;&amp; !$parameter-&gt;isNullable &amp;&amp; $codeGenerator-&gt;IsWrapperType($argType);
</del><ins>+        die &quot;Optional parameters of non-nullable wrapper types are not supported&quot; if $parameter-&gt;isOptional &amp;&amp; !$parameter-&gt;isNullable &amp;&amp; $codeGenerator-&gt;IsWrapperType($argType);
</ins><span class="cx"> 
</span><del>-        if ($optional &amp;&amp; !defined($parameter-&gt;default)) {
</del><ins>+        if ($parameter-&gt;isOptional &amp;&amp; !defined($parameter-&gt;default)) {
</ins><span class="cx">             # As per Web IDL, optional dictionary parameters are always considered to have a default value of an empty dictionary, unless otherwise specified.
</span><span class="cx">             $parameter-&gt;default(&quot;[]&quot;) if $argType eq &quot;Dictionary&quot;;
</span><span class="cx">             
</span><span class="lines">@@ -3623,7 +3635,7 @@
</span><span class="cx">         } elsif ($codeGenerator-&gt;IsCallbackInterface($argType)) {
</span><span class="cx">             my $callbackClassName = GetCallbackClassName($argType);
</span><span class="cx">             $implIncludes{&quot;$callbackClassName.h&quot;} = 1;
</span><del>-            if ($optional) {
</del><ins>+            if ($parameter-&gt;isOptional) {
</ins><span class="cx">                 push(@$outputArray, &quot;    RefPtr&lt;$argType&gt; $name;\n&quot;);
</span><span class="cx">                 push(@$outputArray, &quot;    if (!state-&gt;argument($argsIndex).isUndefinedOrNull()) {\n&quot;);
</span><span class="cx">                 if ($codeGenerator-&gt;IsFunctionOnlyCallbackInterface($argType)) {
</span><span class="lines">@@ -3740,7 +3752,7 @@
</span><span class="cx">                 my $inner;
</span><span class="cx">                 my $nativeType = GetNativeTypeFromSignature($interface, $parameter);
</span><span class="cx"> 
</span><del>-                if ($optional &amp;&amp; defined($parameter-&gt;default) &amp;&amp; !WillConvertUndefinedToDefaultParameterValue($parameter-&gt;type, $parameter-&gt;default)) {
</del><ins>+                if ($parameter-&gt;isOptional &amp;&amp; defined($parameter-&gt;default) &amp;&amp; !WillConvertUndefinedToDefaultParameterValue($parameter-&gt;type, $parameter-&gt;default)) {
</ins><span class="cx">                     my $defaultValue = $parameter-&gt;default;
</span><span class="cx"> 
</span><span class="cx">                     # String-related optimizations.
</span><span class="lines">@@ -3762,7 +3774,7 @@
</span><span class="cx"> 
</span><span class="cx">                     $outer = &quot;state-&gt;argument($argsIndex).isUndefined() ? $defaultValue : &quot;;
</span><span class="cx">                     $inner = &quot;state-&gt;uncheckedArgument($argsIndex)&quot;;
</span><del>-                } elsif ($optional &amp;&amp; !defined($parameter-&gt;default)) {
</del><ins>+                } elsif ($parameter-&gt;isOptional &amp;&amp; !defined($parameter-&gt;default)) {
</ins><span class="cx">                     # Use WTF::Optional&lt;&gt;() for optional parameters that are missing or undefined and that do not have
</span><span class="cx">                     # a default value in the IDL.
</span><span class="cx">                     $outer = &quot;state-&gt;argument($argsIndex).isUndefined() ? Optional&lt;$nativeType&gt;() : &quot;;
</span><span class="lines">@@ -4255,6 +4267,7 @@
</span><span class="cx">     return $nativeType{$type} if exists $nativeType{$type};
</span><span class="cx"> 
</span><span class="cx">     return GetEnumerationClassName($interface, $type) if $codeGenerator-&gt;IsEnumType($type);
</span><ins>+    return GetDictionaryClassName($interface, $type) if $codeGenerator-&gt;IsDictionaryType($type);
</ins><span class="cx"> 
</span><span class="cx">     my $tearOffType = $codeGenerator-&gt;GetSVGTypeNeedingTearOff($type);
</span><span class="cx">     return &quot;${tearOffType}*&quot; if $tearOffType;
</span><span class="lines">@@ -4404,11 +4417,11 @@
</span><span class="cx">     return (&quot;$value.toBoolean(state)&quot;, 1) if $type eq &quot;boolean&quot;;
</span><span class="cx"> 
</span><span class="cx">     if ($codeGenerator-&gt;IsFloatingPointType($type)) {
</span><del>-        AddToImplIncludes(&quot;JSDOMBuild.h&quot;);
-        return (&quot;build&lt;double&gt;(*state, $value, ShouldAllowNonFinite::No)&quot;, 1) if $type eq &quot;double&quot;;
-        return (&quot;build&lt;double&gt;(*state, $value, ShouldAllowNonFinite::Yes)&quot;, 1) if $type eq &quot;unrestricted double&quot;;
-        return (&quot;build&lt;float&gt;(*state, $value, ShouldAllowNonFinite::No)&quot;, 1) if $type eq &quot;float&quot;;
-        return (&quot;build&lt;float&gt;(*state, $value, ShouldAllowNonFinite::Yes)&quot;, 1) if $type eq &quot;unrestricted float&quot;;
</del><ins>+        AddToImplIncludes(&quot;JSDOMConvert.h&quot;);
+        return (&quot;convert&lt;double&gt;(*state, $value, ShouldAllowNonFinite::No)&quot;, 1) if $type eq &quot;double&quot;;
+        return (&quot;convert&lt;double&gt;(*state, $value, ShouldAllowNonFinite::Yes)&quot;, 1) if $type eq &quot;unrestricted double&quot;;
+        return (&quot;convert&lt;float&gt;(*state, $value, ShouldAllowNonFinite::No)&quot;, 1) if $type eq &quot;float&quot;;
+        return (&quot;convert&lt;float&gt;(*state, $value, ShouldAllowNonFinite::Yes)&quot;, 1) if $type eq &quot;unrestricted float&quot;;
</ins><span class="cx">         die &quot;Unhandled floating point type: &quot; . $type;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4416,7 +4429,7 @@
</span><span class="cx"> 
</span><span class="cx">     return (&quot;to$type($value)&quot;, 1) if $codeGenerator-&gt;IsTypedArrayType($type);
</span><span class="cx">     return (&quot;parse&lt;&quot; . GetEnumerationClassName($interface, $type) . &quot;&gt;(*state, $value)&quot;, 1) if $codeGenerator-&gt;IsEnumType($type);
</span><del>-    return (&quot;build&lt;&quot; . GetDictionaryClassName($interface, $type) . &quot;&gt;(*state, $value)&quot;, 1) if $codeGenerator-&gt;IsDictionaryType($type);
</del><ins>+    return (&quot;convert&lt;&quot; . GetDictionaryClassName($interface, $type) . &quot;&gt;(*state, $value)&quot;, 1) if $codeGenerator-&gt;IsDictionaryType($type);
</ins><span class="cx"> 
</span><span class="cx">     AddToImplIncludes(&quot;JS$type.h&quot;, $conditional);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -29,8 +29,8 @@
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;HTMLNames.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><del>-#include &quot;JSDOMBuild.h&quot;
</del><span class="cx"> #include &quot;JSDOMConstructor.h&quot;
</span><ins>+#include &quot;JSDOMConvert.h&quot;
</ins><span class="cx"> #include &quot;JSDOMIterator.h&quot;
</span><span class="cx"> #include &quot;JSDOMPromise.h&quot;
</span><span class="cx"> #include &quot;JSDOMStringList.h&quot;
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::EnumType build&lt;TestObj::EnumType&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::EnumType convert&lt;TestObj::EnumType&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::EnumType&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -174,7 +174,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::Optional build&lt;TestObj::Optional&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::Optional convert&lt;TestObj::Optional&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::Optional&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::EnumA build&lt;TestObj::EnumA&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::EnumA convert&lt;TestObj::EnumA&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::EnumA&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::EnumB build&lt;TestObj::EnumB&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::EnumB convert&lt;TestObj::EnumB&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::EnumB&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -298,7 +298,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::EnumC build&lt;TestObj::EnumC&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::EnumC convert&lt;TestObj::EnumC&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::EnumC&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -342,7 +342,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::Kind build&lt;TestObj::Kind&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::Kind convert&lt;TestObj::Kind&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::Kind&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -384,7 +384,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::Size build&lt;TestObj::Size&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::Size convert&lt;TestObj::Size&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::Size&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -426,7 +426,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::Confidence build&lt;TestObj::Confidence&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::Confidence convert&lt;TestObj::Confidence&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::Confidence&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -468,7 +468,7 @@
</span><span class="cx">     return Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::ShadowRootMode build&lt;TestObj::ShadowRootMode&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::ShadowRootMode convert&lt;TestObj::ShadowRootMode&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     auto result = parse&lt;TestObj::ShadowRootMode&gt;(state, value);
</span><span class="cx">     if (UNLIKELY(!result)) {
</span><span class="lines">@@ -483,13 +483,33 @@
</span><span class="cx">     return &quot;\&quot;open\&quot;, \&quot;closed\&quot;&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; TestObj::ShadowRootInit build&lt;TestObj::ShadowRootInit&gt;(ExecState&amp; state, JSValue value)
</del><ins>+template&lt;&gt; TestObj::ShadowRootInit convert&lt;TestObj::ShadowRootInit&gt;(ExecState&amp; state, JSValue value)
</ins><span class="cx"> {
</span><del>-    return { 
-        build&lt;TestObj::ShadowRootMode&gt;(state, value, &quot;mode&quot;),
-    };
</del><ins>+    auto mode = convert&lt;TestObj::ShadowRootMode&gt;(state, propertyValue(state, value, &quot;mode&quot;));
+    return { WTFMove(mode) };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; TestObj::FontFaceDescriptors convert&lt;TestObj::FontFaceDescriptors&gt;(ExecState&amp; state, JSValue value)
+{
+    auto style = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;style&quot;), &quot;normal&quot;);
+    if (state.hadException())
+        return { };
+    auto weight = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;weight&quot;), &quot;normal&quot;);
+    if (state.hadException())
+        return { };
+    auto stretch = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;stretch&quot;), &quot;normal&quot;);
+    if (state.hadException())
+        return { };
+    auto unicodeRange = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;unicodeRange&quot;), &quot;U+0-10FFFF&quot;);
+    if (state.hadException())
+        return { };
+    auto variant = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;variant&quot;), &quot;normal&quot;);
+    if (state.hadException())
+        return { };
+    auto featureSettings = convertOptional&lt;String&gt;(state, propertyValue(state, value, &quot;featureSettings&quot;), &quot;normal&quot;);
+    return { WTFMove(style), WTFMove(weight), WTFMove(stretch), WTFMove(unicodeRange), WTFMove(variant), WTFMove(featureSettings) };
+}
+
</ins><span class="cx"> // Functions
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><span class="lines">@@ -3630,7 +3650,7 @@
</span><span class="cx">         return throwSetterTypeError(*state, &quot;TestObj&quot;, &quot;strictFloat&quot;);
</span><span class="cx">     }
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    auto nativeValue = build&lt;float&gt;(*state, value, ShouldAllowNonFinite::Yes);
</del><ins>+    auto nativeValue = convert&lt;float&gt;(*state, value, ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return false;
</span><span class="cx">     impl.setStrictFloat(WTFMove(nativeValue));
</span><span class="lines">@@ -4688,7 +4708,7 @@
</span><span class="cx">         return throwThisTypeError(*state, &quot;TestObj&quot;, &quot;methodWithOptionalDoubleIsNaN&quot;);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    auto number = build&lt;double&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</del><ins>+    auto number = convert&lt;double&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.methodWithOptionalDoubleIsNaN(WTFMove(number));
</span><span class="lines">@@ -4703,7 +4723,7 @@
</span><span class="cx">         return throwThisTypeError(*state, &quot;TestObj&quot;, &quot;methodWithOptionalFloatIsNaN&quot;);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    auto number = build&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</del><ins>+    auto number = convert&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.methodWithOptionalFloatIsNaN(WTFMove(number));
</span><span class="lines">@@ -5692,7 +5712,7 @@
</span><span class="cx">     auto str = state-&gt;argument(0).toWTFString(state);
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    auto a = build&lt;float&gt;(*state, state-&gt;argument(1), ShouldAllowNonFinite::Yes);
</del><ins>+    auto a = convert&lt;float&gt;(*state, state-&gt;argument(1), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     auto b = toInt32(state, state-&gt;argument(2), NormalConversion);
</span><span class="lines">@@ -5784,7 +5804,7 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto head = build&lt;double&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</del><ins>+    auto head = convert&lt;double&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     Vector&lt;double&gt; tail = toNativeArguments&lt;double&gt;(state, 1);
</span><span class="lines">@@ -5827,7 +5847,7 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto a = build&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</del><ins>+    auto a = convert&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     auto b = toInt32(state, state-&gt;argument(1), NormalConversion);
</span><span class="lines">@@ -5871,7 +5891,7 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto a = build&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::No);
</del><ins>+    auto a = convert&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::No);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.testPromiseFunctionWithFloatArgument(WTFMove(a), DeferredWrapper(state, castedThis-&gt;globalObject(), promiseDeferred));
</span><span class="lines">@@ -5935,7 +5955,7 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto a = build&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::No);
</del><ins>+    auto a = convert&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::No);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.testPromiseOverloadedFunction(WTFMove(a), DeferredWrapper(state, castedThis-&gt;globalObject(), promiseDeferred));
</span><span class="lines">@@ -6029,7 +6049,7 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto init = build&lt;TestObj::ShadowRootInit&gt;(*state, state-&gt;argument(0));
</del><ins>+    auto init = convert&lt;TestObj::ShadowRootInit&gt;(*state, state-&gt;argument(0));
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.attachShadowRoot(WTFMove(init));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -24,8 +24,8 @@
</span><span class="cx"> #include &quot;DOMStringList.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><del>-#include &quot;JSDOMBuild.h&quot;
</del><span class="cx"> #include &quot;JSDOMConstructor.h&quot;
</span><ins>+#include &quot;JSDOMConvert.h&quot;
</ins><span class="cx"> #include &quot;JSDOMStringList.h&quot;
</span><span class="cx"> #include &quot;JSSVGPoint.h&quot;
</span><span class="cx"> #include &quot;JSSerializedScriptValue.h&quot;
</span><span class="lines">@@ -481,19 +481,19 @@
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><del>-    auto width = build&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</del><ins>+    auto width = convert&lt;float&gt;(*state, state-&gt;argument(0), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    auto height = build&lt;float&gt;(*state, state-&gt;argument(1), ShouldAllowNonFinite::Yes);
</del><ins>+    auto height = convert&lt;float&gt;(*state, state-&gt;argument(1), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    auto blur = build&lt;float&gt;(*state, state-&gt;argument(2), ShouldAllowNonFinite::Yes);
</del><ins>+    auto blur = convert&lt;float&gt;(*state, state-&gt;argument(2), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     auto color = state-&gt;argument(3).isUndefined() ? String() : state-&gt;uncheckedArgument(3).toWTFString(state);
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    auto alpha = state-&gt;argument(4).isUndefined() ? Optional&lt;float&gt;() : build&lt;float&gt;(*state, state-&gt;uncheckedArgument(4), ShouldAllowNonFinite::Yes);
</del><ins>+    auto alpha = state-&gt;argument(4).isUndefined() ? Optional&lt;float&gt;() : convert&lt;float&gt;(*state, state-&gt;uncheckedArgument(4), ShouldAllowNonFinite::Yes);
</ins><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     impl.setShadow(WTFMove(width), WTFMove(height), WTFMove(blur), WTFMove(color), WTFMove(alpha));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestObjidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestObj.idl (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -381,3 +381,12 @@
</span><span class="cx"> dictionary ShadowRootInit {
</span><span class="cx">     required ShadowRootMode mode;
</span><span class="cx"> };
</span><ins>+
+dictionary FontFaceDescriptors {
+    DOMString style = &quot;normal&quot;;
+    DOMString weight = &quot;normal&quot;;
+    DOMString stretch = &quot;normal&quot;;
+    DOMString unicodeRange = &quot;U+0-10FFFF&quot;;
+    DOMString variant = &quot;normal&quot;;
+    DOMString featureSettings = &quot;normal&quot;;
+};
</ins></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/CSSFontFace.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -209,8 +209,8 @@
</span><span class="cx">     m_ranges.clear();
</span><span class="cx">     auto&amp; list = downcast&lt;CSSValueList&gt;(unicodeRange);
</span><span class="cx">     for (auto&amp; rangeValue : list) {
</span><del>-        CSSUnicodeRangeValue&amp; range = downcast&lt;CSSUnicodeRangeValue&gt;(rangeValue.get());
-        m_ranges.append(UnicodeRange(range.from(), range.to()));
</del><ins>+        auto&amp; range = downcast&lt;CSSUnicodeRangeValue&gt;(rangeValue.get());
+        m_ranges.append({ range.from(), range.to() });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     iterateClients(m_clients, [&amp;](Client&amp; client) {
</span><span class="lines">@@ -223,6 +223,7 @@
</span><span class="cx"> bool CSSFontFace::setVariantLigatures(CSSValue&amp; variantLigatures)
</span><span class="cx"> {
</span><span class="cx">     auto ligatures = extractFontVariantLigatures(variantLigatures);
</span><ins>+
</ins><span class="cx">     m_variantSettings.commonLigatures = ligatures.commonLigatures;
</span><span class="cx">     m_variantSettings.discretionaryLigatures = ligatures.discretionaryLigatures;
</span><span class="cx">     m_variantSettings.historicalLigatures = ligatures.historicalLigatures;
</span><span class="lines">@@ -239,6 +240,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!is&lt;CSSPrimitiveValue&gt;(variantPosition))
</span><span class="cx">         return false;
</span><ins>+
</ins><span class="cx">     m_variantSettings.position = downcast&lt;CSSPrimitiveValue&gt;(variantPosition);
</span><span class="cx"> 
</span><span class="cx">     iterateClients(m_clients, [&amp;](Client&amp; client) {
</span><span class="lines">@@ -252,6 +254,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!is&lt;CSSPrimitiveValue&gt;(variantCaps))
</span><span class="cx">         return false;
</span><ins>+
</ins><span class="cx">     m_variantSettings.caps = downcast&lt;CSSPrimitiveValue&gt;(variantCaps);
</span><span class="cx"> 
</span><span class="cx">     iterateClients(m_clients, [&amp;](Client&amp; client) {
</span><span class="lines">@@ -264,6 +267,7 @@
</span><span class="cx"> bool CSSFontFace::setVariantNumeric(CSSValue&amp; variantNumeric)
</span><span class="cx"> {
</span><span class="cx">     auto numeric = extractFontVariantNumeric(variantNumeric);
</span><ins>+
</ins><span class="cx">     m_variantSettings.numericFigure = numeric.figure;
</span><span class="cx">     m_variantSettings.numericSpacing = numeric.spacing;
</span><span class="cx">     m_variantSettings.numericFraction = numeric.fraction;
</span><span class="lines">@@ -281,6 +285,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!is&lt;CSSPrimitiveValue&gt;(variantAlternates))
</span><span class="cx">         return false;
</span><ins>+
</ins><span class="cx">     m_variantSettings.alternates = downcast&lt;CSSPrimitiveValue&gt;(variantAlternates);
</span><span class="cx"> 
</span><span class="cx">     iterateClients(m_clients, [&amp;](Client&amp; client) {
</span><span class="lines">@@ -293,6 +298,7 @@
</span><span class="cx"> bool CSSFontFace::setVariantEastAsian(CSSValue&amp; variantEastAsian)
</span><span class="cx"> {
</span><span class="cx">     auto eastAsian = extractFontVariantEastAsian(variantEastAsian);
</span><ins>+
</ins><span class="cx">     m_variantSettings.eastAsianVariant = eastAsian.variant;
</span><span class="cx">     m_variantSettings.eastAsianWidth = eastAsian.width;
</span><span class="cx">     m_variantSettings.eastAsianRuby = eastAsian.ruby;
</span><span class="lines">@@ -304,23 +310,29 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSFontFace::setFeatureSettings(CSSValue&amp; featureSettings)
</del><ins>+void CSSFontFace::setFeatureSettings(CSSValue&amp; featureSettings)
</ins><span class="cx"> {
</span><del>-    if (!is&lt;CSSValueList&gt;(featureSettings))
-        return false;
</del><ins>+    // Can only call this with a primitive value of normal, or a value list containing font feature values.
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(featureSettings) || is&lt;CSSValueList&gt;(featureSettings));
</ins><span class="cx"> 
</span><del>-    m_featureSettings = FontFeatureSettings();
-    auto&amp; list = downcast&lt;CSSValueList&gt;(featureSettings);
-    for (auto&amp; rangeValue : list) {
-        CSSFontFeatureValue&amp; feature = downcast&lt;CSSFontFeatureValue&gt;(rangeValue.get());
-        m_featureSettings.insert(FontFeature(feature.tag(), feature.value()));
</del><ins>+    FontFeatureSettings settings;
+
+    if (is&lt;CSSValueList&gt;(featureSettings)) {
+        auto&amp; list = downcast&lt;CSSValueList&gt;(featureSettings);
+        for (auto&amp; rangeValue : list) {
+            auto&amp; feature = downcast&lt;CSSFontFeatureValue&gt;(rangeValue.get());
+            settings.insert({ feature.tag(), feature.value() });
+        }
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (m_featureSettings == settings)
+        return;
+
+    m_featureSettings = WTFMove(settings);
+
</ins><span class="cx">     iterateClients(m_clients, [&amp;](Client&amp; client) {
</span><span class="cx">         client.fontPropertyChanged(*this);
</span><span class="cx">     });
</span><del>-
-    return true;
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool CSSFontFace::allSourcesFailed() const
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.h (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.h        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/CSSFontFace.h        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -23,8 +23,7 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef CSSFontFace_h
-#define CSSFontFace_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;CSSFontFaceRule.h&quot;
</span><span class="cx"> #include &quot;FontFeatureSettings.h&quot;
</span><span class="lines">@@ -61,6 +60,8 @@
</span><span class="cx">     }
</span><span class="cx">     virtual ~CSSFontFace();
</span><span class="cx"> 
</span><ins>+    // FIXME: These functions don't need to have boolean return values.
+    // Callers only call this with known-valid CSS values.
</ins><span class="cx">     bool setFamilies(CSSValue&amp;);
</span><span class="cx">     bool setStyle(CSSValue&amp;);
</span><span class="cx">     bool setWeight(CSSValue&amp;);
</span><span class="lines">@@ -71,7 +72,7 @@
</span><span class="cx">     bool setVariantNumeric(CSSValue&amp;);
</span><span class="cx">     bool setVariantAlternates(CSSValue&amp;);
</span><span class="cx">     bool setVariantEastAsian(CSSValue&amp;);
</span><del>-    bool setFeatureSettings(CSSValue&amp;);
</del><ins>+    void setFeatureSettings(CSSValue&amp;);
</ins><span class="cx"> 
</span><span class="cx">     enum class Status;
</span><span class="cx">     struct UnicodeRange;
</span><span class="lines">@@ -109,8 +110,8 @@
</span><span class="cx">     public:
</span><span class="cx">         virtual ~Client() { }
</span><span class="cx">         virtual void fontLoaded(CSSFontFace&amp;) { }
</span><del>-        virtual void fontStateChanged(CSSFontFace&amp;, Status oldState, Status newState) { UNUSED_PARAM(oldState); UNUSED_PARAM(newState); }
-        virtual void fontPropertyChanged(CSSFontFace&amp;, CSSValueList* oldFamilies = nullptr) { UNUSED_PARAM(oldFamilies); }
</del><ins>+        virtual void fontStateChanged(CSSFontFace&amp;, Status /*oldState*/, Status /*newState*/) { }
+        virtual void fontPropertyChanged(CSSFontFace&amp;, CSSValueList* /*oldFamilies*/ = nullptr) { }
</ins><span class="cx">         virtual void ref() = 0;
</span><span class="cx">         virtual void deref() = 0;
</span><span class="cx">     };
</span><span class="lines">@@ -124,27 +125,11 @@
</span><span class="cx">     //              ||   //  \\   ||
</span><span class="cx">     //              \/  \/    \/  \/
</span><span class="cx">     //             Success    Failure
</span><del>-    enum class Status {
-        Pending,
-        Loading,
-        TimedOut,
-        Success,
-        Failure
-    };
</del><ins>+    enum class Status { Pending, Loading, TimedOut, Success, Failure };
</ins><span class="cx"> 
</span><span class="cx">     struct UnicodeRange {
</span><del>-        UnicodeRange(UChar32 from, UChar32 to)
-            : m_from(from)
-            , m_to(to)
-        {
-        }
-
-        UChar32 from() const { return m_from; }
-        UChar32 to() const { return m_to; }
-
-    private:
-        UChar32 m_from;
-        UChar32 m_to;
</del><ins>+        UChar32 from;
+        UChar32 to;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     // We don't guarantee that the FontFace wrapper will be the same every time you ask for it.
</span><span class="lines">@@ -177,5 +162,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif
</del></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -159,8 +159,8 @@
</span><span class="cx">         return;
</span><span class="cx">     if (variantEastAsian &amp;&amp; !fontFace-&gt;setVariantEastAsian(*variantEastAsian))
</span><span class="cx">         return;
</span><del>-    if (featureSettings &amp;&amp; !fontFace-&gt;setFeatureSettings(*featureSettings))
-        return;
</del><ins>+    if (featureSettings)
+        fontFace-&gt;setFeatureSettings(*featureSettings);
</ins><span class="cx"> 
</span><span class="cx">     CSSFontFace::appendSources(fontFace, srcList, m_document, isInitiatingElementInUserAgentShadowTree);
</span><span class="cx">     if (fontFace-&gt;allSourcesFailed())
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSSegmentedFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -62,18 +62,17 @@
</span><span class="cx"> static void appendFontWithInvalidUnicodeRangeIfLoading(FontRanges&amp; ranges, Ref&lt;Font&gt;&amp;&amp; font, const Vector&lt;CSSFontFace::UnicodeRange&gt;&amp; unicodeRanges)
</span><span class="cx"> {
</span><span class="cx">     if (font-&gt;isLoading()) {
</span><del>-        ranges.appendRange(FontRanges::Range(0, 0, WTFMove(font)));
</del><ins>+        ranges.appendRange({ 0, 0, WTFMove(font) });
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    unsigned numRanges = unicodeRanges.size();
-    if (!numRanges) {
-        ranges.appendRange(FontRanges::Range(0, 0x7FFFFFFF, WTFMove(font)));
</del><ins>+    if (unicodeRanges.isEmpty()) {
+        ranges.appendRange({ 0, 0x7FFFFFFF, WTFMove(font) });
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    for (unsigned j = 0; j &lt; numRanges; ++j)
-        ranges.appendRange(FontRanges::Range(unicodeRanges[j].from(), unicodeRanges[j].to(), font.copyRef()));
</del><ins>+    for (auto&amp; range : unicodeRanges)
+        ranges.appendRange({ range.from, range.to, font.copyRef() });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FontRanges CSSSegmentedFontFace::fontRanges(const FontDescription&amp; fontDescription)
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.cpp (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.cpp        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/FontFace.cpp        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -26,81 +26,56 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;FontFace.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;CSSFontFace.h&quot;
</del><span class="cx"> #include &quot;CSSFontFeatureValue.h&quot;
</span><del>-#include &quot;CSSFontSelector.h&quot;
</del><span class="cx"> #include &quot;CSSUnicodeRangeValue.h&quot;
</span><del>-#include &quot;CSSValue.h&quot;
</del><span class="cx"> #include &quot;CSSValuePool.h&quot;
</span><del>-#include &quot;Dictionary.h&quot;
</del><span class="cx"> #include &quot;Document.h&quot;
</span><del>-#include &quot;ExceptionCode.h&quot;
</del><span class="cx"> #include &quot;FontVariantBuilder.h&quot;
</span><del>-#include &quot;JSDOMCoreException.h&quot;
</del><span class="cx"> #include &quot;JSFontFace.h&quot;
</span><del>-#include &quot;ScriptExecutionContext.h&quot;
</del><span class="cx"> #include &quot;StyleProperties.h&quot;
</span><del>-#include &lt;wtf/text/StringBuilder.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static inline Optional&lt;String&gt; valueFromDictionary(const Dictionary&amp; dictionary, const char* key)
</del><ins>+RefPtr&lt;FontFace&gt; FontFace::create(JSC::ExecState&amp; state, Document&amp; document, const String&amp; family, JSC::JSValue source, const Optional&lt;Descriptors&gt;&amp; descriptors, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><del>-    String result;
-    dictionary.get(key, result);
-    return result.isNull() ? Nullopt : Optional&lt;String&gt;(result);
-}
</del><ins>+    auto result = adoptRef(*new FontFace(document.fontSelector()));
</ins><span class="cx"> 
</span><del>-RefPtr&lt;FontFace&gt; FontFace::create(JSC::ExecState&amp; execState, ScriptExecutionContext&amp; context, const String&amp; family, JSC::JSValue source, const Dictionary&amp; descriptors, ExceptionCode&amp; ec)
-{
-    if (!context.isDocument()) {
-        ec = TypeError;
-        return nullptr;
-    }
-
-    Ref&lt;FontFace&gt; result = adoptRef(*new FontFace(downcast&lt;Document&gt;(context).fontSelector()));
-
</del><span class="cx">     ec = 0;
</span><span class="cx">     result-&gt;setFamily(family, ec);
</span><span class="cx">     if (ec)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     if (source.isString()) {
</span><del>-        String sourceString = source.toString(&amp;execState)-&gt;value(&amp;execState);
-        auto value = FontFace::parseString(sourceString, CSSPropertySrc);
</del><ins>+        auto value = FontFace::parseString(source.getString(&amp;state), CSSPropertySrc);
</ins><span class="cx">         if (!is&lt;CSSValueList&gt;(value.get())) {
</span><span class="cx">             ec = SYNTAX_ERR;
</span><span class="cx">             return nullptr;
</span><span class="cx">         }
</span><del>-        CSSFontFace::appendSources(result-&gt;backing(), downcast&lt;CSSValueList&gt;(*value), &amp;downcast&lt;Document&gt;(context), false);
</del><ins>+        CSSFontFace::appendSources(result-&gt;backing(), downcast&lt;CSSValueList&gt;(*value), &amp;document, false);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (auto style = valueFromDictionary(descriptors, &quot;style&quot;))
-        result-&gt;setStyle(style.value(), ec);
-    if (ec)
-        return nullptr;
-    if (auto style = valueFromDictionary(descriptors, &quot;weight&quot;))
-        result-&gt;setWeight(style.value(), ec);
-    if (ec)
-        return nullptr;
-    if (auto style = valueFromDictionary(descriptors, &quot;stretch&quot;))
-        result-&gt;setStretch(style.value(), ec);
-    if (ec)
-        return nullptr;
-    if (auto style = valueFromDictionary(descriptors, &quot;unicodeRange&quot;))
-        result-&gt;setUnicodeRange(style.value(), ec);
-    if (ec)
-        return nullptr;
-    if (auto style = valueFromDictionary(descriptors, &quot;variant&quot;))
-        result-&gt;setVariant(style.value(), ec);
-    if (ec)
-        return nullptr;
-    if (auto style = valueFromDictionary(descriptors, &quot;featureSettings&quot;))
-        result-&gt;setFeatureSettings(style.value(), ec);
-    if (ec)
-        return nullptr;
</del><ins>+    if (descriptors) {
+        result-&gt;setStyle(descriptors-&gt;style, ec);
+        if (ec)
+            return nullptr;
+        result-&gt;setWeight(descriptors-&gt;weight, ec);
+        if (ec)
+            return nullptr;
+        result-&gt;setStretch(descriptors-&gt;stretch, ec);
+        if (ec)
+            return nullptr;
+        result-&gt;setUnicodeRange(descriptors-&gt;unicodeRange, ec);
+        if (ec)
+            return nullptr;
+        result-&gt;setVariant(descriptors-&gt;variant, ec);
+        if (ec)
+            return nullptr;
+        result-&gt;setFeatureSettings(descriptors-&gt;featureSettings, ec);
+        if (ec)
+            return nullptr;
+    }
</ins><span class="cx"> 
</span><del>-    return result.ptr();
</del><ins>+    return WTFMove(result);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;FontFace&gt; FontFace::create(CSSFontFace&amp; face)
</span><span class="lines">@@ -109,10 +84,8 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FontFace::FontFace(CSSFontSelector&amp; fontSelector)
</span><del>-    : m_weakPtrFactory(this)
-    , m_backing(CSSFontFace::create(&amp;fontSelector, nullptr, this))
</del><ins>+    : FontFace(CSSFontFace::create(&amp;fontSelector, nullptr, this))
</ins><span class="cx"> {
</span><del>-    m_backing-&gt;addClient(*this);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FontFace::FontFace(CSSFontFace&amp; face)
</span><span class="lines">@@ -134,9 +107,8 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;CSSValue&gt; FontFace::parseString(const String&amp; string, CSSPropertyID propertyID)
</span><span class="cx"> {
</span><del>-    Ref&lt;MutableStyleProperties&gt; style = MutableStyleProperties::create();
-    auto result = CSSParser::parseValue(style.ptr(), propertyID, string, true, CSSStrictMode, nullptr);
-    if (result == CSSParser::ParseResult::Error)
</del><ins>+    auto style = MutableStyleProperties::create();
+    if (CSSParser::parseValue(style.ptr(), propertyID, string, true, CSSStrictMode, nullptr) == CSSParser::ParseResult::Error)
</ins><span class="cx">         return nullptr;
</span><span class="cx">     return style-&gt;getPropertyCSSValue(propertyID);
</span><span class="cx"> }
</span><span class="lines">@@ -184,56 +156,64 @@
</span><span class="cx"> 
</span><span class="cx"> void FontFace::setVariant(const String&amp; variant, ExceptionCode&amp; ec)
</span><span class="cx"> {
</span><del>-    Ref&lt;MutableStyleProperties&gt; style = MutableStyleProperties::create();
</del><ins>+    auto style = MutableStyleProperties::create();
</ins><span class="cx">     auto result = CSSParser::parseValue(style.ptr(), CSSPropertyFontVariant, variant, true, CSSStrictMode, nullptr);
</span><del>-    if (result != CSSParser::ParseResult::Error) {
-        FontVariantSettings backup = m_backing-&gt;variantSettings();
-        auto normal = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-        bool success = true;
-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantLigatures))
-            success &amp;= m_backing-&gt;setVariantLigatures(*value);
-        else
-            m_backing-&gt;setVariantLigatures(normal);
</del><ins>+    if (result == CSSParser::ParseResult::Error) {
+        ec = SYNTAX_ERR;
+        return;
+    }
</ins><span class="cx"> 
</span><del>-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantPosition))
-            success &amp;= m_backing-&gt;setVariantPosition(*value);
-        else
-            m_backing-&gt;setVariantPosition(normal);
</del><ins>+    // FIXME: Would be much better to stage the new settings and set them all at once
+    // instead of this dance where we make a backup and revert to it if something fails.
+    FontVariantSettings backup = m_backing-&gt;variantSettings();
</ins><span class="cx"> 
</span><del>-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantCaps))
-            success &amp;= m_backing-&gt;setVariantCaps(*value);
-        else
-            m_backing-&gt;setVariantCaps(normal);
</del><ins>+    auto normal = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
+    bool success = true;
</ins><span class="cx"> 
</span><del>-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantNumeric))
-            success &amp;= m_backing-&gt;setVariantNumeric(*value);
-        else
-            m_backing-&gt;setVariantNumeric(normal);
</del><ins>+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantLigatures))
+        success &amp;= m_backing-&gt;setVariantLigatures(*value);
+    else
+        m_backing-&gt;setVariantLigatures(normal);
</ins><span class="cx"> 
</span><del>-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantAlternates))
-            success &amp;= m_backing-&gt;setVariantAlternates(*value);
-        else
-            m_backing-&gt;setVariantAlternates(normal);
</del><ins>+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantPosition))
+        success &amp;= m_backing-&gt;setVariantPosition(*value);
+    else
+        m_backing-&gt;setVariantPosition(normal);
</ins><span class="cx"> 
</span><del>-        if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantEastAsian))
-            success &amp;= m_backing-&gt;setVariantEastAsian(*value);
-        else
-            m_backing-&gt;setVariantEastAsian(normal);
</del><ins>+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantCaps))
+        success &amp;= m_backing-&gt;setVariantCaps(*value);
+    else
+        m_backing-&gt;setVariantCaps(normal);
</ins><span class="cx"> 
</span><del>-        if (success)
-            return;
</del><ins>+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantNumeric))
+        success &amp;= m_backing-&gt;setVariantNumeric(*value);
+    else
+        m_backing-&gt;setVariantNumeric(normal);
+
+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantAlternates))
+        success &amp;= m_backing-&gt;setVariantAlternates(*value);
+    else
+        m_backing-&gt;setVariantAlternates(normal);
+
+    if (auto value = style-&gt;getPropertyCSSValue(CSSPropertyFontVariantEastAsian))
+        success &amp;= m_backing-&gt;setVariantEastAsian(*value);
+    else
+        m_backing-&gt;setVariantEastAsian(normal);
+
+    if (!success) {
</ins><span class="cx">         m_backing-&gt;setVariantSettings(backup);
</span><ins>+        ec = SYNTAX_ERR;
</ins><span class="cx">     }
</span><del>-    ec = SYNTAX_ERR;
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FontFace::setFeatureSettings(const String&amp; featureSettings, ExceptionCode&amp; ec)
</span><span class="cx"> {
</span><del>-    bool success = false;
-    if (auto value = parseString(featureSettings, CSSPropertyFontFeatureSettings))
-        success = m_backing-&gt;setFeatureSettings(*value);
-    if (!success)
</del><ins>+    auto value = parseString(featureSettings, CSSPropertyFontFeatureSettings);
+    if (!value) {
</ins><span class="cx">         ec = SYNTAX_ERR;
</span><ins>+        return;
+    }
+    m_backing-&gt;setFeatureSettings(*value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String FontFace::family() const
</span><span class="lines">@@ -290,7 +270,7 @@
</span><span class="cx">         return &quot;U+0-10FFFF&quot;;
</span><span class="cx">     RefPtr&lt;CSSValueList&gt; values = CSSValueList::createCommaSeparated();
</span><span class="cx">     for (auto&amp; range : m_backing-&gt;ranges())
</span><del>-        values-&gt;append(CSSUnicodeRangeValue::create(range.from(), range.to()));
</del><ins>+        values-&gt;append(CSSUnicodeRangeValue::create(range.from, range.to));
</ins><span class="cx">     return values-&gt;cssText();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.h (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.h        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/FontFace.h        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -23,28 +23,26 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef FontFace_h
-#define FontFace_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;CSSFontFace.h&quot;
</span><span class="cx"> #include &quot;CSSPropertyNames.h&quot;
</span><span class="cx"> #include &quot;JSDOMPromise.h&quot;
</span><del>-#include &lt;wtf/RefCounted.h&gt;
-#include &lt;wtf/RefPtr.h&gt;
</del><span class="cx"> #include &lt;wtf/WeakPtr.h&gt;
</span><del>-#include &lt;wtf/text/WTFString.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class CSSFontFace;
-class CSSValue;
-class Dictionary;
-
-using ExceptionCode = int;
-
-class FontFace final : public RefCounted&lt;FontFace&gt;, public CSSFontFace::Client {
</del><ins>+class FontFace final : public RefCounted&lt;FontFace&gt;, private CSSFontFace::Client {
</ins><span class="cx"> public:
</span><del>-    static RefPtr&lt;FontFace&gt; create(JSC::ExecState&amp;, ScriptExecutionContext&amp;, const String&amp; family, JSC::JSValue source, const Dictionary&amp; descriptors, ExceptionCode&amp;);
</del><ins>+    struct Descriptors {
+        String style;
+        String weight;
+        String stretch;
+        String unicodeRange;
+        String variant;
+        String featureSettings;
+    };
+    static RefPtr&lt;FontFace&gt; create(JSC::ExecState&amp;, Document&amp;, const String&amp; family, JSC::JSValue source, const Optional&lt;Descriptors&gt;&amp;, ExceptionCode&amp;);
</ins><span class="cx">     static Ref&lt;FontFace&gt; create(CSSFontFace&amp;);
</span><span class="cx">     virtual ~FontFace();
</span><span class="cx"> 
</span><span class="lines">@@ -76,17 +74,16 @@
</span><span class="cx"> 
</span><span class="cx">     static RefPtr&lt;CSSValue&gt; parseString(const String&amp;, CSSPropertyID);
</span><span class="cx"> 
</span><del>-    void fontStateChanged(CSSFontFace&amp;, CSSFontFace::Status oldState, CSSFontFace::Status newState) override;
</del><ins>+    void fontStateChanged(CSSFontFace&amp;, CSSFontFace::Status oldState, CSSFontFace::Status newState) final;
</ins><span class="cx"> 
</span><span class="cx">     WeakPtr&lt;FontFace&gt; createWeakPtr() const;
</span><span class="cx"> 
</span><del>-    // CSSFontFace::Client needs to be able to be held in a RefPtr.
-    void ref() override { RefCounted&lt;FontFace&gt;::ref(); }
-    void deref() override { RefCounted&lt;FontFace&gt;::deref(); }
</del><ins>+    void ref() final { RefCounted::ref(); }
+    void deref() final { RefCounted::deref(); }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    FontFace(CSSFontSelector&amp;);
-    FontFace(CSSFontFace&amp;);
</del><ins>+    explicit FontFace(CSSFontSelector&amp;);
+    explicit FontFace(CSSFontFace&amp;);
</ins><span class="cx"> 
</span><span class="cx">     WeakPtrFactory&lt;FontFace&gt; m_weakPtrFactory;
</span><span class="cx">     Ref&lt;CSSFontFace&gt; m_backing;
</span><span class="lines">@@ -94,5 +91,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif
</del></span></pre></div>
<a id="trunkSourceWebCorecssFontFaceidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.idl (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.idl        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Source/WebCore/css/FontFace.idl        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -30,10 +30,19 @@
</span><span class="cx">     &quot;error&quot;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+dictionary FontFaceDescriptors {
+    DOMString style = &quot;normal&quot;;
+    DOMString weight = &quot;normal&quot;;
+    DOMString stretch = &quot;normal&quot;;
+    DOMString unicodeRange = &quot;U+0-10FFFF&quot;;
+    DOMString variant = &quot;normal&quot;;
+    DOMString featureSettings = &quot;normal&quot;;
+};
+
</ins><span class="cx"> [
</span><del>-    ConstructorCallWith=ScriptExecutionContext&amp;ScriptState,
</del><ins>+    ConstructorCallWith=Document&amp;ScriptState,
</ins><span class="cx">     ConstructorRaisesException,
</span><del>-    Constructor(DOMString family, any source, Dictionary descriptors)
</del><ins>+    Constructor(DOMString family, any source, optional FontFaceDescriptors descriptors)
</ins><span class="cx"> ] interface FontFace {
</span><span class="cx">     [SetterRaisesException] attribute DOMString family;
</span><span class="cx">     [SetterRaisesException] attribute DOMString style;
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Tools/ChangeLog        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-05-07  Darin Adler  &lt;darin@apple.com&gt;
+
+        Next step on dictionary bindings, along with other bindings refinements
+        https://bugs.webkit.org/show_bug.cgi?id=157451
+
+        Reviewed by Chris Dumez.
+
+        * Scripts/do-webcore-rename: Use this to rename JSDOMBuild.h to JSDOMConvert.h.
+        Also skip test expectations in a directory that this was modifying unnecessarily.
+
</ins><span class="cx"> 2016-05-06  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Enable IOS_TEXT_AUTOSIZING on Mac and make it testable
</span></span></pre></div>
<a id="trunkToolsScriptsdowebcorerename"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/do-webcore-rename (200546 => 200547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/do-webcore-rename        2016-05-07 20:04:27 UTC (rev 200546)
+++ trunk/Tools/Scripts/do-webcore-rename        2016-05-07 21:14:20 UTC (rev 200547)
</span><span class="lines">@@ -62,6 +62,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> my @directoriesToIgnoreList = (
</span><ins>+    &quot;expected&quot;,
</ins><span class="cx">     &quot;icu&quot;,
</span><span class="cx"> );
</span><span class="cx"> my %directoriesToIgnore = map { $_ =&gt; 1 } @directoriesToIgnoreList;
</span><span class="lines">@@ -98,7 +99,7 @@
</span><span class="cx"> my $isDOMTypeRename = 0;
</span><span class="cx"> my %renames = (
</span><span class="cx">     # Renames go here in the form of:
</span><del>-    &quot;CaseFoldingHash&quot; =&gt; &quot;ASCIICaseInsensitiveHash&quot;,
</del><ins>+    &quot;JSDOMBuild&quot; =&gt; &quot;JSDOMConvert&quot;,
</ins><span class="cx"> );
</span><span class="cx"> 
</span><span class="cx"> my %renamesContemplatedForTheFuture = (
</span></span></pre>
</div>
</div>

</body>
</html>