<!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>[278026] branches/safari-612.1.15.0-branch</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/278026">278026</a></dd>
<dt>Author</dt> <dd>repstein@apple.com</dd>
<dt>Date</dt> <dd>2021-05-25 10:25:44 -0700 (Tue, 25 May 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Cherry-pick <a href="http://trac.webkit.org/projects/webkit/changeset/277990">r277990</a>. rdar://problem/78463670

    [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
    https://bugs.webkit.org/show_bug.cgi?id=226199
    rdar://78368624

    Reviewed by Tim Horton.

    Source/WebKit:

    Fine tune the "meaningful click" heuristic by not dispatching a non-meaningful click message to the UI process
    in the cases where the tap:

    - Causes the focused element to change.
    - Is over a form control or editable element.

    Test: fast/events/ios/meaningful-click-when-focusing-body.html

    * WebProcess/WebPage/ios/WebPageIOS.mm:
    (WebKit::WebPage::completeSyntheticClick):

    LayoutTests:

    Add a layout test to exercise the change.

    * fast/events/ios/meaningful-click-when-focusing-body-expected.txt: Added.
    * fast/events/ios/meaningful-click-when-focusing-body.html: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277990 268f45cc-cd09-0410-ab3c-d52691b4dbfc</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari6121150branchLayoutTestsChangeLog">branches/safari-612.1.15.0-branch/LayoutTests/ChangeLog</a></li>
<li><a href="#branchessafari6121150branchSourceWebKitChangeLog">branches/safari-612.1.15.0-branch/Source/WebKit/ChangeLog</a></li>
<li><a href="#branchessafari6121150branchSourceWebKitWebProcessWebPageiosWebPageIOSmm">branches/safari-612.1.15.0-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari6121150branchLayoutTestsfasteventsiosmeaningfulclickwhenfocusingbodyexpectedtxt">branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body-expected.txt</a></li>
<li><a href="#branchessafari6121150branchLayoutTestsfasteventsiosmeaningfulclickwhenfocusingbodyhtml">branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari6121150branchLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612.1.15.0-branch/LayoutTests/ChangeLog (278025 => 278026)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612.1.15.0-branch/LayoutTests/ChangeLog  2021-05-25 17:24:04 UTC (rev 278025)
+++ branches/safari-612.1.15.0-branch/LayoutTests/ChangeLog     2021-05-25 17:25:44 UTC (rev 278026)
</span><span class="lines">@@ -1,3 +1,49 @@
</span><ins>+2021-05-25  Russell Epstein  <repstein@apple.com>
+
+        Cherry-pick r277990. rdar://problem/78463670
+
+    [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
+    https://bugs.webkit.org/show_bug.cgi?id=226199
+    rdar://78368624
+    
+    Reviewed by Tim Horton.
+    
+    Source/WebKit:
+    
+    Fine tune the "meaningful click" heuristic by not dispatching a non-meaningful click message to the UI process
+    in the cases where the tap:
+    
+    - Causes the focused element to change.
+    - Is over a form control or editable element.
+    
+    Test: fast/events/ios/meaningful-click-when-focusing-body.html
+    
+    * WebProcess/WebPage/ios/WebPageIOS.mm:
+    (WebKit::WebPage::completeSyntheticClick):
+    
+    LayoutTests:
+    
+    Add a layout test to exercise the change.
+    
+    * fast/events/ios/meaningful-click-when-focusing-body-expected.txt: Added.
+    * fast/events/ios/meaningful-click-when-focusing-body.html: Added.
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277990 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+            [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
+            https://bugs.webkit.org/show_bug.cgi?id=226199
+            rdar://78368624
+
+            Reviewed by Tim Horton.
+
+            Add a layout test to exercise the change.
+
+            * fast/events/ios/meaningful-click-when-focusing-body-expected.txt: Added.
+            * fast/events/ios/meaningful-click-when-focusing-body.html: Added.
+
</ins><span class="cx"> 2021-05-19  Ruben Turcios  <rubent_22@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Cherry-pick r277665. rdar://problem/78213427
</span></span></pre></div>
<a id="branchessafari6121150branchLayoutTestsfasteventsiosmeaningfulclickwhenfocusingbodyexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body-expected.txt (0 => 278026)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body-expected.txt                           (rev 0)
+++ branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body-expected.txt      2021-05-25 17:25:44 UTC (rev 278026)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+This test exercises the 'meaningful click' heuristic in an editable body element, and requires WebKitTestRunner.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Focused body element
+PASS didDispatchNonMeaningfulClickCallback is false
+PASS Tapped inside body element
+PASS didDispatchNonMeaningfulClickCallback is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchessafari6121150branchLayoutTestsfasteventsiosmeaningfulclickwhenfocusingbodyhtml"></a>
<div class="addfile"><h4>Added: branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body.html (0 => 278026)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body.html                           (rev 0)
+++ branches/safari-612.1.15.0-branch/LayoutTests/fast/events/ios/meaningful-click-when-focusing-body.html      2021-05-25 17:25:44 UTC (rev 278026)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<html>
+<head>
+<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+<style>
+body, html {
+    font-size: 18px;
+    font-family: system-ui;
+    width: 100%;
+    height: 100%;
+    margin: 0;
+}
+</style>
+<script src="../../../resources/js-test.js"></script>
+<script src="../../../resources/ui-helper.js"></script>
+<script>
+jsTestIsAsync = true;
+
+addEventListener("load", async () => {
+    description("This test exercises the 'meaningful click' heuristic in an editable body element, and requires WebKitTestRunner.");
+
+    didDispatchNonMeaningfulClickCallback = false;
+    testRunner.installDidNotHandleTapAsMeaningfulClickCallback(() => {
+        didDispatchNonMeaningfulClickCallback = true;
+    });
+
+    await UIHelper.activateElementAndWaitForInputSession(document.body);
+    await UIHelper.waitForDoubleTapDelay();
+    testPassed("Focused body element");
+    shouldBeFalse("didDispatchNonMeaningfulClickCallback");
+
+    testRunner.clearTestRunnerCallbacks();
+    didDispatchNonMeaningfulClickCallback = false;
+    testRunner.installDidNotHandleTapAsMeaningfulClickCallback(() => {
+        didDispatchNonMeaningfulClickCallback = true;
+    });
+
+    await UIHelper.activateAt(100, 100);
+    await UIHelper.waitForDoubleTapDelay();
+    testPassed("Tapped inside body element");
+    shouldBeFalse("didDispatchNonMeaningfulClickCallback");
+
+    testRunner.clearTestRunnerCallbacks();
+    document.getElementById("text").remove();
+    finishJSTest();
+});
+</script>
+</head>
+<body contenteditable>
+    <p id="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet nisi felis, eu scelerisque dolor imperdiet in. Sed at porttitor purus, in placerat justo. Mauris at augue ac purus viverra molestie. Fusce ultrices ante at pellentesque lobortis. Sed pellentesque, ipsum eu semper mollis, arcu lectus dignissim enim, in maximus tortor ligula id ipsum. Nulla dignissim diam a mi tempor porta. Etiam tempor ac augue non dapibus. Donec euismod vel turpis in ultrices. Ut accumsan ultrices arcu vitae venenatis. In urna velit, accumsan sit amet arcu vel, vestibulum pulvinar leo. Aliquam vulputate euismod ultrices. Sed congue vestibulum libero quis ornare.</p>
+    <div id="description"></div>
+    <div id="console"></div>
+</body>
+</html>
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchessafari6121150branchSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612.1.15.0-branch/Source/WebKit/ChangeLog (278025 => 278026)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612.1.15.0-branch/Source/WebKit/ChangeLog        2021-05-25 17:24:04 UTC (rev 278025)
+++ branches/safari-612.1.15.0-branch/Source/WebKit/ChangeLog   2021-05-25 17:25:44 UTC (rev 278026)
</span><span class="lines">@@ -1,3 +1,55 @@
</span><ins>+2021-05-25  Russell Epstein  <repstein@apple.com>
+
+        Cherry-pick r277990. rdar://problem/78463670
+
+    [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
+    https://bugs.webkit.org/show_bug.cgi?id=226199
+    rdar://78368624
+    
+    Reviewed by Tim Horton.
+    
+    Source/WebKit:
+    
+    Fine tune the "meaningful click" heuristic by not dispatching a non-meaningful click message to the UI process
+    in the cases where the tap:
+    
+    - Causes the focused element to change.
+    - Is over a form control or editable element.
+    
+    Test: fast/events/ios/meaningful-click-when-focusing-body.html
+    
+    * WebProcess/WebPage/ios/WebPageIOS.mm:
+    (WebKit::WebPage::completeSyntheticClick):
+    
+    LayoutTests:
+    
+    Add a layout test to exercise the change.
+    
+    * fast/events/ios/meaningful-click-when-focusing-body-expected.txt: Added.
+    * fast/events/ios/meaningful-click-when-focusing-body.html: Added.
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277990 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+            [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
+            https://bugs.webkit.org/show_bug.cgi?id=226199
+            rdar://78368624
+
+            Reviewed by Tim Horton.
+
+            Fine tune the "meaningful click" heuristic by not dispatching a non-meaningful click message to the UI process
+            in the cases where the tap:
+
+            - Causes the focused element to change.
+            - Is over a form control or editable element.
+
+            Test: fast/events/ios/meaningful-click-when-focusing-body.html
+
+            * WebProcess/WebPage/ios/WebPageIOS.mm:
+            (WebKit::WebPage::completeSyntheticClick):
+
</ins><span class="cx"> 2021-05-21  Russell Epstein  <repstein@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Cherry-pick r277791. rdar://problem/78313265
</span></span></pre></div>
<a id="branchessafari6121150branchSourceWebKitWebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-612.1.15.0-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (278025 => 278026)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612.1.15.0-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm     2021-05-25 17:24:04 UTC (rev 278025)
+++ branches/safari-612.1.15.0-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm        2021-05-25 17:25:44 UTC (rev 278026)
</span><span class="lines">@@ -900,7 +900,23 @@
</span><span class="cx">     if (m_isClosed)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (!m_didHandleOrPreventMouseDownOrMouseUpEventDuringSyntheticClick && !isProbablyMeaningfulClick(nodeRespondingToClick))
</del><ins>+    bool shouldDispatchDidNotHandleTapAsMeaningfulClickAtPoint = ([&] {
+        if (m_didHandleOrPreventMouseDownOrMouseUpEventDuringSyntheticClick)
+            return false;
+
+        if (oldFocusedElement != newFocusedElement)
+            return false;
+
+        if (is<HTMLTextFormControlElement>(nodeRespondingToClick) || nodeRespondingToClick.hasEditableStyle())
+            return false;
+
+        if (isProbablyMeaningfulClick(nodeRespondingToClick))
+            return false;
+
+        return true;
+    })();
+
+    if (shouldDispatchDidNotHandleTapAsMeaningfulClickAtPoint)
</ins><span class="cx">         send(Messages::WebPageProxy::DidNotHandleTapAsMeaningfulClickAtPoint(roundedIntPoint(location)));
</span><span class="cx"> 
</span><span class="cx">     if (!tapWasHandled || !nodeRespondingToClick.isElementNode())
</span></span></pre>
</div>
</div>

</body>
</html>