<!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>[191587] 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/191587">191587</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-10-26 11:08:50 -0700 (Mon, 26 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Indexing an object with an integer that is not a supported property index should not call the named property getter
https://bugs.webkit.org/show_bug.cgi?id=148871
&lt;rdar://problem/22589952&gt;

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline W3C HTML test now that more checks are passing.

* web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt:

Source/WebCore:

Indexing an object with an integer that is not a supported property
index should not call the named property getter, as per the Web IDL
specification:
https://heycam.github.io/webidl/#idl-indexed-properties (Note in blue)

Firefox and Chrome both already behave according to the specification
here so this patch aligns our behavior with other browsers as well.

No new tests, already covered by existing test.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateGetOwnPropertySlotBody):
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
(WebCore::JSTestEventTarget::getOwnPropertySlot):
(WebCore::JSTestEventTarget::getOwnPropertySlotByIndex): Deleted.
(WebCore::jsTestEventTargetConstructor): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestshtmlsemanticsformstheformelementformelementsmatchesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (191586 => 191587)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2015-10-26 16:44:54 UTC (rev 191586)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2015-10-26 18:08:50 UTC (rev 191587)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2015-10-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Indexing an object with an integer that is not a supported property index should not call the named property getter
+        https://bugs.webkit.org/show_bug.cgi?id=148871
+        &lt;rdar://problem/22589952&gt;
+
+        Reviewed by Darin Adler.
+
+        Rebaseline W3C HTML test now that more checks are passing.
+
+        * web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt:
+
</ins><span class="cx"> 2015-10-25  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         Import W3C XMLHttpRequest tests
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestshtmlsemanticsformstheformelementformelementsmatchesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt (191586 => 191587)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt        2015-10-26 16:44:54 UTC (rev 191586)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-form-element/form-elements-matches-expected.txt        2015-10-26 18:08:50 UTC (rev 191587)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>- 
</del><span class="cx"> 
</span><ins>+
</ins><span class="cx"> PASS input type=image should not be present in the form.elements collection 
</span><del>-FAIL form.elements should include elements whose name starts with a number assert_equals: [2] expected (undefined) undefined but got (object) Element node &lt;input name=&quot;2&quot;&gt;&lt;/input&gt;
</del><ins>+PASS form.elements should include elements whose name starts with a number 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (191586 => 191587)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-26 16:44:54 UTC (rev 191586)
+++ trunk/Source/WebCore/ChangeLog        2015-10-26 18:08:50 UTC (rev 191587)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2015-10-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Indexing an object with an integer that is not a supported property index should not call the named property getter
+        https://bugs.webkit.org/show_bug.cgi?id=148871
+        &lt;rdar://problem/22589952&gt;
+
+        Reviewed by Darin Adler.
+
+        Indexing an object with an integer that is not a supported property
+        index should not call the named property getter, as per the Web IDL
+        specification:
+        https://heycam.github.io/webidl/#idl-indexed-properties (Note in blue)
+
+        Firefox and Chrome both already behave according to the specification
+        here so this patch aligns our behavior with other browsers as well.
+
+        No new tests, already covered by existing test.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateGetOwnPropertySlotBody):
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        (WebCore::JSTestEventTarget::getOwnPropertySlot):
+        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex): Deleted.
+        (WebCore::jsTestEventTargetConstructor): Deleted.
+
</ins><span class="cx"> 2015-10-26  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Streams API] Implement abort method on writable streams
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (191586 => 191587)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-26 16:44:54 UTC (rev 191586)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-26 18:08:50 UTC (rev 191587)
</span><span class="lines">@@ -442,8 +442,15 @@
</span><span class="cx">             &amp;$prototypeCheck();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        # This condition is to make sure we use the subclass' named getter instead of the base class one when possible.
-        push(@getOwnPropertySlotImpl, &quot;    if (thisObject-&gt;classInfo() == info()) {\n&quot;);
</del><ins>+        # The &quot;thisObject-&gt;classInfo() == info()&quot; check is to make sure we use the subclass' named getter
+        # instead of the base class one when possible.
+        if ($indexedGetterFunction) {
+            # Indexing an object with an integer that is not a supported property index should not call the named property getter.
+            # https://heycam.github.io/webidl/#idl-indexed-properties
+            push(@getOwnPropertySlotImpl, &quot;    if (!optionalIndex &amp;&amp; thisObject-&gt;classInfo() == info()) {\n&quot;);
+        } else {
+            push(@getOwnPropertySlotImpl, &quot;    if (thisObject-&gt;classInfo() == info()) {\n&quot;);
+        }
</ins><span class="cx">         push(@getOwnPropertySlotImpl, &quot;        JSValue value;\n&quot;);
</span><span class="cx">         push(@getOwnPropertySlotImpl, &quot;        if (thisObject-&gt;nameGetter(state, propertyName, value)) {\n&quot;);
</span><span class="cx">         push(@getOwnPropertySlotImpl, &quot;            slot.setValue(thisObject, ReadOnly | DontDelete | DontEnum, value);\n&quot;);
</span><span class="lines">@@ -2234,7 +2241,9 @@
</span><span class="cx">                 push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            if ($namedGetterFunction || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedGetter&quot;}) {
</del><ins>+            # Indexing an object with an integer that is not a supported property index should not call the named property getter.
+            # https://heycam.github.io/webidl/#idl-indexed-properties
+            if (!$indexedGetterFunction &amp;&amp; ($namedGetterFunction || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedGetter&quot;})) {
</ins><span class="cx">                 &amp;$propertyNameGeneration();
</span><span class="cx"> 
</span><span class="cx">                 # This condition is to make sure we use the subclass' named getter instead of the base class one when possible.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (191586 => 191587)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-26 16:44:54 UTC (rev 191586)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-26 18:08:50 UTC (rev 191587)
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx">     if (proto.isObject() &amp;&amp; jsCast&lt;JSObject*&gt;(proto)-&gt;hasProperty(state, propertyName))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (thisObject-&gt;classInfo() == info()) {
</del><ins>+    if (!optionalIndex &amp;&amp; thisObject-&gt;classInfo() == info()) {
</ins><span class="cx">         JSValue value;
</span><span class="cx">         if (thisObject-&gt;nameGetter(state, propertyName, value)) {
</span><span class="cx">             slot.setValue(thisObject, ReadOnly | DontDelete | DontEnum, value);
</span><span class="lines">@@ -176,14 +176,6 @@
</span><span class="cx">         slot.setValue(thisObject, attributes, toJS(state, thisObject-&gt;globalObject(), thisObject-&gt;impl().item(index)));
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><del>-    Identifier propertyName = Identifier::from(state, index);
-    if (thisObject-&gt;classInfo() == info()) {
-        JSValue value;
-        if (thisObject-&gt;nameGetter(state, propertyName, value)) {
-            slot.setValue(thisObject, ReadOnly | DontDelete | DontEnum, value);
-            return true;
-        }
-    }
</del><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>