<!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>[213646] 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/213646">213646</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2017-03-09 09:59:46 -0800 (Thu, 09 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Align Document.elementFromPoint() with the CSSOM specification
https://bugs.webkit.org/show_bug.cgi?id=169403

Reviewed by Sam Weinig.

Source/WebCore:

Align Document.elementFromPoint() with the CSSOM specification:
- https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface

In particular, the parameters should be mandatory and of type double.

The parameters are mandatory in both Firefox and Chrome already. Parameters
are finite floating point in Firefox and integers in Chrome.

Test: fast/dom/elementFromPoint-parameters.html

* dom/DocumentOrShadowRoot.idl:
* dom/TreeScope.cpp:
(WebCore::TreeScope::elementFromPoint):
* dom/TreeScope.h:

LayoutTests:

Add layout test coverage.

* fast/dom/elementFromPoint-parameters-expected.txt: Added.
* fast/dom/elementFromPoint-parameters.html: Added.
* fast/dom/non-numeric-values-numeric-parameters-expected.txt:
* fast/dom/script-tests/non-numeric-values-numeric-parameters.js:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomnonnumericvaluesnumericparametersexpectedtxt">trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomscripttestsnonnumericvaluesnumericparametersjs">trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomDocumentOrShadowRootidl">trunk/Source/WebCore/dom/DocumentOrShadowRoot.idl</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopecpp">trunk/Source/WebCore/dom/TreeScope.cpp</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopeh">trunk/Source/WebCore/dom/TreeScope.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastdomelementFromPointparametersexpectedtxt">trunk/LayoutTests/fast/dom/elementFromPoint-parameters-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomelementFromPointparametershtml">trunk/LayoutTests/fast/dom/elementFromPoint-parameters.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/LayoutTests/ChangeLog        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2017-03-09  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align Document.elementFromPoint() with the CSSOM specification
+        https://bugs.webkit.org/show_bug.cgi?id=169403
+
+        Reviewed by Sam Weinig.
+
+        Add layout test coverage.
+
+        * fast/dom/elementFromPoint-parameters-expected.txt: Added.
+        * fast/dom/elementFromPoint-parameters.html: Added.
+        * fast/dom/non-numeric-values-numeric-parameters-expected.txt:
+        * fast/dom/script-tests/non-numeric-values-numeric-parameters.js:
+
</ins><span class="cx"> 2017-03-09  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomelementFromPointparametersexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/dom/elementFromPoint-parameters-expected.txt (0 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/elementFromPoint-parameters-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/dom/elementFromPoint-parameters-expected.txt        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+Tests that the parameters to document.elementFromPoint() are mandatory and of type double.
+
+
+PASS Parameters are mandatory. 
+PASS Parameter should be finite floating point values. 
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastdomelementFromPointparametershtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/dom/elementFromPoint-parameters.html (0 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/elementFromPoint-parameters.html                                (rev 0)
+++ trunk/LayoutTests/fast/dom/elementFromPoint-parameters.html        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;body&gt;
+&lt;p&gt;Tests that the parameters to document.elementFromPoint() are mandatory and of type double.&lt;/p&gt;
+&lt;script src=&quot;../../resources/testharness.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/testharnessreport.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+test(function() {
+    assert_throws(new TypeError(), function() { 
+        document.elementFromPoint();
+    }, &quot;Called with no parameter&quot;);
+
+    assert_throws(new TypeError(), function() { 
+        document.elementFromPoint(0);
+    }, &quot;Called with 1 parameter&quot;);
+}, &quot;Parameters are mandatory.&quot;);
+
+test(function() {
+    assert_throws(new TypeError(), function() {
+        document.elementFromPoint(0, Infinity);
+    }, &quot;Passing Infinity as second parameter throws&quot;);
+    assert_throws(new TypeError(), function() {
+        document.elementFromPoint(Infinity, 0);
+    }, &quot;Passing Infinity as first parameter throws&quot;);
+    assert_throws(new TypeError(), function() {
+        document.elementFromPoint(0, NaN);
+    }, &quot;Passing NaN as second parameter throws&quot;);
+    assert_throws(new TypeError(), function() {
+        document.elementFromPoint(NaN, 0);
+    }, &quot;Passing NaN as first parameter throws&quot;);
+}, &quot;Parameter should be finite floating point values.&quot;);
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastdomnonnumericvaluesnumericparametersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -20,8 +20,8 @@
</span><span class="cx"> PASS nonNumericPolicy('createCSSStyleSheet().addRule(selector, styleText, x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('createCSSStyleSheet().removeRule(x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('createCSSValueList().item(x)') is 'any type allowed (but not omitted)'
</span><del>-PASS nonNumericPolicy('document.elementFromPoint(x, 0)') is 'any type allowed'
-PASS nonNumericPolicy('document.elementFromPoint(0, x)') is 'any type allowed'
</del><ins>+PASS nonNumericPolicy('document.elementFromPoint(x, 0)') is 'mixed'
+PASS nonNumericPolicy('document.elementFromPoint(0, x)') is 'mixed'
</ins><span class="cx"> PASS nonNumericPolicy('document.body.scrollByLines(x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.body.scrollByPages(x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.body.scrollLeft = x') is 'any type allowed'
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomscripttestsnonnumericvaluesnumericparametersjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -219,8 +219,8 @@
</span><span class="cx"> 
</span><span class="cx"> // Document
</span><span class="cx"> 
</span><del>-shouldBe(&quot;nonNumericPolicy('document.elementFromPoint(x, 0)')&quot;, &quot;'any type allowed'&quot;);
-shouldBe(&quot;nonNumericPolicy('document.elementFromPoint(0, x)')&quot;, &quot;'any type allowed'&quot;);
</del><ins>+shouldBe(&quot;nonNumericPolicy('document.elementFromPoint(x, 0)')&quot;, &quot;'mixed'&quot;);
+shouldBe(&quot;nonNumericPolicy('document.elementFromPoint(0, x)')&quot;, &quot;'mixed'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> // Element
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/Source/WebCore/ChangeLog        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2017-03-09  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align Document.elementFromPoint() with the CSSOM specification
+        https://bugs.webkit.org/show_bug.cgi?id=169403
+
+        Reviewed by Sam Weinig.
+
+        Align Document.elementFromPoint() with the CSSOM specification:
+        - https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface
+
+        In particular, the parameters should be mandatory and of type double.
+
+        The parameters are mandatory in both Firefox and Chrome already. Parameters
+        are finite floating point in Firefox and integers in Chrome.
+
+        Test: fast/dom/elementFromPoint-parameters.html
+
+        * dom/DocumentOrShadowRoot.idl:
+        * dom/TreeScope.cpp:
+        (WebCore::TreeScope::elementFromPoint):
+        * dom/TreeScope.h:
+
</ins><span class="cx"> 2017-03-09  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Modern Media Controls] Fullscreen controls are difficult to drag around
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentOrShadowRootidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DocumentOrShadowRoot.idl (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DocumentOrShadowRoot.idl        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/Source/WebCore/dom/DocumentOrShadowRoot.idl        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> [
</span><span class="cx">     NoInterfaceObject,
</span><span class="cx"> ] interface DocumentOrShadowRoot {
</span><del>-    Element?                    elementFromPoint(optional long x = 0, optional long y = 0); // FIXME: x and y should be double and not be optional.
</del><ins>+    Element? elementFromPoint(double x, double y);
</ins><span class="cx">     readonly attribute Element? activeElement;
</span><span class="cx">     [Conditional=POINTER_LOCK] readonly attribute Element? pointerLockElement;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScope.cpp (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScope.cpp        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/Source/WebCore/dom/TreeScope.cpp        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -313,7 +313,7 @@
</span><span class="cx">     return result.innerNode();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Element* TreeScope::elementFromPoint(int x, int y)
</del><ins>+Element* TreeScope::elementFromPoint(double x, double y)
</ins><span class="cx"> {
</span><span class="cx">     Document&amp; document = documentScope();
</span><span class="cx">     if (!document.hasLivingRenderTree())
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScope.h (213645 => 213646)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScope.h        2017-03-09 17:40:10 UTC (rev 213645)
+++ trunk/Source/WebCore/dom/TreeScope.h        2017-03-09 17:59:46 UTC (rev 213646)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     void removeLabel(const AtomicStringImpl&amp; forAttributeValue, HTMLLabelElement&amp;);
</span><span class="cx">     HTMLLabelElement* labelElementForId(const AtomicString&amp; forAttributeValue);
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT Element* elementFromPoint(int x, int y);
</del><ins>+    WEBCORE_EXPORT Element* elementFromPoint(double x, double y);
</ins><span class="cx"> 
</span><span class="cx">     // Find first anchor with the given name.
</span><span class="cx">     // First searches for an element with the given ID, but if that fails, then looks
</span></span></pre>
</div>
</div>

</body>
</html>