<!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>[247633] branches/safari-608-branch/Source/WebCore</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/247633">247633</a></dd>
<dt>Author</dt> <dd>alancoon@apple.com</dd>
<dt>Date</dt> <dd>2019-07-18 18:40:03 -0700 (Thu, 18 Jul 2019)</dd>
</dl>

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

    REGRESSION: Panning on an Amazon product image scrolls the page on iPadOS
    https://bugs.webkit.org/show_bug.cgi?id=199905
    <rdar://problem/49124529>

    Reviewed by Dean Jackson.

    Amazon product pages include images that the user can touch and pan to show zoomed details in a side image. This
    currently works on iPadOS thanks to the dispatch of simulated "mousemove" events on the product image, but the site
    doesn't call preventDefault() when handling those events as it wasn't necessary for macOS.

    We add a new quirk that will indicate that a given element is such a product image.

    * page/Quirks.cpp:
    (WebCore::Quirks::isAmazon const):
    (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
    (WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
    (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
    * page/Quirks.h:

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

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari608branchSourceWebCoreChangeLog">branches/safari-608-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari608branchSourceWebCorepageQuirkscpp">branches/safari-608-branch/Source/WebCore/page/Quirks.cpp</a></li>
<li><a href="#branchessafari608branchSourceWebCorepageQuirksh">branches/safari-608-branch/Source/WebCore/page/Quirks.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari608branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/ChangeLog (247632 => 247633)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/ChangeLog      2019-07-19 01:40:00 UTC (rev 247632)
+++ branches/safari-608-branch/Source/WebCore/ChangeLog 2019-07-19 01:40:03 UTC (rev 247633)
</span><span class="lines">@@ -1,5 +1,51 @@
</span><span class="cx"> 2019-07-18  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r247568. rdar://problem/53279098
+
+    REGRESSION: Panning on an Amazon product image scrolls the page on iPadOS
+    https://bugs.webkit.org/show_bug.cgi?id=199905
+    <rdar://problem/49124529>
+    
+    Reviewed by Dean Jackson.
+    
+    Amazon product pages include images that the user can touch and pan to show zoomed details in a side image. This
+    currently works on iPadOS thanks to the dispatch of simulated "mousemove" events on the product image, but the site
+    doesn't call preventDefault() when handling those events as it wasn't necessary for macOS.
+    
+    We add a new quirk that will indicate that a given element is such a product image.
+    
+    * page/Quirks.cpp:
+    (WebCore::Quirks::isAmazon const):
+    (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
+    (WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
+    (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
+    * page/Quirks.h:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247568 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-07-18  Antoine Quint  <graouts@apple.com>
+
+            REGRESSION: Panning on an Amazon product image scrolls the page on iPadOS
+            https://bugs.webkit.org/show_bug.cgi?id=199905
+            <rdar://problem/49124529>
+
+            Reviewed by Dean Jackson.
+
+            Amazon product pages include images that the user can touch and pan to show zoomed details in a side image. This
+            currently works on iPadOS thanks to the dispatch of simulated "mousemove" events on the product image, but the site
+            doesn't call preventDefault() when handling those events as it wasn't necessary for macOS.
+
+            We add a new quirk that will indicate that a given element is such a product image.
+
+            * page/Quirks.cpp:
+            (WebCore::Quirks::isAmazon const):
+            (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
+            (WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
+            (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
+            * page/Quirks.h:
+
+2019-07-18  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r247566. rdar://problem/53279081
</span><span class="cx"> 
</span><span class="cx">     Make sure to set kCTFontFallbackOptionAttribute to kCTFontFallbackOptionSystem for system fonts
</span></span></pre></div>
<a id="branchessafari608branchSourceWebCorepageQuirkscpp"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/page/Quirks.cpp (247632 => 247633)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/page/Quirks.cpp        2019-07-19 01:40:00 UTC (rev 247632)
+++ branches/safari-608-branch/Source/WebCore/page/Quirks.cpp   2019-07-19 01:40:03 UTC (rev 247633)
</span><span class="lines">@@ -227,6 +227,13 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><ins>+bool Quirks::isAmazon() const
+{
+    auto& url = m_document->topDocument().url();
+    auto host = url.host();
+    return equalLettersIgnoringASCIICase(host, "amazon.com") || host.endsWithIgnoringASCIICase(".amazon.com");
+}
+
</ins><span class="cx"> bool Quirks::shouldDispatchSimulatedMouseEvents() const
</span><span class="cx"> {
</span><span class="cx">     if (!needsQuirks())
</span><span class="lines">@@ -236,11 +243,12 @@
</span><span class="cx">     if (!loader || loader->simulatedMouseEventsDispatchPolicy() != SimulatedMouseEventsDispatchPolicy::Allow)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    if (isAmazon())
+        return true;
+
</ins><span class="cx">     auto& url = m_document->topDocument().url();
</span><span class="cx">     auto host = url.host();
</span><span class="cx"> 
</span><del>-    if (equalLettersIgnoringASCIICase(host, "amazon.com") || host.endsWithIgnoringASCIICase(".amazon.com"))
-        return true;
</del><span class="cx">     if (equalLettersIgnoringASCIICase(host, "wix.com") || host.endsWithIgnoringASCIICase(".wix.com"))
</span><span class="cx">         return true;
</span><span class="cx">     if ((equalLettersIgnoringASCIICase(host, "desmos.com") || host.endsWithIgnoringASCIICase(".desmos.com")) && url.path().startsWithIgnoringASCIICase("/calculator/"))
</span><span class="lines">@@ -267,6 +275,24 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented(EventTarget* target) const
+{
+    if (!needsQuirks() || !shouldDispatchSimulatedMouseEvents())
+        return false;
+
+    if (isAmazon() && is<Element>(target)) {
+        // When panning on an Amazon product image, we're either touching on the #magnifierLens element
+        // or its previous sibling.
+        auto* element = downcast<Element>(target);
+        if (element->getIdAttribute() == "magnifierLens")
+            return true;
+        if (auto* sibling = element->nextElementSibling())
+            return sibling->getIdAttribute() == "magnifierLens";
+    }
+
+    return false;
+}
+
</ins><span class="cx"> Optional<Event::IsCancelable> Quirks::simulatedMouseEventTypeForTarget(EventTarget* target) const
</span><span class="cx"> {
</span><span class="cx">     if (!needsQuirks() || !shouldDispatchSimulatedMouseEvents())
</span><span class="lines">@@ -285,7 +311,7 @@
</span><span class="cx">         return Event::IsCancelable::No;
</span><span class="cx"> 
</span><span class="cx">     return Event::IsCancelable::Yes;
</span><del>-}   
</del><ins>+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> bool Quirks::shouldAvoidResizingWhenInputViewBoundsChange() const
</span></span></pre></div>
<a id="branchessafari608branchSourceWebCorepageQuirksh"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/page/Quirks.h (247632 => 247633)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/page/Quirks.h  2019-07-19 01:40:00 UTC (rev 247632)
+++ branches/safari-608-branch/Source/WebCore/page/Quirks.h     2019-07-19 01:40:03 UTC (rev 247633)
</span><span class="lines">@@ -50,6 +50,7 @@
</span><span class="cx">     bool hasBrokenEncryptedMediaAPISupportQuirk() const;
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">     bool shouldDispatchSimulatedMouseEvents() const;
</span><ins>+    bool shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented(EventTarget*) const;
</ins><span class="cx">     Optional<Event::IsCancelable> simulatedMouseEventTypeForTarget(EventTarget*) const;
</span><span class="cx"> #endif
</span><span class="cx">     bool shouldDisablePointerEventsQuirk() const;
</span><span class="lines">@@ -70,6 +71,10 @@
</span><span class="cx"> private:
</span><span class="cx">     bool needsQuirks() const;
</span><span class="cx"> 
</span><ins>+#if ENABLE(TOUCH_EVENTS)
+    bool isAmazon() const;
+#endif
+
</ins><span class="cx">     WeakPtr<Document> m_document;
</span><span class="cx"> 
</span><span class="cx">     mutable Optional<bool> m_hasBrokenEncryptedMediaAPISupportQuirk;
</span></span></pre>
</div>
</div>

</body>
</html>