<!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>[204679] 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/204679">204679</a></dd>
<dt>Author</dt> <dd>weinig@apple.com</dd>
<dt>Date</dt> <dd>2016-08-20 07:44:52 -0700 (Sat, 20 Aug 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Location.ancestorOrigins should return a FrozenArray&lt;USVString&gt;
https://bugs.webkit.org/show_bug.cgi?id=161018

Reviewed by Ryosuke Niwa and Chris Dumez.

Source/JavaScriptCore:

* runtime/ObjectConstructor.h:
(JSC::objectConstructorFreeze):
Export objectConstructorFreeze so it can be used to freeze DOM FrozenArrays.

Source/WebCore:

Updated tests: fast/dom/Window/Location/ancestor-origins.html
               fast/dom/indexed-getters-returning-string.html

* Modules/indexeddb/IDBDatabase.cpp:
(WebCore::IDBDatabase::createObjectStore):
(WebCore::IDBDatabase::transaction):
(WebCore::IDBDatabase::deleteObjectStore):
* Modules/indexeddb/IDBDatabase.h:
Remove unused ScriptExecutionContext parameter.

* Modules/indexeddb/IDBDatabase.idl:
There is no need for a custom implementation anymore.

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
Remove JSDOMStringListCustom.cpp, which is no longer needed.

* bindings/js/JSDOMBinding.cpp:
(WebCore::jsArray): Deleted.
Remove overload of jsArray that took a DOMStringList.

* bindings/js/JSDOMBinding.h:
(WebCore::jsFrozenArray):
Add jsFrozenArray which returns an JSArray which has had the moral 
equivalent of Object.freeze() called on it. This follows 
http://heycam.github.io/webidl/#es-frozen-array.

* bindings/js/JSDOMStringListCustom.cpp:
Removed.

* bindings/js/JSIDBDatabaseCustom.cpp:
(WebCore::JSIDBDatabase::transaction): Deleted.
Remove no longer necessary custom implementation of transaction.

* bindings/scripts/CodeGenerator.pm:
(IsRefPtrType):
(IsSVGAnimatedType):
(IsSequenceType):
(GetSequenceType):
(IsFrozenArrayType):
(GetFrozenArrayInnerType):
* bindings/scripts/CodeGeneratorJS.pm:
(AreTypesDistinguishableForOverloadResolution):
(GenerateOverloadedFunctionOrConstructor):
(GetNativeType):
(GetNativeVectorInnerType):
(GetNativeTypeForCallbacks):
(JSValueToNative):
(NativeToJSValue):
* bindings/scripts/IDLParser.pm:
(parseNonAnyType):
Add support for FrozenArray, closely matching the sequence code.

* bindings/scripts/test/JS/JSTestCallback.cpp:
* bindings/scripts/test/JS/JSTestCallback.h:
* bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
* bindings/scripts/test/JS/JSTestCallbackFunction.h:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
Updated bindings test results.

* dom/DOMStringList.idl:
Remove JSCustomToNativeObject, which is no longer needed.

* inspector/InspectorIndexedDBAgent.cpp:
Update calls to IDBDatabase::transaction.

* page/Location.cpp:
(WebCore::Location::ancestorOrigins):
* page/Location.h:
Change ancestorOrigins to return a Vector&lt;String&gt; rather than
a DOMStringList.

* page/Location.idl:
Change ancestorOrigins to return a FrozenArray&lt;USVString&gt;, matching
the HTML5 spec.

LayoutTests:

Update existing tests to account for the change in type of Location.ancestorOrigins.

* fast/dom/Window/Location/ancestor-origins-expected.txt:
* fast/dom/Window/Location/ancestor-origins.html:
* fast/dom/indexed-getters-returning-string-expected.txt:
* fast/dom/indexed-getters-returning-string.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomWindowLocationancestororiginsexpectedtxt">trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomWindowLocationancestororiginshtml">trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins.html</a></li>
<li><a href="#trunkLayoutTestsfastdomindexedgettersreturningstringexpectedtxt">trunk/LayoutTests/fast/dom/indexed-getters-returning-string-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomindexedgettersreturningstringhtml">trunk/LayoutTests/fast/dom/indexed-getters-returning-string.html</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeObjectConstructorh">trunk/Source/JavaScriptCore/runtime/ObjectConstructor.h</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBDatabasecpp">trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBDatabaseh">trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBDatabaseidl">trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.idl</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp">trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp</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="#trunkSourceWebCorebindingsjsJSIDBDatabaseCustomcpp">trunk/Source/WebCore/bindings/js/JSIDBDatabaseCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorGObjectpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLParserpm">trunk/Source/WebCore/bindings/scripts/IDLParser.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackFunctioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackFunctionh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDOMStringListidl">trunk/Source/WebCore/dom/DOMStringList.idl</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorIndexedDBAgentcpp">trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp</a></li>
<li><a href="#trunkSourceWebCorepageLocationcpp">trunk/Source/WebCore/page/Location.cpp</a></li>
<li><a href="#trunkSourceWebCorepageLocationh">trunk/Source/WebCore/page/Location.h</a></li>
<li><a href="#trunkSourceWebCorepageLocationidl">trunk/Source/WebCore/page/Location.idl</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMStringListCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMStringListCustom.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/LayoutTests/ChangeLog        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-08-19  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Location.ancestorOrigins should return a FrozenArray&lt;USVString&gt;
+        https://bugs.webkit.org/show_bug.cgi?id=161018
+
+        Reviewed by Ryosuke Niwa and Chris Dumez.
+
+        Update existing tests to account for the change in type of Location.ancestorOrigins.
+
+        * fast/dom/Window/Location/ancestor-origins-expected.txt:
+        * fast/dom/Window/Location/ancestor-origins.html:
+        * fast/dom/indexed-getters-returning-string-expected.txt:
+        * fast/dom/indexed-getters-returning-string.html:
+
</ins><span class="cx"> 2016-08-19  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement preferLowPowerToHighPerformance for WebGL
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomWindowLocationancestororiginsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins-expected.txt (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins-expected.txt        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins-expected.txt        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,7 +1,16 @@
</span><del>-ancestorOrigins.length = 0 
</del><ins>+Test the Location object's ancestorOrigins property.
</ins><span class="cx"> 
</span><del>---------
-Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
---------
-ancestorOrigins.length = 1
-ancestorOrigins[0] = file://
</del><ins>+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS window.location.ancestorOrigins is an instance of Array
+PASS window.location.ancestorOrigins.length is 0
+PASS Object.isFrozen(window.location.ancestorOrigins) is true
+PASS window.location.ancestorOrigins === window.location.ancestorOrigins is true
+PASS subframeOrigins is an instance of Array
+PASS subframeOrigins.length is 1
+PASS subframeOrigins[0] is 'file://'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastdomWindowLocationancestororiginshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins.html (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins.html        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/LayoutTests/fast/dom/Window/Location/ancestor-origins.html        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,16 +1,36 @@
</span><ins>+&lt;head&gt;
+    &lt;script src=&quot;../../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;resources/location-tests-functions.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+
</ins><span class="cx"> &lt;script&gt;
</span><del>-if (window.testRunner) {
-    testRunner.dumpAsText();
-    testRunner.dumpChildFramesAsText();
</del><ins>+
+self.jsTestIsAsync = true;
+
+description(&quot;Test the Location object's ancestorOrigins property.&quot;)
+
+shouldBeType(&quot;window.location.ancestorOrigins&quot;, &quot;Array&quot;);
+shouldBe(&quot;window.location.ancestorOrigins.length&quot;, &quot;0&quot;);
+shouldBeTrue(&quot;Object.isFrozen(window.location.ancestorOrigins)&quot;);
+shouldBeTrue(&quot;window.location.ancestorOrigins === window.location.ancestorOrigins&quot;);
+
+var subframeOrigins;
+
+window.onmessage = function(event)
+{
+    subframeOrigins = event.data;
+
+    shouldBeType(&quot;subframeOrigins&quot;, &quot;Array&quot;);
+    shouldBe(&quot;subframeOrigins.length&quot;, &quot;1&quot;);
+    shouldBe(&quot;subframeOrigins[0]&quot;, &quot;'file://'&quot;);
+
+    finishJSTest();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-var origins = location.ancestorOrigins;
-document.write('ancestorOrigins.length = ' + origins.length);
</del><span class="cx"> &lt;/script&gt;
</span><span class="cx"> &lt;iframe srcdoc=&quot;
</span><span class="cx">   &lt;script&gt;
</span><del>-  var origins = location.ancestorOrigins;
-  document.write('ancestorOrigins.length = ' + origins.length + '&lt;br&gt;');
-  document.write('ancestorOrigins[0] = ' + origins[0]);
</del><ins>+    top.postMessage(location.ancestorOrigins, '*')
</ins><span class="cx">   &lt;/script&gt;
</span><span class="cx"> &quot;&gt;&lt;/iframe&gt;
</span><ins>+&lt;script src=&quot;../../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastdomindexedgettersreturningstringexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/indexed-getters-returning-string-expected.txt (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/indexed-getters-returning-string-expected.txt        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/LayoutTests/fast/dom/indexed-getters-returning-string-expected.txt        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -7,9 +7,6 @@
</span><span class="cx"> DOMTokenList.item()
</span><span class="cx"> PASS document.body.classList.item(666) is null
</span><span class="cx"> PASS document.body.classList[666] is undefined.
</span><del>-DOMStringList.item()
-PASS location.ancestorOrigins.item(666) is null
-PASS location.ancestorOrigins[666] is undefined.
</del><span class="cx"> Storage.getItem()
</span><span class="cx"> PASS localStorage.getItem(666) is null
</span><span class="cx"> PASS localStorage[666] is undefined.
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomindexedgettersreturningstringhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/indexed-getters-returning-string.html (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/indexed-getters-returning-string.html        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/LayoutTests/fast/dom/indexed-getters-returning-string.html        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -11,9 +11,6 @@
</span><span class="cx"> debug(&quot;DOMTokenList.item()&quot;);
</span><span class="cx"> shouldBeNull(&quot;document.body.classList.item(666)&quot;);
</span><span class="cx"> shouldBeUndefined(&quot;document.body.classList[666]&quot;);
</span><del>-debug(&quot;DOMStringList.item()&quot;);
-shouldBeNull(&quot;location.ancestorOrigins.item(666)&quot;);
-shouldBeUndefined(&quot;location.ancestorOrigins[666]&quot;);
</del><span class="cx"> debug(&quot;Storage.getItem()&quot;);
</span><span class="cx"> shouldBeNull(&quot;localStorage.getItem(666)&quot;);
</span><span class="cx"> shouldBeUndefined(&quot;localStorage[666]&quot;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-08-19  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Location.ancestorOrigins should return a FrozenArray&lt;USVString&gt;
+        https://bugs.webkit.org/show_bug.cgi?id=161018
+
+        Reviewed by Ryosuke Niwa and Chris Dumez.
+
+        * runtime/ObjectConstructor.h:
+        (JSC::objectConstructorFreeze):
+        Export objectConstructorFreeze so it can be used to freeze DOM FrozenArrays.
+
</ins><span class="cx"> 2016-08-19  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] ArithSqrt should work with any argument type
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeObjectConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ObjectConstructor.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ObjectConstructor.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/JavaScriptCore/runtime/ObjectConstructor.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-JSObject* objectConstructorFreeze(ExecState*, JSObject*);
</del><ins>+JS_EXPORT_PRIVATE JSObject* objectConstructorFreeze(ExecState*, JSObject*);
</ins><span class="cx"> JSValue objectConstructorGetPrototypeOf(ExecState*, JSObject*);
</span><span class="cx"> JSValue objectConstructorGetOwnPropertyDescriptor(ExecState*, JSObject*, const Identifier&amp;);
</span><span class="cx"> JSValue objectConstructorGetOwnPropertyDescriptors(ExecState*, JSObject*);
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1150,7 +1150,6 @@
</span><span class="cx">     bindings/js/JSDOMPluginArrayCustom.cpp
</span><span class="cx">     bindings/js/JSDOMPluginCustom.cpp
</span><span class="cx">     bindings/js/JSDOMPromise.cpp
</span><del>-    bindings/js/JSDOMStringListCustom.cpp
</del><span class="cx">     bindings/js/JSDOMStringMapCustom.cpp
</span><span class="cx">     bindings/js/JSDOMWindowBase.cpp
</span><span class="cx">     bindings/js/JSDOMWindowCustom.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/ChangeLog        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,3 +1,87 @@
</span><ins>+2016-08-19  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Location.ancestorOrigins should return a FrozenArray&lt;USVString&gt;
+        https://bugs.webkit.org/show_bug.cgi?id=161018
+
+        Reviewed by Ryosuke Niwa and Chris Dumez.
+
+        Updated tests: fast/dom/Window/Location/ancestor-origins.html
+                       fast/dom/indexed-getters-returning-string.html
+
+        * Modules/indexeddb/IDBDatabase.cpp:
+        (WebCore::IDBDatabase::createObjectStore):
+        (WebCore::IDBDatabase::transaction):
+        (WebCore::IDBDatabase::deleteObjectStore):
+        * Modules/indexeddb/IDBDatabase.h:
+        Remove unused ScriptExecutionContext parameter.
+
+        * Modules/indexeddb/IDBDatabase.idl:
+        There is no need for a custom implementation anymore.
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        Remove JSDOMStringListCustom.cpp, which is no longer needed.
+
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::jsArray): Deleted.
+        Remove overload of jsArray that took a DOMStringList.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::jsFrozenArray):
+        Add jsFrozenArray which returns an JSArray which has had the moral 
+        equivalent of Object.freeze() called on it. This follows 
+        http://heycam.github.io/webidl/#es-frozen-array.
+
+        * bindings/js/JSDOMStringListCustom.cpp:
+        Removed.
+
+        * bindings/js/JSIDBDatabaseCustom.cpp:
+        (WebCore::JSIDBDatabase::transaction): Deleted.
+        Remove no longer necessary custom implementation of transaction.
+
+        * bindings/scripts/CodeGenerator.pm:
+        (IsRefPtrType):
+        (IsSVGAnimatedType):
+        (IsSequenceType):
+        (GetSequenceType):
+        (IsFrozenArrayType):
+        (GetFrozenArrayInnerType):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (AreTypesDistinguishableForOverloadResolution):
+        (GenerateOverloadedFunctionOrConstructor):
+        (GetNativeType):
+        (GetNativeVectorInnerType):
+        (GetNativeTypeForCallbacks):
+        (JSValueToNative):
+        (NativeToJSValue):
+        * bindings/scripts/IDLParser.pm:
+        (parseNonAnyType):
+        Add support for FrozenArray, closely matching the sequence code.
+
+        * bindings/scripts/test/JS/JSTestCallback.cpp:
+        * bindings/scripts/test/JS/JSTestCallback.h:
+        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
+        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        Updated bindings test results.
+
+        * dom/DOMStringList.idl:
+        Remove JSCustomToNativeObject, which is no longer needed.
+
+        * inspector/InspectorIndexedDBAgent.cpp:
+        Update calls to IDBDatabase::transaction.
+
+        * page/Location.cpp:
+        (WebCore::Location::ancestorOrigins):
+        * page/Location.h:
+        Change ancestorOrigins to return a Vector&lt;String&gt; rather than
+        a DOMStringList.
+
+        * page/Location.idl:
+        Change ancestorOrigins to return a FrozenArray&lt;USVString&gt;, matching
+        the HTML5 spec.
+
</ins><span class="cx"> 2016-08-19  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Mark CanvasPath operations' parameters as mandatory when they should be
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">     return adoptRef(&amp;objectStore.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;WebCore::IDBTransaction&gt; IDBDatabase::transaction(ScriptExecutionContext*, const Vector&lt;String&gt;&amp; objectStores, const String&amp; modeString, ExceptionCodeWithMessage&amp; ec)
</del><ins>+RefPtr&lt;WebCore::IDBTransaction&gt; IDBDatabase::transaction(const Vector&lt;String&gt;&amp; objectStores, const String&amp; modeString, ExceptionCodeWithMessage&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::transaction&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -211,13 +211,13 @@
</span><span class="cx">     return adoptRef(&amp;transaction.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;WebCore::IDBTransaction&gt; IDBDatabase::transaction(ScriptExecutionContext* context, const String&amp; objectStore, const String&amp; mode, ExceptionCodeWithMessage&amp; ec)
</del><ins>+RefPtr&lt;WebCore::IDBTransaction&gt; IDBDatabase::transaction(const String&amp; objectStore, const String&amp; mode, ExceptionCodeWithMessage&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(currentThread() == originThreadID());
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; objectStores(1);
</span><span class="cx">     objectStores[0] = objectStore;
</span><del>-    return transaction(context, objectStores, mode, ec);
</del><ins>+    return transaction(objectStores, mode, ec);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBDatabase::deleteObjectStore(const String&amp; objectStoreName, ExceptionCodeWithMessage&amp; ec)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -57,8 +57,8 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;IDBObjectStore&gt; createObjectStore(const String&amp; name, const Dictionary&amp;, ExceptionCodeWithMessage&amp;);
</span><span class="cx">     RefPtr&lt;IDBObjectStore&gt; createObjectStore(const String&amp; name, const IDBKeyPath&amp;, bool autoIncrement, ExceptionCodeWithMessage&amp;);
</span><del>-    RefPtr&lt;IDBTransaction&gt; transaction(ScriptExecutionContext*, const Vector&lt;String&gt;&amp;, const String&amp; mode, ExceptionCodeWithMessage&amp;);
-    RefPtr&lt;IDBTransaction&gt; transaction(ScriptExecutionContext*, const String&amp;, const String&amp; mode, ExceptionCodeWithMessage&amp;);
</del><ins>+    RefPtr&lt;IDBTransaction&gt; transaction(const Vector&lt;String&gt;&amp;, const String&amp; mode, ExceptionCodeWithMessage&amp;);
+    RefPtr&lt;IDBTransaction&gt; transaction(const String&amp;, const String&amp; mode, ExceptionCodeWithMessage&amp;);
</ins><span class="cx">     void deleteObjectStore(const String&amp; name, ExceptionCodeWithMessage&amp;);
</span><span class="cx">     void close();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabaseidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.idl (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.idl        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.idl        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -36,8 +36,11 @@
</span><span class="cx"> 
</span><span class="cx">     [Custom, RaisesExceptionWithMessage] IDBObjectStore createObjectStore(DOMString name, optional Dictionary options);
</span><span class="cx">     [RaisesExceptionWithMessage] void deleteObjectStore(DOMString name);
</span><del>-    [Custom, RaisesExceptionWithMessage] IDBTransaction transaction(DOMString storeName, optional DOMString mode);
-    [Custom, RaisesExceptionWithMessage] IDBTransaction transaction(sequence&lt;DOMString&gt; storeNames, optional DOMString mode);
</del><ins>+    [RaisesExceptionWithMessage] IDBTransaction transaction(DOMString storeName, optional DOMString mode = &quot;readonly&quot;);
+    [RaisesExceptionWithMessage] IDBTransaction transaction(sequence&lt;DOMString&gt; storeNames, optional DOMString mode = &quot;readonly&quot;);
+    // FIXME: This is not part of the spec, but is needed for compatibility.
+    // See https://github.com/w3c/IndexedDB/issues/85
+    [RaisesExceptionWithMessage] IDBTransaction transaction(DOMStringList storeNames, optional DOMString mode = &quot;readonly&quot;);
</ins><span class="cx">     void close();
</span><span class="cx"> 
</span><span class="cx">     attribute EventHandler onabort;
</span><span class="lines">@@ -44,4 +47,3 @@
</span><span class="cx">     attribute EventHandler onerror;
</span><span class="cx">     attribute EventHandler onversionchange;
</span><span class="cx"> };
</span><del>-
</del></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -3915,7 +3915,6 @@
</span><span class="cx">                 99CC0B6B18BEA1FF006CEBCC /* WebReplayInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = 99CC0B6918BEA1FF006CEBCC /* WebReplayInputs.h */; };
</span><span class="cx">                 99E45A1718A063BE0026D88F /* EventLoopInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A1618A063BE0026D88F /* EventLoopInput.h */; };
</span><span class="cx">                 9A1142041832D135000BB8AD /* ValueToString.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A1142031832D134000BB8AD /* ValueToString.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                9A1B6F97158869C80011A8C4 /* JSDOMStringListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A1B6F96158869C80011A8C4 /* JSDOMStringListCustom.cpp */; };
</del><span class="cx">                 9A528E8317D7F52F00AA9518 /* FloatingObjects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A528E8117D7F52F00AA9518 /* FloatingObjects.cpp */; };
</span><span class="cx">                 9A528E8417D7F52F00AA9518 /* FloatingObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A528E8217D7F52F00AA9518 /* FloatingObjects.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 9AB1F38018E2489A00534743 /* CSSToLengthConversionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AB1F37E18E2489A00534743 /* CSSToLengthConversionData.h */; };
</span><span class="lines">@@ -11491,7 +11490,6 @@
</span><span class="cx">                 99CC0B6918BEA1FF006CEBCC /* WebReplayInputs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebReplayInputs.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 99E45A1618A063BE0026D88F /* EventLoopInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventLoopInput.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9A1142031832D134000BB8AD /* ValueToString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValueToString.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                9A1B6F96158869C80011A8C4 /* JSDOMStringListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMStringListCustom.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 9A528E8117D7F52F00AA9518 /* FloatingObjects.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatingObjects.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9A528E8217D7F52F00AA9518 /* FloatingObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatingObjects.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9AB1F37E18E2489A00534743 /* CSSToLengthConversionData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSToLengthConversionData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -22166,7 +22164,6 @@
</span><span class="cx">                                 A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */,
</span><span class="cx">                                 A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */,
</span><span class="cx">                                 A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */,
</span><del>-                                9A1B6F96158869C80011A8C4 /* JSDOMStringListCustom.cpp */,
</del><span class="cx">                                 BC64649B11D8238C006455B0 /* JSDOMStringMapCustom.cpp */,
</span><span class="cx">                                 BCD9C25E0C17AA67005C90A2 /* JSDOMWindowCustom.cpp */,
</span><span class="cx">                                 652FBBBB0DE27CB60001D386 /* JSDOMWindowCustom.h */,
</span><span class="lines">@@ -29955,7 +29952,6 @@
</span><span class="cx">                                 E172AF8F1811BC3700FBADB9 /* JSDOMPromise.cpp in Sources */,
</span><span class="cx">                                 BC5A86B50C3367E800EEA649 /* JSDOMSelection.cpp in Sources */,
</span><span class="cx">                                 C5137CF211A58378004ADB99 /* JSDOMStringList.cpp in Sources */,
</span><del>-                                9A1B6F97158869C80011A8C4 /* JSDOMStringListCustom.cpp in Sources */,
</del><span class="cx">                                 BC64649711D82349006455B0 /* JSDOMStringMap.cpp in Sources */,
</span><span class="cx">                                 BC64649C11D8238C006455B0 /* JSDOMStringMapCustom.cpp in Sources */,
</span><span class="cx">                                 7694563C1214D97C0007CBAE /* JSDOMTokenList.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -58,7 +58,6 @@
</span><span class="cx"> #include &quot;JSDOMPluginArrayCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSDOMPluginCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSDOMPromise.cpp&quot;
</span><del>-#include &quot;JSDOMStringListCustom.cpp&quot;
</del><span class="cx"> #include &quot;JSDOMStringMapCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSDOMWindowBase.cpp&quot;
</span><span class="cx"> #include &quot;JSDOMWindowCustom.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CachedScript.h&quot;
</span><span class="cx"> #include &quot;DOMConstructorWithDocument.h&quot;
</span><del>-#include &quot;DOMStringList.h&quot;
</del><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;ExceptionCodeDescription.h&quot;
</span><span class="cx"> #include &quot;ExceptionHeaders.h&quot;
</span><span class="lines">@@ -186,16 +185,6 @@
</span><span class="cx">     return static_cast&lt;DateInstance*&gt;(value.toObject(exec))-&gt;internalNumber();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, DOMStringList* stringList)
-{
-    JSC::MarkedArgumentBuffer list;
-    if (stringList) {
-        for (unsigned i = 0; i &lt; stringList-&gt;length(); ++i)
-            list.append(jsStringWithCache(exec, stringList-&gt;item(i)));
-    }
-    return JSC::constructArray(exec, 0, globalObject, list);
-}
-
</del><span class="cx"> void reportException(ExecState* exec, JSValue exceptionValue, CachedScript* cachedScript)
</span><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(exec-&gt;vm().currentThreadIsHoldingAPILock());
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -41,6 +41,7 @@
</span><span class="cx"> #include &lt;runtime/JSCellInlines.h&gt;
</span><span class="cx"> #include &lt;runtime/JSTypedArrays.h&gt;
</span><span class="cx"> #include &lt;runtime/Lookup.h&gt;
</span><ins>+#include &lt;runtime/ObjectConstructor.h&gt;
</ins><span class="cx"> #include &lt;runtime/StructureInlines.h&gt;
</span><span class="cx"> #include &lt;runtime/TypedArrayInlines.h&gt;
</span><span class="cx"> #include &lt;runtime/TypedArrays.h&gt;
</span><span class="lines">@@ -60,7 +61,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class CachedScript;
</span><del>-class DOMStringList;
</del><span class="cx"> class DOMWindow;
</span><span class="cx"> class Frame;
</span><span class="cx"> class URL;
</span><span class="lines">@@ -269,7 +269,7 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T, inlineCapacity&gt;&amp;);
</span><span class="cx"> template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T, inlineCapacity&gt;*);
</span><del>-WEBCORE_EXPORT JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, DOMStringList*);
</del><ins>+template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsFrozenArray(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T, inlineCapacity&gt;&amp;);
</ins><span class="cx"> 
</span><span class="cx"> JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, JSC::JSValue, JSC::JSValue);
</span><span class="cx"> template&lt;typename FirstType, typename SecondType&gt; JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, const FirstType&amp;, const SecondType&amp;);
</span><span class="lines">@@ -631,6 +631,20 @@
</span><span class="cx">     return jsArray(exec, globalObject, *vector);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;typename T, size_t inlineCapacity&gt; JSC::JSValue jsFrozenArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;T, inlineCapacity&gt;&amp; vector)
+{
+    JSC::MarkedArgumentBuffer list;
+    for (auto&amp; element : vector) {
+        list.append(JSValueTraits&lt;T&gt;::arrayJSValue(exec, globalObject, element));
+        if (UNLIKELY(exec-&gt;hadException()))
+            return JSC::jsUndefined();
+    }
+    auto* array = JSC::constructArray(exec, nullptr, globalObject, list);
+    if (UNLIKELY(exec-&gt;hadException()))
+        return JSC::jsUndefined();
+    return JSC::objectConstructorFreeze(exec, array);
+}
+
</ins><span class="cx"> inline JSC::JSValue jsPair(JSC::ExecState&amp; state, JSDOMGlobalObject* globalObject, JSC::JSValue value1, JSC::JSValue value2)
</span><span class="cx"> {
</span><span class="cx">     JSC::MarkedArgumentBuffer args;
</span><span class="lines">@@ -668,7 +682,7 @@
</span><span class="cx">     static inline bool nativeValue(JSC::ExecState&amp; exec, JSC::JSValue jsValue, String&amp; indexedValue)
</span><span class="cx">     {
</span><span class="cx">         indexedValue = jsValue.toWTFString(&amp;exec);
</span><del>-        return true;
</del><ins>+        return !exec.hadException();
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMStringListCustomcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/js/JSDOMStringListCustom.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMStringListCustom.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/js/JSDOMStringListCustom.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- *  Copyright (C) 2012 Research In Motion Inc. All rights reserved.
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include &quot;config.h&quot;
-#include &quot;JSDOMStringList.h&quot;
-
-#include &quot;DOMWrapperWorld.h&quot;
-#include &lt;runtime/JSCJSValueInlines.h&gt;
-
-using namespace JSC;
-
-namespace WebCore {
-
-RefPtr&lt;DOMStringList&gt; JSDOMStringList::toWrapped(ExecState&amp; state, JSValue value)
-{
-    if (value.inherits(JSDOMStringList::info()))
-        return &amp;jsCast&lt;JSDOMStringList*&gt;(asObject(value))-&gt;wrapped();
-
-    if (!isJSArray(value))
-        return nullptr;
-
-    JSArray* array = asArray(value);
-    RefPtr&lt;DOMStringList&gt; stringList = DOMStringList::create();
-    for (unsigned i = 0; i &lt; array-&gt;length(); ++i)
-        stringList-&gt;append(array-&gt;getIndex(&amp;state, i).toString(&amp;state)-&gt;value(&amp;state));
-
-    return stringList;
-}
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSIDBDatabaseCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSIDBDatabaseCustom.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSIDBDatabaseCustom.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/js/JSIDBDatabaseCustom.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -82,45 +82,6 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue JSIDBDatabase::transaction(ExecState&amp; exec)
-{
-    size_t argsCount = std::min&lt;size_t&gt;(2, exec.argumentCount());
-    if (argsCount &lt; 1)
-        return exec.vm().throwException(&amp;exec, createNotEnoughArgumentsError(&amp;exec));
-
-    auto* scriptContext = jsCast&lt;JSDOMGlobalObject*&gt;(exec.lexicalGlobalObject())-&gt;scriptExecutionContext();
-    if (!scriptContext)
-        return jsUndefined();
-
-    Vector&lt;String&gt; scope;
-    JSValue scopeArg(exec.argument(0));
-    auto domStringList = JSDOMStringList::toWrapped(exec, scopeArg);
-    if (exec.hadException())
-        return jsUndefined();
-
-    if (domStringList)
-        scope = *domStringList;
-    else {
-        scope.append(scopeArg.toString(&amp;exec)-&gt;value(&amp;exec));
-        if (exec.hadException())
-            return jsUndefined();
-    }
-
-    String mode;
-    if (argsCount == 2) {
-        JSValue modeArg(exec.argument(1));
-        mode = modeArg.toString(&amp;exec)-&gt;value(&amp;exec);
-
-        if (exec.hadException())
-            return jsUndefined();
-    }
-
-    ExceptionCodeWithMessage ec;
-    JSValue result = toJS(&amp;exec, globalObject(), wrapped().transaction(scriptContext, scope, mode, ec));
-    setDOMException(&amp;exec, ec);
-    return result;
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-}
-
</del><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -471,7 +471,7 @@
</span><span class="cx">     return 0 if $object-&gt;IsPrimitiveType($type);
</span><span class="cx">     return 0 if $object-&gt;IsDictionaryType($type);
</span><span class="cx">     return 0 if $object-&gt;IsEnumType($type);
</span><del>-    return 0 if $object-&gt;GetSequenceType($type);
</del><ins>+    return 0 if $object-&gt;IsSequenceOrFrozenArrayType($type);
</ins><span class="cx">     return 0 if $type eq &quot;DOMString&quot; or $type eq &quot;USVString&quot;;
</span><span class="cx">     return 0 if $type eq &quot;any&quot;;
</span><span class="cx"> 
</span><span class="lines">@@ -517,15 +517,58 @@
</span><span class="cx">     return $type =~ /^SVGAnimated/;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub GetSequenceType
</del><ins>+sub IsSequenceType
</ins><span class="cx"> {
</span><span class="cx">     my $object = shift;
</span><span class="cx">     my $type = shift;
</span><span class="cx"> 
</span><ins>+    return $type =~ /^sequence&lt;/;
+}
+
+sub GetSequenceInnerType
+{
+    my $object = shift;
+    my $type = shift;
+
</ins><span class="cx">     return $1 if $type =~ /^sequence&lt;([\w\d_\s]+)&gt;.*/;
</span><span class="cx">     return &quot;&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub IsFrozenArrayType
+{
+    my $object = shift;
+    my $type = shift;
+
+    return $type =~ /^FrozenArray&lt;/;
+}
+
+sub GetFrozenArrayInnerType
+{
+    my $object = shift;
+    my $type = shift;
+
+    return $1 if $type =~ /^FrozenArray&lt;([\w\d_\s]+)&gt;.*/;
+    return &quot;&quot;;
+}
+
+sub IsSequenceOrFrozenArrayType
+{
+    my $object = shift;
+    my $type = shift;
+
+    return $object-&gt;IsSequenceType($type) || $object-&gt;IsFrozenArrayType($type);
+}
+
+sub GetSequenceOrFrozenArrayInnerType
+{
+    my $object = shift;
+    my $type = shift;
+
+    return $object-&gt;GetSequenceInnerType($type) if $object-&gt;IsSequenceType($type);
+    return $object-&gt;GetFrozenArrayInnerType($type) if $object-&gt;IsFrozenArrayType($type);
+    return &quot;&quot;;
+}
+
</ins><span class="cx"> # These match WK_lcfirst and WK_ucfirst defined in builtins_generator.py.
</span><span class="cx"> # Uppercase the first letter while respecting WebKit style guidelines.
</span><span class="cx"> # E.g., xmlEncoding becomes XMLEncoding, but xmlllang becomes Xmllang.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorGObjectpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -244,7 +244,7 @@
</span><span class="cx"> 
</span><span class="cx">     return 1 if $attribute-&gt;isStatic;
</span><span class="cx">     return 1 if $codeGenerator-&gt;IsTypedArrayType($propType);
</span><del>-    return 1 if $codeGenerator-&gt;GetSequenceType($propType);
</del><ins>+    return 1 if $codeGenerator-&gt;IsSequenceOrFrozenArrayType($propType);
</ins><span class="cx"> 
</span><span class="cx">     if ($codeGenerator-&gt;IsEnumType($propType)) {
</span><span class="cx">         return 1;
</span><span class="lines">@@ -320,7 +320,7 @@
</span><span class="cx">         return 1 if $param-&gt;extendedAttributes-&gt;{&quot;Clamp&quot;};
</span><span class="cx">         return 1 if $param-&gt;type eq &quot;MediaQueryListListener&quot;;
</span><span class="cx">         return 1 if $param-&gt;type eq &quot;EventListener&quot;;
</span><del>-        return 1 if $codeGenerator-&gt;GetSequenceType($param-&gt;type);
</del><ins>+        return 1 if $codeGenerator-&gt;IsSequenceOrFrozenArrayType($param-&gt;type);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     # This is for DataTransferItemList.idl add(File) method
</span><span class="lines">@@ -361,7 +361,7 @@
</span><span class="cx">         return 1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if ($codeGenerator-&gt;GetSequenceType($functionReturnType)) {
</del><ins>+    if ($codeGenerator-&gt;IsSequenceOrFrozenArrayType($functionReturnType)) {
</ins><span class="cx">         return 1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1103,7 +1103,7 @@
</span><span class="cx">     my @callImplParams;
</span><span class="cx">     foreach my $param (@{$function-&gt;parameters}) {
</span><span class="cx">         my $paramIDLType = $param-&gt;type;
</span><del>-        my $sequenceType = $codeGenerator-&gt;GetSequenceType($paramIDLType);
</del><ins>+        my $sequenceType = $codeGenerator-&gt;GetSequenceInnerType($paramIDLType);
</ins><span class="cx">         $paramIDLType = $sequenceType if $sequenceType ne &quot;&quot;;
</span><span class="cx">         my $paramType = GetGlibTypeName($paramIDLType);
</span><span class="cx">         my $const = $paramType eq &quot;gchar*&quot; ? &quot;const &quot; : &quot;&quot;;
</span><span class="lines">@@ -1175,7 +1175,7 @@
</span><span class="cx">             last;
</span><span class="cx">         }
</span><span class="cx">         my $paramIDLType = $param-&gt;type;
</span><del>-        my $sequenceType = $codeGenerator-&gt;GetSequenceType($paramIDLType);
</del><ins>+        my $sequenceType = $codeGenerator-&gt;GetSequenceInnerType($paramIDLType);
</ins><span class="cx">         $paramIDLType = $sequenceType if $sequenceType ne &quot;&quot;;
</span><span class="cx">         my $paramType = GetGlibTypeName($paramIDLType);
</span><span class="cx">         # $paramType can have a trailing * in some cases
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -202,11 +202,11 @@
</span><span class="cx">     # When we're finished with the one-file-per-class reorganization, we won't need these special cases.
</span><span class="cx">     if ($isCallback &amp;&amp; $codeGenerator-&gt;IsWrapperType($type)) {
</span><span class="cx">         $includesRef-&gt;{&quot;JS${type}.h&quot;} = 1;
</span><del>-    } elsif ($codeGenerator-&gt;GetSequenceType($type)) {
-        my $sequenceType = $codeGenerator-&gt;GetSequenceType($type);
-        if ($codeGenerator-&gt;IsRefPtrType($sequenceType)) {
-            $includesRef-&gt;{&quot;JS${sequenceType}.h&quot;} = 1;
-            $includesRef-&gt;{&quot;${sequenceType}.h&quot;} = 1;
</del><ins>+    } elsif ($codeGenerator-&gt;IsSequenceOrFrozenArrayType($type)) {
+        my $innerType = $codeGenerator-&gt;GetSequenceOrFrozenArrayInnerType($type);
+        if ($codeGenerator-&gt;IsRefPtrType($innerType)) {
+            $includesRef-&gt;{&quot;JS${innerType}.h&quot;} = 1;
+            $includesRef-&gt;{&quot;${innerType}.h&quot;} = 1;
</ins><span class="cx">         }
</span><span class="cx">         $includesRef-&gt;{&quot;&lt;runtime/JSArray.h&gt;&quot;} = 1;
</span><span class="cx">     } else {
</span><span class="lines">@@ -1765,7 +1765,7 @@
</span><span class="cx">     return 0 if &amp;$isDictionary($typeA) &amp;&amp; &amp;$isDictionary($typeB);
</span><span class="cx">     return 0 if $codeGenerator-&gt;IsCallbackInterface($typeA) &amp;&amp; $codeGenerator-&gt;IsCallbackInterface($typeB);
</span><span class="cx">     return 0 if &amp;$isCallbackFunctionOrDictionary($typeA) &amp;&amp; &amp;$isCallbackFunctionOrDictionary($typeB);
</span><del>-    return 0 if $codeGenerator-&gt;GetSequenceType($typeA) &amp;&amp; $codeGenerator-&gt;GetSequenceType($typeB);
</del><ins>+    return 0 if $codeGenerator-&gt;IsSequenceOrFrozenArrayType($typeA) &amp;&amp; $codeGenerator-&gt;IsSequenceOrFrozenArrayType($typeB);
</ins><span class="cx">     # FIXME: return 0 if typeA and typeB are both exception types.
</span><span class="cx">     return 1;
</span><span class="cx"> }
</span><span class="lines">@@ -1854,9 +1854,9 @@
</span><span class="cx">         my ($type, $optionality, $isNullable) = @_;
</span><span class="cx">         return $type eq &quot;object&quot; || $codeGenerator-&gt;IsFunctionOnlyCallbackInterface($type);
</span><span class="cx">     };
</span><del>-    my $isSequenceParameter = sub {
</del><ins>+    my $isSequenceOrFrozenArrayParameter = sub {
</ins><span class="cx">         my ($type, $optionality, $isNullable) = @_;
</span><del>-        return $codeGenerator-&gt;GetSequenceType($type);
</del><ins>+        return $codeGenerator-&gt;IsSequenceOrFrozenArrayType($type);
</ins><span class="cx">     };
</span><span class="cx">     my $isDictionaryOrObjectOrCallbackInterfaceParameter = sub {
</span><span class="cx">         my ($type, $optionality, $isNullable) = @_;
</span><span class="lines">@@ -1930,7 +1930,7 @@
</span><span class="cx">             &amp;$generateOverloadCallIfNecessary($overload, &quot;distinguishingArg.isFunction()&quot;);
</span><span class="cx"> 
</span><span class="cx">             # FIXME: Avoid invoking GetMethod(object, Symbol.iterator) again in toNativeArray and toRefPtrNativeArray.
</span><del>-            $overload = GetOverloadThatMatches($S, $d, \&amp;$isSequenceParameter);
</del><ins>+            $overload = GetOverloadThatMatches($S, $d, \&amp;$isSequenceOrFrozenArrayParameter);
</ins><span class="cx">             &amp;$generateOverloadCallIfNecessary($overload, &quot;hasIteratorMethod(*state, distinguishingArg)&quot;);
</span><span class="cx"> 
</span><span class="cx">             $overload = GetOverloadThatMatches($S, $d, \&amp;$isDictionaryOrObjectOrCallbackInterfaceParameter);
</span><span class="lines">@@ -4497,7 +4497,6 @@
</span><span class="cx"> my %nativeType = (
</span><span class="cx">     &quot;DOMString&quot; =&gt; &quot;String&quot;,
</span><span class="cx">     &quot;USVString&quot; =&gt; &quot;String&quot;,
</span><del>-    &quot;DOMStringList&quot; =&gt; &quot;RefPtr&lt;DOMStringList&gt;&quot;,
</del><span class="cx">     &quot;DOMTimeStamp&quot; =&gt; &quot;DOMTimeStamp&quot;,
</span><span class="cx">     &quot;Date&quot; =&gt; &quot;double&quot;,
</span><span class="cx">     &quot;Dictionary&quot; =&gt; &quot;Dictionary&quot;,
</span><span class="lines">@@ -4534,8 +4533,7 @@
</span><span class="cx"> 
</span><span class="cx">     return &quot;RefPtr&lt;${type}&gt;&quot; if $codeGenerator-&gt;IsTypedArrayType($type) and $type ne &quot;ArrayBuffer&quot;;
</span><span class="cx"> 
</span><del>-    my $sequenceType = $codeGenerator-&gt;GetSequenceType($type);
-    return &quot;Vector&lt;&quot; . GetNativeVectorInnerType($sequenceType) . &quot;&gt;&quot; if $sequenceType;
</del><ins>+    return &quot;Vector&lt;&quot; . GetNativeVectorInnerType($codeGenerator-&gt;GetSequenceOrFrozenArrayInnerType($type)) . &quot;&gt;&quot; if $codeGenerator-&gt;IsSequenceOrFrozenArrayType($type);
</ins><span class="cx"> 
</span><span class="cx">     return &quot;${type}*&quot;;
</span><span class="cx"> }
</span><span class="lines">@@ -4551,10 +4549,10 @@
</span><span class="cx"> 
</span><span class="cx"> sub GetNativeVectorInnerType
</span><span class="cx"> {
</span><del>-    my $sequenceType = shift;
</del><ins>+    my $innerType = shift;
</ins><span class="cx"> 
</span><del>-    return $nativeType{$sequenceType} if exists $nativeType{$sequenceType};
-    return &quot;RefPtr&lt;${sequenceType}&gt;&quot;;
</del><ins>+    return $nativeType{$innerType} if exists $nativeType{$innerType};
+    return &quot;RefPtr&lt;$innerType&gt;&quot;;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GetNativeTypeForCallbacks
</span><span class="lines">@@ -4562,7 +4560,6 @@
</span><span class="cx">     my ($interface, $type) = @_;
</span><span class="cx"> 
</span><span class="cx">     return &quot;RefPtr&lt;SerializedScriptValue&gt;&amp;&amp;&quot; if $type eq &quot;SerializedScriptValue&quot;;
</span><del>-    return &quot;RefPtr&lt;DOMStringList&gt;&amp;&amp;&quot; if $type eq &quot;DOMStringList&quot;;
</del><span class="cx">     return &quot;const String&amp;&quot; if $codeGenerator-&gt;IsStringType($type);
</span><span class="cx">     return GetNativeType($interface, $type);
</span><span class="cx"> }
</span><span class="lines">@@ -4666,13 +4663,13 @@
</span><span class="cx">         return (&quot;Dictionary(state, $value)&quot;, 0);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    my $sequenceType = $codeGenerator-&gt;GetSequenceType($type);
-    if ($sequenceType) {
-        if ($codeGenerator-&gt;IsRefPtrType($sequenceType)) {
-            AddToImplIncludes(&quot;JS${sequenceType}.h&quot;);
-            return (&quot;toRefPtrNativeArray&lt;${sequenceType}, JS${sequenceType}&gt;(*state, $value)&quot;, 1);
</del><ins>+    if ($codeGenerator-&gt;IsSequenceOrFrozenArrayType($type)) {
+        my $innerType = $codeGenerator-&gt;GetSequenceOrFrozenArrayInnerType($type);
+        if ($codeGenerator-&gt;IsRefPtrType($innerType)) {
+            AddToImplIncludes(&quot;JS${innerType}.h&quot;);
+            return (&quot;toRefPtrNativeArray&lt;${innerType}, JS${innerType}&gt;(*state, $value)&quot;, 1);
</ins><span class="cx">         }
</span><del>-        return (&quot;toNativeArray&lt;&quot; . GetNativeVectorInnerType($sequenceType) . &quot;&gt;(*state, $value)&quot;, 1);
</del><ins>+        return (&quot;toNativeArray&lt;&quot; . GetNativeVectorInnerType($innerType) . &quot;&gt;(*state, $value)&quot;, 1);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return ($value, 0) if $type eq &quot;any&quot;;
</span><span class="lines">@@ -4742,14 +4739,15 @@
</span><span class="cx">         AddToImplIncludes(&quot;&lt;runtime/JSString.h&gt;&quot;, $conditional);
</span><span class="cx">         return &quot;jsStringWithCache(state, $value)&quot;;
</span><span class="cx">     }
</span><del>-    
-    my $sequenceType = $codeGenerator-&gt;GetSequenceType($type);
-    if ($sequenceType) {
-        if ($codeGenerator-&gt;IsRefPtrType($sequenceType)) {
-            AddToImplIncludes(&quot;JS${sequenceType}.h&quot;, $conditional);
</del><ins>+
+    if ($codeGenerator-&gt;IsSequenceOrFrozenArrayType($type)) {
+        my $innerType = $codeGenerator-&gt;GetSequenceOrFrozenArrayInnerType($type);
+        if ($codeGenerator-&gt;IsRefPtrType($innerType)) {
+            AddToImplIncludes(&quot;JS${innerType}.h&quot;, $conditional);
</ins><span class="cx">         }
</span><del>-        AddToImplIncludes(&quot;&lt;runtime/JSArray.h&gt;&quot;, $conditional);
-        return &quot;jsArray(state, $globalObject, $value)&quot;;
</del><ins>+        
+        return &quot;jsArray(state, $globalObject, $value)&quot; if $codeGenerator-&gt;IsSequenceType($type);
+        return &quot;jsFrozenArray(state, $globalObject, $value)&quot; if $codeGenerator-&gt;IsFrozenArrayType($type);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if ($type eq &quot;any&quot;) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsIDLParserpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/IDLParser.pm (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/IDLParser.pm        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/IDLParser.pm        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -2019,6 +2019,21 @@
</span><span class="cx"> 
</span><span class="cx">         return $type;
</span><span class="cx">     }
</span><ins>+    if ($next-&gt;value() eq &quot;FrozenArray&quot;) {
+        $self-&gt;assertTokenValue($self-&gt;getToken(), &quot;FrozenArray&quot;, __LINE__);
+        $self-&gt;assertTokenValue($self-&gt;getToken(), &quot;&lt;&quot;, __LINE__);
+
+        my $subtype = $self-&gt;parseType();
+        my $subtypeName = $subtype-&gt;name;
+
+        $self-&gt;assertTokenValue($self-&gt;getToken(), &quot;&gt;&quot;, __LINE__);
+
+        # FIXME: This should just be &quot;FrozenArray&quot; when we start using domTypes in the CodeGenerators
+        $type-&gt;name(&quot;FrozenArray&lt;${subtypeName}&gt;&quot;);
+        push(@{$type-&gt;subtypes}, $subtype);
+
+        return $type;
+    }
</ins><span class="cx">     if ($next-&gt;type() == IdentifierToken) {
</span><span class="cx">         my $identifier = $self-&gt;getToken();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -156,7 +156,7 @@
</span><span class="cx">     return !returnedException;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool JSTestCallback::callbackWithStringList(RefPtr&lt;DOMStringList&gt;&amp;&amp; listParam)
</del><ins>+bool JSTestCallback::callbackWithStringList(DOMStringList* listParam)
</ins><span class="cx"> {
</span><span class="cx">     if (!canInvokeCallback())
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     virtual bool callbackWithSerializedScriptValueParam(RefPtr&lt;SerializedScriptValue&gt;&amp;&amp; srzParam, const String&amp; strArg);
</span><span class="cx">     virtual int32_t callbackWithNonBoolReturnType(const String&amp; strArg);
</span><span class="cx">     virtual int32_t customCallback(Class5* class5Param, Class6* class6Param);
</span><del>-    virtual bool callbackWithStringList(RefPtr&lt;DOMStringList&gt;&amp;&amp; listParam);
</del><ins>+    virtual bool callbackWithStringList(DOMStringList* listParam);
</ins><span class="cx">     virtual bool callbackWithBoolean(bool boolParam);
</span><span class="cx">     virtual bool callbackRequiresThisToPass(int32_t longParam, TestNode* testNodeParam);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx">     return !returnedException;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool JSTestCallbackFunction::callbackWithStringList(RefPtr&lt;DOMStringList&gt;&amp;&amp; listParam)
</del><ins>+bool JSTestCallbackFunction::callbackWithStringList(DOMStringList* listParam)
</ins><span class="cx"> {
</span><span class="cx">     if (!canInvokeCallback())
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     virtual bool callbackWithSerializedScriptValueParam(RefPtr&lt;SerializedScriptValue&gt;&amp;&amp; srzParam, const String&amp; strArg);
</span><span class="cx">     virtual int32_t callbackWithNonBoolReturnType(const String&amp; strArg);
</span><span class="cx">     virtual int32_t customCallback(Class5* class5Param, Class6* class6Param);
</span><del>-    virtual bool callbackWithStringList(RefPtr&lt;DOMStringList&gt;&amp;&amp; listParam);
</del><ins>+    virtual bool callbackWithStringList(DOMStringList* listParam);
</ins><span class="cx">     virtual bool callbackWithBoolean(bool boolParam);
</span><span class="cx">     virtual bool callbackRequiresThisToPass(int32_t longParam, TestNode* testNodeParam);
</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 (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -5569,11 +5569,9 @@
</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>-    RefPtr&lt;DOMStringList&gt; listArg = nullptr;
</del><ins>+    DOMStringList* listArg = nullptr;
</ins><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><del>-        listArg = JSDOMStringList::toWrapped(*state, state-&gt;uncheckedArgument(0));
-        if (UNLIKELY(state-&gt;hadException()))
-            return JSValue::encode(jsUndefined());
</del><ins>+        listArg = JSDOMStringList::toWrapped(state-&gt;uncheckedArgument(0));
</ins><span class="cx">         if (UNLIKELY(!listArg))
</span><span class="cx">             return throwArgumentTypeError(*state, 0, &quot;listArg&quot;, &quot;TestObject&quot;, &quot;overloadedMethod&quot;, &quot;DOMStringList&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -5950,9 +5948,7 @@
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, createNotEnoughArgumentsError(state));
</span><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto values = JSDOMStringList::toWrapped(*state, state-&gt;argument(0));
-    if (UNLIKELY(state-&gt;hadException()))
-        return JSValue::encode(jsUndefined());
</del><ins>+    auto values = JSDOMStringList::toWrapped(state-&gt;argument(0));
</ins><span class="cx">     if (UNLIKELY(!values))
</span><span class="cx">         return throwArgumentTypeError(*state, 0, &quot;values&quot;, &quot;TestObject&quot;, &quot;domStringListFunction&quot;, &quot;DOMStringList&quot;);
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.domStringListFunction(*values, ec));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #include &quot;JSMessagePort.h&quot;
</span><span class="cx"> #include &quot;SerializedScriptValue.h&quot;
</span><span class="cx"> #include &lt;runtime/FunctionPrototype.h&gt;
</span><del>-#include &lt;runtime/JSArray.h&gt;
</del><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMStringListidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMStringList.idl (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMStringList.idl        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/dom/DOMStringList.idl        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -24,8 +24,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> [
</span><del>-    JSCustomToNativeObject,
-    ImplementationLacksVTable,
</del><ins>+    ImplementationLacksVTable
</ins><span class="cx"> ] interface DOMStringList {
</span><span class="cx">     readonly attribute unsigned long length;
</span><span class="cx">     getter DOMString? item(unsigned long index);
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorIndexedDBAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -201,10 +201,10 @@
</span><span class="cx">     return keyPath;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static RefPtr&lt;IDBTransaction&gt; transactionForDatabase(ScriptExecutionContext* scriptExecutionContext, IDBDatabase* idbDatabase, const String&amp; objectStoreName, const String&amp; mode = IDBTransaction::modeReadOnly())
</del><ins>+static RefPtr&lt;IDBTransaction&gt; transactionForDatabase(IDBDatabase* idbDatabase, const String&amp; objectStoreName, const String&amp; mode = IDBTransaction::modeReadOnly())
</ins><span class="cx"> {
</span><span class="cx">     ExceptionCodeWithMessage ec;
</span><del>-    RefPtr&lt;IDBTransaction&gt; idbTransaction = idbDatabase-&gt;transaction(scriptExecutionContext, objectStoreName, mode, ec);
</del><ins>+    RefPtr&lt;IDBTransaction&gt; idbTransaction = idbDatabase-&gt;transaction(objectStoreName, mode, ec);
</ins><span class="cx">     if (ec.code)
</span><span class="cx">         return nullptr;
</span><span class="cx">     return idbTransaction;
</span><span class="lines">@@ -472,7 +472,7 @@
</span><span class="cx">         if (!requestCallback().isActive())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        RefPtr&lt;IDBTransaction&gt; idbTransaction = transactionForDatabase(context(), &amp;database, m_objectStoreName);
</del><ins>+        RefPtr&lt;IDBTransaction&gt; idbTransaction = transactionForDatabase(&amp;database, m_objectStoreName);
</ins><span class="cx">         if (!idbTransaction) {
</span><span class="cx">             m_requestCallback-&gt;sendFailure(&quot;Could not get transaction&quot;);
</span><span class="cx">             return;
</span><span class="lines">@@ -706,7 +706,7 @@
</span><span class="cx">         if (!requestCallback().isActive())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        RefPtr&lt;IDBTransaction&gt; idbTransaction = transactionForDatabase(context(), &amp;database, m_objectStoreName);
</del><ins>+        RefPtr&lt;IDBTransaction&gt; idbTransaction = transactionForDatabase(&amp;database, m_objectStoreName);
</ins><span class="cx">         if (!idbTransaction) {
</span><span class="cx">             m_requestCallback-&gt;sendFailure(&quot;Could not get transaction&quot;);
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceWebCorepageLocationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Location.cpp (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Location.cpp        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/page/Location.cpp        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -132,13 +132,13 @@
</span><span class="cx">     return SecurityOrigin::create(url())-&gt;toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;DOMStringList&gt; Location::ancestorOrigins() const
</del><ins>+Vector&lt;String&gt; Location::ancestorOrigins() const
</ins><span class="cx"> {
</span><del>-    auto origins = DOMStringList::create();
</del><ins>+    Vector&lt;String&gt; origins;
</ins><span class="cx">     if (!m_frame)
</span><span class="cx">         return origins;
</span><span class="cx">     for (Frame* frame = m_frame-&gt;tree().parent(); frame; frame = frame-&gt;tree().parent())
</span><del>-        origins-&gt;append(frame-&gt;document()-&gt;securityOrigin()-&gt;toString());
</del><ins>+        origins.append(frame-&gt;document()-&gt;securityOrigin()-&gt;toString());
</ins><span class="cx">     return origins;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageLocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Location.h (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Location.h        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/page/Location.h        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx"> 
</span><span class="cx">     String toString() const { return href(); }
</span><span class="cx"> 
</span><del>-    Ref&lt;DOMStringList&gt; ancestorOrigins() const;
</del><ins>+    Vector&lt;String&gt; ancestorOrigins() const;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     explicit Location(Frame*);
</span></span></pre></div>
<a id="trunkSourceWebCorepageLocationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Location.idl (204678 => 204679)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Location.idl        2016-08-20 09:38:41 UTC (rev 204678)
+++ trunk/Source/WebCore/page/Location.idl        2016-08-20 14:44:52 UTC (rev 204679)
</span><span class="lines">@@ -54,7 +54,8 @@
</span><span class="cx"> 
</span><span class="cx">     readonly attribute USVString origin;
</span><span class="cx"> 
</span><del>-    readonly attribute DOMStringList ancestorOrigins;
</del><ins>+    // FIXME: Add support for SameObject
+    [Unforgeable, CachedAttribute] readonly attribute FrozenArray&lt;USVString&gt; ancestorOrigins;
</ins><span class="cx"> 
</span><span class="cx"> #if defined(LANGUAGE_JAVASCRIPT) &amp;&amp; LANGUAGE_JAVASCRIPT
</span><span class="cx">     [NotEnumerable, Custom, ImplementedAs=toStringFunction] DOMString toString();
</span></span></pre>
</div>
</div>

</body>
</html>