Changeset 242630 in webkit


Ignore:
Timestamp:
Mar 7, 2019 8:24:40 PM (5 years ago)
Author:
Alan Bujtas
Message:

[ContentChangeObserver] Click event fires immediately on hover menu at Ebbets.com
https://bugs.webkit.org/show_bug.cgi?id=195397

Reviewed by Simon Fraser.

Source/WebCore:

This patch introduces TouchEventScope to track changes triggered by touch start.

Test: fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple.html

  • page/ios/ContentChangeObserver.cpp:

(WebCore::ContentChangeObserver::touchEventDidStart):
(WebCore::ContentChangeObserver::touchEventDidFinish):
(WebCore::ContentChangeObserver::mouseMovedDidStart):
(WebCore::ContentChangeObserver::mouseMovedDidFinish):
(WebCore::ContentChangeObserver::adjustObservedState):
(WebCore::ContentChangeObserver::TouchEventScope::TouchEventScope):
(WebCore::ContentChangeObserver::TouchEventScope::~TouchEventScope):

  • page/ios/ContentChangeObserver.h:

(WebCore::ContentChangeObserver::isObservingContentChanges const):

LayoutTests:

  • fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple-expected.txt: Added.
  • fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r242628 r242630  
     12019-03-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        [ContentChangeObserver] Click event fires immediately on hover menu at Ebbets.com
     4        https://bugs.webkit.org/show_bug.cgi?id=195397
     5
     6        Reviewed by Simon Fraser.
     7
     8        * fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple-expected.txt: Added.
     9        * fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple.html: Added.
     10
    1112019-03-07  Zalan Bujtas  <zalan@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r242628 r242630  
     12019-03-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        [ContentChangeObserver] Click event fires immediately on hover menu at Ebbets.com
     4        https://bugs.webkit.org/show_bug.cgi?id=195397
     5
     6        Reviewed by Simon Fraser.
     7
     8        This patch introduces TouchEventScope to track changes triggered by touch start.
     9
     10        Test: fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple.html
     11
     12        * page/ios/ContentChangeObserver.cpp:
     13        (WebCore::ContentChangeObserver::touchEventDidStart):
     14        (WebCore::ContentChangeObserver::touchEventDidFinish):
     15        (WebCore::ContentChangeObserver::mouseMovedDidStart):
     16        (WebCore::ContentChangeObserver::mouseMovedDidFinish):
     17        (WebCore::ContentChangeObserver::adjustObservedState):
     18        (WebCore::ContentChangeObserver::TouchEventScope::TouchEventScope):
     19        (WebCore::ContentChangeObserver::TouchEventScope::~TouchEventScope):
     20        * page/ios/ContentChangeObserver.h:
     21        (WebCore::ContentChangeObserver::isObservingContentChanges const):
     22
    1232019-03-07  Zalan Bujtas  <zalan@apple.com>
    224
  • trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp

    r242628 r242630  
    155155}
    156156
     157void ContentChangeObserver::touchEventDidStart(PlatformEvent::Type eventType)
     158{
     159#if ENABLE(TOUCH_EVENTS)
     160    if (!m_document.settings().contentChangeObserverEnabled())
     161        return;
     162    if (eventType != PlatformEvent::Type::TouchStart)
     163        return;
     164    LOG(ContentObservation, "touchEventDidStart: touch start event started.");
     165    m_touchEventIsBeingDispatched = true;
     166    adjustObservedState(Event::StartedTouchStartEventDispatching);
     167#endif
     168}
     169
     170void ContentChangeObserver::touchEventDidFinish()
     171{
     172#if ENABLE(TOUCH_EVENTS)
     173    if (!m_touchEventIsBeingDispatched)
     174        return;
     175    ASSERT(m_document.settings().contentChangeObserverEnabled());
     176    LOG(ContentObservation, "touchEventDidFinish: touch start event finished.");
     177    m_touchEventIsBeingDispatched = false;
     178    adjustObservedState(Event::EndedTouchStartEventDispatching);
     179#endif
     180}
     181
    157182void ContentChangeObserver::mouseMovedDidStart()
    158183{
     
    160185    m_mouseMovedIsBeingDispatched = true;
    161186#endif
    162     ASSERT(!m_document.hasPendingStyleRecalc());
    163     clearObservedDOMTimers();
    164     setShouldObserveDOMTimerScheduling(true);
    165187    adjustObservedState(Event::StartedMouseMovedEventDispatching);
    166188}
     
    168190void ContentChangeObserver::mouseMovedDidFinish()
    169191{
    170     setShouldObserveDOMTimerScheduling(false);
     192    adjustObservedState(Event::EndedMouseMovedEventDispatching);
    171193#if !ASSERT_DISABLED
    172194    m_mouseMovedIsBeingDispatched = false;
     
    215237
    216238    switch (event) {
     239    case Event::StartedTouchStartEventDispatching:
     240        setHasNoChangeState();
     241        clearObservedDOMTimers();
     242        m_isMouseMovedPrecededByTouch = true;
     243        setShouldObserveDOMTimerScheduling(true);
     244        break;
    217245    case Event::StartedMouseMovedEventDispatching:
    218         setHasNoChangeState();
     246        ASSERT(!m_document.hasPendingStyleRecalc());
     247        if (!m_isMouseMovedPrecededByTouch) {
     248            setHasNoChangeState();
     249            clearObservedDOMTimers();
     250        }
     251        setShouldObserveDOMTimerScheduling(true);
     252        m_isMouseMovedPrecededByTouch = false;
     253        break;
     254    case Event::EndedTouchStartEventDispatching:
     255    case Event::EndedMouseMovedEventDispatching:
     256        setShouldObserveDOMTimerScheduling(false);
    219257        break;
    220258    case Event::InstalledDOMTimer:
     
    299337}
    300338
     339#if ENABLE(TOUCH_EVENTS)
     340ContentChangeObserver::TouchEventScope::TouchEventScope(Document& document, PlatformEvent::Type eventType)
     341    : m_contentChangeObserver(document.contentChangeObserver())
     342{
     343    m_contentChangeObserver.touchEventDidStart(eventType);
     344}
     345
     346ContentChangeObserver::TouchEventScope::~TouchEventScope()
     347{
     348    m_contentChangeObserver.touchEventDidFinish();
     349}
     350#endif
     351
    301352ContentChangeObserver::MouseMovedScope::MouseMovedScope(Document& document)
    302353    : m_contentChangeObserver(document.contentChangeObserver())
  • trunk/Source/WebCore/page/ios/ContentChangeObserver.h

    r242628 r242630  
    2929
    3030#include "Document.h"
     31#include "PlatformEvent.h"
    3132#include "RenderStyleConstants.h"
    3233#include "Timer.h"
     
    6667    };
    6768
     69    class TouchEventScope {
     70    public:
     71        WEBCORE_EXPORT TouchEventScope(Document&, PlatformEvent::Type);
     72        WEBCORE_EXPORT ~TouchEventScope();
     73    private:
     74        ContentChangeObserver& m_contentChangeObserver;
     75    };
     76
    6877    class MouseMovedScope {
    6978    public:
     
    92101
    93102private:
     103    void touchEventDidStart(PlatformEvent::Type);
     104    void touchEventDidFinish();
     105
    94106    void mouseMovedDidStart();
    95107    void mouseMovedDidFinish();
     
    111123    bool isObservingStyleRecalc() const { return m_isObservingStyleRecalc; }
    112124
    113     bool isObservingContentChanges() const { return m_domTimerIsBeingExecuted || m_styleRecalcIsBeingExecuted || m_contentObservationTimer.isActive(); }
     125    bool isObservingContentChanges() const { return m_touchEventIsBeingDispatched || m_domTimerIsBeingExecuted || m_styleRecalcIsBeingExecuted || m_contentObservationTimer.isActive(); }
    114126
    115127    void cancelPendingActivities();
     
    131143
    132144    enum class Event {
     145        StartedTouchStartEventDispatching,
     146        EndedTouchStartEventDispatching,
    133147        StartedMouseMovedEventDispatching,
     148        EndedMouseMovedEventDispatching,
    134149        InstalledDOMTimer,
    135150        RemovedDOMTimer,
     
    145160    Timer m_contentObservationTimer;
    146161    HashSet<const DOMTimer*> m_DOMTimerList;
     162    bool m_touchEventIsBeingDispatched { false };
    147163    bool m_isObservingStyleRecalc { false };
    148164    bool m_styleRecalcIsBeingExecuted { false };
    149165    bool m_isObservingDOMTimerScheduling { false };
    150166    bool m_domTimerIsBeingExecuted { false };
     167    bool m_isMouseMovedPrecededByTouch { false };
    151168#if !ASSERT_DISABLED
    152169    bool m_mouseMovedIsBeingDispatched { false };
Note: See TracChangeset for help on using the changeset viewer.