Changeset 247200 in webkit


Ignore:
Timestamp:
Jul 7, 2019 7:52:17 AM (5 years ago)
Author:
Alan Bujtas
Message:

[ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
https://bugs.webkit.org/show_bug.cgi?id=199542
<rdar://problem/51886813>

Reviewed by Simon Fraser.

Source/WebCore:

Decouple isVisuallyHidden and isConsideredVisible. Just because an element is not visually hidden (1px wide content)
it is not necessarily qualified to be visible in the context of hover heuristic (e.g. iqiyi.com brings up a 1px wide
clickable element when hovering over the scrubber. This element is clearly not designed to be actionable.)

Tests: fast/events/touch/ios/content-observation/tap-on-1px-height-content.html

fast/events/touch/ios/content-observation/tap-on-1px-width-content.html

  • dom/Node.cpp:

(WebCore::Node::defaultEventHandler):

  • page/ios/ContentChangeObserver.cpp:

(WebCore::ContentChangeObserver::isVisuallyHidden):
(WebCore::ContentChangeObserver::isConsideredVisible):
(WebCore::ContentChangeObserver::didAddTransition):
(WebCore::ContentChangeObserver::didFinishTransition):
(WebCore::ContentChangeObserver::willDestroyRenderer):
(WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
(WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
(WebCore::ContentChangeObserver::isConsideredHidden): Deleted.

  • page/ios/ContentChangeObserver.h:

Source/WebKit:

  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::handleSyntheticClick):

LayoutTests:

  • fast/events/touch/ios/content-observation/tap-on-1px-height-content-expected.txt: Added.
  • fast/events/touch/ios/content-observation/tap-on-1px-height-content.html: Added.
  • fast/events/touch/ios/content-observation/tap-on-1px-width-content-expected.txt: Added.
  • fast/events/touch/ios/content-observation/tap-on-1px-width-content.html: Added.
Location:
trunk
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r247193 r247200  
     12019-07-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        [ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
     4        https://bugs.webkit.org/show_bug.cgi?id=199542
     5        <rdar://problem/51886813>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * fast/events/touch/ios/content-observation/tap-on-1px-height-content-expected.txt: Added.
     10        * fast/events/touch/ios/content-observation/tap-on-1px-height-content.html: Added.
     11        * fast/events/touch/ios/content-observation/tap-on-1px-width-content-expected.txt: Added.
     12        * fast/events/touch/ios/content-observation/tap-on-1px-width-content.html: Added.
     13
    1142019-07-06  Cathie Chen  <cathiechen@igalia.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r247199 r247200  
     12019-07-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        [ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
     4        https://bugs.webkit.org/show_bug.cgi?id=199542
     5        <rdar://problem/51886813>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Decouple isVisuallyHidden and isConsideredVisible. Just because an element is not visually hidden (1px wide content)
     10        it is not necessarily qualified to be visible in the context of hover heuristic (e.g. iqiyi.com brings up a 1px wide
     11        clickable element when hovering over the scrubber. This element is clearly not designed to be actionable.)
     12
     13        Tests: fast/events/touch/ios/content-observation/tap-on-1px-height-content.html
     14               fast/events/touch/ios/content-observation/tap-on-1px-width-content.html
     15
     16        * dom/Node.cpp:
     17        (WebCore::Node::defaultEventHandler):
     18        * page/ios/ContentChangeObserver.cpp:
     19        (WebCore::ContentChangeObserver::isVisuallyHidden):
     20        (WebCore::ContentChangeObserver::isConsideredVisible):
     21        (WebCore::ContentChangeObserver::didAddTransition):
     22        (WebCore::ContentChangeObserver::didFinishTransition):
     23        (WebCore::ContentChangeObserver::willDestroyRenderer):
     24        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
     25        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
     26        (WebCore::ContentChangeObserver::isConsideredHidden): Deleted.
     27        * page/ios/ContentChangeObserver.h:
     28
    1292019-07-07  Zalan Bujtas  <zalan@apple.com>
    230
  • trunk/Source/WebCore/dom/Node.cpp

    r247015 r247200  
    24592459        if (is<Element>(*this) && eventType == eventNames().touchstartEvent) {
    24602460            auto& contentChangeObserver = document().contentChangeObserver();
    2461             if (ContentChangeObserver::isConsideredHidden(*this))
     2461            if (ContentChangeObserver::isVisuallyHidden(*this))
    24622462                contentChangeObserver.setHiddenTouchTarget(downcast<Element>(*this));
    24632463            else
  • trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp

    r247147 r247200  
    4444static const Seconds maximumDelayForTransitions { 300_ms };
    4545
    46 bool ContentChangeObserver::isConsideredHidden(const Node& node)
     46bool ContentChangeObserver::isVisuallyHidden(const Node& node)
    4747{
    4848    if (!node.renderStyle())
     
    9090    }
    9191    return false;
     92}
     93
     94bool ContentChangeObserver::isConsideredVisible(const Node& node)
     95{
     96    if (isVisuallyHidden(node))
     97        return false;
     98
     99    auto& style = *node.renderStyle();
     100    auto width = style.logicalWidth();
     101    // 1px width or height content is not considered visible.
     102    if (width.isFixed() && width.value() <= 1)
     103        return false;
     104
     105    auto height = style.logicalHeight();
     106    if (height.isFixed() && height.value() <= 1)
     107        return false;
     108
     109    return true;
    92110}
    93111
     
    176194    if (transitionEnd > maximumDelayForTransitions)
    177195        return;
    178     if (!isConsideredHidden(element))
     196    if (!isVisuallyHidden(element))
    179197        return;
    180198    // In case of multiple transitions, the first tranistion wins (and it has to produce a visible content change in order to show up as hover).
     
    199217        if (!weakThis || !targetElement)
    200218            return;
    201         if (isConsideredHidden(*targetElement)) {
     219        if (isVisuallyHidden(*targetElement)) {
    202220            weakThis->adjustObservedState(Event::EndedTransitionButFinalStyleIsNotDefiniteYet);
    203221            return;
     
    363381    LOG_WITH_STREAM(ContentObservation, stream << "willDestroyRenderer element: " << &element);
    364382
    365     if (!isConsideredHidden(element))
     383    if (!isVisuallyHidden(element))
    366384        m_elementsWithDestroyedVisibleRenderer.add(&element);
    367385}
     
    559577{
    560578    if (m_contentChangeObserver.shouldObserveVisibilityChangeForElement(element))
    561         m_wasHidden = isConsideredHidden(m_element);
     579        m_wasHidden = isVisuallyHidden(m_element);
    562580}
    563581
     
    565583{
    566584    auto changedFromHiddenToVisible = [&] {
    567         return m_wasHidden && !isConsideredHidden(m_element);
     585        return m_wasHidden && isConsideredVisible(m_element);
    568586    };
    569587
  • trunk/Source/WebCore/page/ios/ContentChangeObserver.h

    r247147 r247200  
    5050    WEBCORE_EXPORT void startContentObservationForDuration(Seconds duration);
    5151    WKContentChange observedContentChange() const { return m_observedContentState; }
    52     WEBCORE_EXPORT static bool isConsideredHidden(const Node&);
     52    WEBCORE_EXPORT static bool isConsideredVisible(const Node&);
     53    static bool isVisuallyHidden(const Node&);
    5354
    5455    void didInstallDOMTimer(const DOMTimer&, Seconds timeout, bool singleShot);
  • trunk/Source/WebKit/ChangeLog

    r247197 r247200  
     12019-07-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        [ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
     4        https://bugs.webkit.org/show_bug.cgi?id=199542
     5        <rdar://problem/51886813>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * WebProcess/WebPage/ios/WebPageIOS.mm:
     10        (WebKit::WebPage::handleSyntheticClick):
     11
    1122019-07-06  Antoine Quint  <graouts@apple.com>
    213
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r247180 r247200  
    670670    auto& respondingDocument = nodeRespondingToClick.document();
    671671    auto& contentChangeObserver = respondingDocument.contentChangeObserver();
    672     auto targetNodeWentFromHiddenToVisible = contentChangeObserver.hiddenTouchTarget() == &nodeRespondingToClick && !ContentChangeObserver::isConsideredHidden(nodeRespondingToClick);
     672    auto targetNodeWentFromHiddenToVisible = contentChangeObserver.hiddenTouchTarget() == &nodeRespondingToClick && ContentChangeObserver::isConsideredVisible(nodeRespondingToClick);
    673673    {
    674674        LOG_WITH_STREAM(ContentObservation, stream << "handleSyntheticClick: node(" << &nodeRespondingToClick << ") " << location);
Note: See TracChangeset for help on using the changeset viewer.