[ContentChangeObserver] Cancel ongoing content observation when tap is failed/cancelled
https://bugs.webkit.org/show_bug.cgi?id=199828
<rdar://problem/53152696>

Reviewed by Wenson Hsieh.

Source/WebCore:

This patch ensures that we stop the content observation (initiated by touch start) when the tap
is cancelled/failed.

Not testable.

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::didCancelPotentialTap):
* page/ios/ContentChangeObserver.h:

Source/WebKit:

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


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@247483 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 93e37eb..1c39ffc 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
+2019-07-16  Zalan Bujtas  <zalan@apple.com>
+
+        [ContentChangeObserver] Cancel ongoing content observation when tap is failed/cancelled
+        https://bugs.webkit.org/show_bug.cgi?id=199828
+        <rdar://problem/53152696>
+
+        Reviewed by Wenson Hsieh.
+
+        This patch ensures that we stop the content observation (initiated by touch start) when the tap
+        is cancelled/failed.
+
+        Not testable.
+
+        * page/ios/ContentChangeObserver.cpp:
+        (WebCore::ContentChangeObserver::didCancelPotentialTap):
+        * page/ios/ContentChangeObserver.h:
+
 2019-07-16  Rob Buis  <rbuis@igalia.com>
 
         Remove support for beforeload on link=prefetch
diff --git a/Source/WebCore/page/ios/ContentChangeObserver.cpp b/Source/WebCore/page/ios/ContentChangeObserver.cpp
index 8eb047e..891b57c 100644
--- a/Source/WebCore/page/ios/ContentChangeObserver.cpp
+++ b/Source/WebCore/page/ios/ContentChangeObserver.cpp
@@ -150,6 +150,12 @@
     }
 }
 
+void ContentChangeObserver::didCancelPotentialTap(Frame& mainFrame)
+{
+    LOG(ContentObservation, "didCancelPotentialTap: cancel ongoing content change observing.");
+    WebCore::willNotProceedWithClick(mainFrame);
+}
+
 void ContentChangeObserver::didRecognizeLongPress(Frame& mainFrame)
 {
     LOG(ContentObservation, "didRecognizeLongPress: cancel ongoing content change observing.");
diff --git a/Source/WebCore/page/ios/ContentChangeObserver.h b/Source/WebCore/page/ios/ContentChangeObserver.h
index 8526af8..cabd013 100644
--- a/Source/WebCore/page/ios/ContentChangeObserver.h
+++ b/Source/WebCore/page/ios/ContentChangeObserver.h
@@ -59,14 +59,15 @@
     void didFinishTransition(const Element&, CSSPropertyID);
     void didRemoveTransition(const Element&, CSSPropertyID);
 
-    WEBCORE_EXPORT void willNotProceedWithClick();
     WEBCORE_EXPORT static void didRecognizeLongPress(Frame& mainFrame);
     WEBCORE_EXPORT static void didPreventDefaultForEvent(Frame& mainFrame);
+    WEBCORE_EXPORT static void didCancelPotentialTap(Frame& mainFrame);
 
     void didSuspendActiveDOMObjects();
     void willDetachPage();
 
     void willDestroyRenderer(const Element&);
+    void willNotProceedWithClick();
 
     void setHiddenTouchTarget(Element& targetElement) { m_hiddenTouchTargetElement = makeWeakPtr(targetElement); }
     void resetHiddenTouchTarget() { m_hiddenTouchTargetElement = { }; }
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 34f8098..639ed9c 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,15 @@
+2019-07-16  Zalan Bujtas  <zalan@apple.com>
+
+        [ContentChangeObserver] Cancel ongoing content observation when tap is failed/cancelled
+        https://bugs.webkit.org/show_bug.cgi?id=199828
+        <rdar://problem/53152696>
+
+        Reviewed by Wenson Hsieh.
+
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::commitPotentialTapFailed):
+        (WebKit::WebPage::cancelPotentialTap):
+
 2019-07-15  Alex Christensen  <achristensen@webkit.org>
 
         Remove redundant WebsiteDataStoreConfiguration member
diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
index 13c8531..52ae1f7 100644
--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
@@ -1126,6 +1126,7 @@
 
 void WebPage::commitPotentialTapFailed()
 {
+    ContentChangeObserver::didCancelPotentialTap(m_page->mainFrame());
     if (!m_page->focusController().focusedOrMainFrame().selection().selection().isContentEditable())
         clearSelection();
 
@@ -1135,8 +1136,7 @@
 
 void WebPage::cancelPotentialTap()
 {
-    if (m_potentialTapNode)
-        m_potentialTapNode->document().contentChangeObserver().willNotProceedWithClick();
+    ContentChangeObserver::didCancelPotentialTap(m_page->mainFrame());
     cancelPotentialTapInFrame(*m_mainFrame);
 }