Title: [248630] trunk/Source/WebCore
Revision
248630
Author
[email protected]
Date
2019-08-13 13:26:07 -0700 (Tue, 13 Aug 2019)

Log Message

[ContentChangeObserver] Scope events in adjustObservedState
https://bugs.webkit.org/show_bug.cgi?id=200679
<rdar://problem/54266172>

Reviewed by Simon Fraser.

This is in preparation for simplifying adjustObservedState.

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

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (248629 => 248630)


--- trunk/Source/WebCore/ChangeLog	2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/ChangeLog	2019-08-13 20:26:07 UTC (rev 248630)
@@ -1,3 +1,18 @@
+2019-08-13  Zalan Bujtas  <[email protected]>
+
+        [ContentChangeObserver] Scope events in adjustObservedState
+        https://bugs.webkit.org/show_bug.cgi?id=200679
+        <rdar://problem/54266172>
+
+        Reviewed by Simon Fraser.
+
+        This is in preparation for simplifying adjustObservedState.
+
+        * page/ios/ContentChangeObserver.cpp:
+        (WebCore::ContentChangeObserver::didFinishTransition):
+        (WebCore::ContentChangeObserver::adjustObservedState):
+        * page/ios/ContentChangeObserver.h:
+
 2019-08-13  Justin Fan  <[email protected]>
 
         [WebGPU] Improve GPUBindGroup performance using one device-shared argument MTLBuffer

Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp (248629 => 248630)


--- trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp	2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp	2019-08-13 20:26:07 UTC (rev 248630)
@@ -250,7 +250,9 @@
             weakThis->adjustObservedState(Event::EndedTransitionButFinalStyleIsNotDefiniteYet);
             return;
         }
-        weakThis->adjustObservedState(isConsideredClickable(*targetElement, ElementHadRenderer::Yes) ? Event::CompletedTransitionWithClickableContent : Event::CompletedTransitionWithoutClickableContent);
+        if (isConsideredClickable(*targetElement, ElementHadRenderer::Yes))
+            weakThis->contentVisibilityDidChange();
+        weakThis->adjustObservedState(Event::CompletedTransition);
     });
 }
 
@@ -518,80 +520,108 @@
         m_document.page()->chrome().client().didFinishContentChangeObserving(*m_document.frame(), observedContentChange());
     };
 
-    switch (event) {
-    case Event::StartedTouchStartEventDispatching:
-        resetToStartObserving();
-        setShouldObserveDOMTimerScheduling(true);
-        setShouldObserveTransitions(true);
-        break;
-    case Event::EndedTouchStartEventDispatching:
-        setShouldObserveDOMTimerScheduling(false);
-        setShouldObserveTransitions(false);
-        setIsBetweenTouchEndAndMouseMoved(true);
-        break;
-    case Event::WillNotProceedWithClick:
-        reset();
-        break;
-    case Event::StartedMouseMovedEventDispatching:
-        ASSERT(!m_document.hasPendingStyleRecalc());
-        if (!isBetweenTouchEndAndMouseMoved())
+    // These user initiated events trigger content observation (touchStart and mouseMove). 
+    {
+        if (event == Event::StartedTouchStartEventDispatching) {
             resetToStartObserving();
-        setIsBetweenTouchEndAndMouseMoved(false);
-        setShouldObserveDOMTimerScheduling(!hasVisibleChangeState());
-        setShouldObserveTransitions(!hasVisibleChangeState());
-        break;
-    case Event::EndedMouseMovedEventDispatching:
-        setShouldObserveDOMTimerScheduling(false);
-        setShouldObserveTransitions(false);
-        break;
-    case Event::StartedStyleRecalc:
-        setShouldObserveNextStyleRecalc(false);
-        FALLTHROUGH;
-    case Event::StartedDOMTimerExecution:
-        ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
-        break;
-    case Event::InstalledDOMTimer:
-    case Event::StartedFixedObservationTimeWindow:
-    case Event::AddedTransition:
-        ASSERT(!hasVisibleChangeState());
-        setHasIndeterminateState();
-        break;
-    case Event::EndedDOMTimerExecution:
-        setShouldObserveNextStyleRecalc(m_document.hasPendingStyleRecalc());
-        FALLTHROUGH;
-    case Event::EndedStyleRecalc:
-    case Event::RemovedDOMTimer:
-    case Event::CanceledTransition:
-        if (!isObservationTimeWindowActive())
+            setShouldObserveDOMTimerScheduling(true);
+            setShouldObserveTransitions(true);
+            return;
+        }
+        if (event == Event::EndedTouchStartEventDispatching) {
+            setShouldObserveDOMTimerScheduling(false);
+            setShouldObserveTransitions(false);
+            setIsBetweenTouchEndAndMouseMoved(true);
+            return;
+        }
+        if (event == Event::StartedMouseMovedEventDispatching) {
+            ASSERT(!m_document.hasPendingStyleRecalc());
+            if (!isBetweenTouchEndAndMouseMoved())
+                resetToStartObserving();
+            setIsBetweenTouchEndAndMouseMoved(false);
+            setShouldObserveDOMTimerScheduling(!hasVisibleChangeState());
+            setShouldObserveTransitions(!hasVisibleChangeState());
+            return;
+        }
+        if (event == Event::EndedMouseMovedEventDispatching) {
+            setShouldObserveDOMTimerScheduling(false);
+            setShouldObserveTransitions(false);
+            return;
+        }
+    }
+    // Fixed window observation starts soon after mouseMove when we don't have a definite answer to whether we should proceed with hover or click.
+    {
+        if (event == Event::StartedFixedObservationTimeWindow) {
+            ASSERT(!hasVisibleChangeState());
+            setHasIndeterminateState();
+            return;
+        }
+        if (event == Event::EndedFixedObservationTimeWindow) {
             adjustStateAndNotifyContentChangeIfNeeded();
-        break;
-    case Event::EndedTransitionButFinalStyleIsNotDefiniteYet:
-        // onAnimationEnd can be called while in the middle of resolving the document (synchronously) or
-        // asynchronously right before the style update is issued. It also means we don't know whether this animation ends up producing visible content yet. 
-        if (m_document.inStyleRecalc()) {
-            // We need to start observing this style change synchronously.
-            m_isInObservedStyleRecalc = true;
-        } else
-            setShouldObserveNextStyleRecalc(true);
-        break;
-    case Event::CompletedTransitionWithClickableContent:
-        // Set visibility flag on and report visible change synchronously or asynchronously depending whether we are in the middle of style recalc.
-        contentVisibilityDidChange();
-        FALLTHROUGH;
-    case Event::CompletedTransitionWithoutClickableContent:
-        if (m_document.inStyleRecalc())
-            m_isInObservedStyleRecalc = true;
-        else if (!isObservationTimeWindowActive())
-            adjustStateAndNotifyContentChangeIfNeeded();
-        break;
-    case Event::EndedFixedObservationTimeWindow:
-        adjustStateAndNotifyContentChangeIfNeeded();
-        break;
-    case Event::ContentVisibilityChanged:
+            return;
+        }
+    }
+    // These events (DOM timer, transition and style recalc) could trigger style changes that are candidates to visibility checking.
+    {
+        if (event == Event::InstalledDOMTimer || event == Event::AddedTransition) {
+            ASSERT(!hasVisibleChangeState());
+            setHasIndeterminateState();
+            return;
+        }
+        if (event == Event::RemovedDOMTimer || event == Event::CanceledTransition) {
+            if (!isObservationTimeWindowActive())
+                adjustStateAndNotifyContentChangeIfNeeded();
+            return;
+        }
+        if (event == Event::StartedDOMTimerExecution) {
+            ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
+            return;
+        }
+        if (event == Event::EndedDOMTimerExecution) {
+            setShouldObserveNextStyleRecalc(m_document.hasPendingStyleRecalc());
+            if (!isObservationTimeWindowActive())
+                adjustStateAndNotifyContentChangeIfNeeded();
+            return;
+        }
+        if (event == Event::EndedTransitionButFinalStyleIsNotDefiniteYet) {
+            // onAnimationEnd can be called while in the middle of resolving the document (synchronously) or
+            // asynchronously right before the style update is issued. It also means we don't know whether this animation ends up producing visible content yet. 
+            if (m_document.inStyleRecalc()) {
+                // We need to start observing this style change synchronously.
+                m_isInObservedStyleRecalc = true;
+            } else
+                setShouldObserveNextStyleRecalc(true);
+            return;
+        }
+        if (event == Event::CompletedTransition) {
+            if (m_document.inStyleRecalc())
+                m_isInObservedStyleRecalc = true;
+            else if (!isObservationTimeWindowActive())
+                adjustStateAndNotifyContentChangeIfNeeded();
+            return;
+        }
+        if (event == Event::StartedStyleRecalc) {
+            setShouldObserveNextStyleRecalc(false);
+            ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
+            return;
+        }
+        if (event == Event::EndedStyleRecalc) {
+            if (!isObservationTimeWindowActive())
+                adjustStateAndNotifyContentChangeIfNeeded();
+            return;
+        }
+    }
+    // Either the page decided to call preventDefault on the touch action or the tap gesture evolved to some other gesture (long press, double tap). 
+    if (event == Event::WillNotProceedWithClick) {
+        reset();
+        return;
+    }
+    // The page produced an visible change on an actionable content.
+    if (event == Event::ContentVisibilityChanged) {
         setHasVisibleChangeState();
         // Stop pending activities. We don't need to observe them anymore.
         stopObservingPendingActivities();
-        break;
+        return;
     }
 }
 

Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.h (248629 => 248630)


--- trunk/Source/WebCore/page/ios/ContentChangeObserver.h	2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.h	2019-08-13 20:26:07 UTC (rev 248630)
@@ -196,8 +196,7 @@
         EndedStyleRecalc,
         AddedTransition,
         EndedTransitionButFinalStyleIsNotDefiniteYet,
-        CompletedTransitionWithClickableContent,
-        CompletedTransitionWithoutClickableContent,
+        CompletedTransition,
         CanceledTransition,
         StartedFixedObservationTimeWindow,
         EndedFixedObservationTimeWindow,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to