Changeset 247820 in webkit


Ignore:
Timestamp:
Jul 25, 2019 8:35:17 AM (5 years ago)
Author:
Truitt Savell
Message:

Unreviewed, rolling out r247817.

Broke 14 http/tests/paymentrequest/ tests. on iOS

Reverted changeset:

"Unable to tap/double tap to open files/folders in Google
Drive in Safari"
https://bugs.webkit.org/show_bug.cgi?id=200096
https://trac.webkit.org/changeset/247817

Location:
trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r247817 r247820  
     12019-07-25  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r247817.
     4
     5        Broke 14 http/tests/paymentrequest/ tests. on iOS
     6
     7        Reverted changeset:
     8
     9        "Unable to tap/double tap to open files/folders in Google
     10        Drive in Safari"
     11        https://bugs.webkit.org/show_bug.cgi?id=200096
     12        https://trac.webkit.org/changeset/247817
     13
    1142019-07-24  Zalan Bujtas  <zalan@apple.com>
    215
  • trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt

    r247817 r247820  
    11PASS if 'double click' text is NOT shown below.
    2 [click]
     2[click][click]
  • trunk/Source/WebKit/ChangeLog

    r247817 r247820  
     12019-07-25  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r247817.
     4
     5        Broke 14 http/tests/paymentrequest/ tests. on iOS
     6
     7        Reverted changeset:
     8
     9        "Unable to tap/double tap to open files/folders in Google
     10        Drive in Safari"
     11        https://bugs.webkit.org/show_bug.cgi?id=200096
     12        https://trac.webkit.org/changeset/247817
     13
    1142019-07-24  Zalan Bujtas  <zalan@apple.com>
    215
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r247817 r247820  
    9999    encoder << keyboardIsAttached;
    100100    encoder << canShowWhileLocked;
     101    encoder << doubleTapForDoubleClickDelay;
     102    encoder << doubleTapForDoubleClickRadius;
    101103    encoder << overrideViewportArguments;
    102104#endif
     
    291293    if (!decoder.decode(parameters.canShowWhileLocked))
    292294        return WTF::nullopt;
     295    if (!decoder.decode(parameters.doubleTapForDoubleClickDelay))
     296        return WTF::nullopt;
     297    if (!decoder.decode(parameters.doubleTapForDoubleClickRadius))
     298        return WTF::nullopt;
    293299
    294300    Optional<Optional<WebCore::ViewportArguments>> overrideViewportArguments;
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

    r247817 r247820  
    159159    bool keyboardIsAttached { false };
    160160    bool canShowWhileLocked { false };
     161    Seconds doubleTapForDoubleClickDelay { 350_ms };
     162    float doubleTapForDoubleClickRadius { 45 };
    161163    Optional<WebCore::ViewportArguments> overrideViewportArguments;
    162164#endif
  • trunk/Source/WebKit/UIProcess/PageClient.h

    r247817 r247820  
    414414
    415415    virtual void handleAutocorrectionContext(const WebAutocorrectionContext&) = 0;
     416
     417    virtual Seconds doubleTapForDoubleClickDelay() = 0;
     418    virtual float doubleTapForDoubleClickRadius() = 0;
    416419#endif
    417420
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r247817 r247820  
    72057205    parameters.overrideViewportArguments = m_overrideViewportArguments;
    72067206    parameters.canShowWhileLocked = m_configuration->canShowWhileLocked();
     7207    parameters.doubleTapForDoubleClickDelay = pageClient().doubleTapForDoubleClickDelay();
     7208    parameters.doubleTapForDoubleClickRadius = pageClient().doubleTapForDoubleClickRadius();
    72077209#endif
    72087210
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r247817 r247820  
    12261226    void handleTap(const WebCore::FloatPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart);
    12271227    void didRecognizeLongPress();
    1228     void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart);
    12291228
    12301229    void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&);
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h

    r247817 r247820  
    244244    void handleAutocorrectionContext(const WebAutocorrectionContext&) final;
    245245
     246    Seconds doubleTapForDoubleClickDelay() final;
     247    float doubleTapForDoubleClickRadius() final;
     248
    246249    void didFinishProcessingAllPendingMouseEvents() final { }
    247250
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm

    r247817 r247820  
    843843#endif
    844844
     845Seconds PageClientImpl::doubleTapForDoubleClickDelay()
     846{
     847    return Seconds { [m_contentView _doubleTapForDoubleClickDelay] };
     848}
     849
     850float PageClientImpl::doubleTapForDoubleClickRadius()
     851{
     852    return [m_contentView _doubleTapForDoubleClickRadius];
     853}
     854
    845855#if USE(QUICK_LOOK)
    846856void PageClientImpl::requestPasswordForQuickLookDocument(const String& fileName, WTF::Function<void(const String&)>&& completionHandler)
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h

    r247817 r247820  
    217217    RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer;
    218218    RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer;
    219     RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick;
    220219    RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer;
    221220    RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer;
     
    482481- (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler;
    483482- (void)_setDoubleTapGesturesEnabled:(BOOL)enabled;
     483- (double)_doubleTapForDoubleClickDelay;
     484- (float)_doubleTapForDoubleClickRadius;
    484485#if ENABLE(DATA_DETECTION)
    485486- (NSArray *)_dataDetectionResults;
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r247817 r247820  
    689689}
    690690
     691- (void)_ensureNonBlockingDoubleTapGestureRecognizer
     692{
     693    if (_nonBlockingDoubleTapGestureRecognizer)
     694        return;
     695    _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]);
     696    [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2];
     697    [_nonBlockingDoubleTapGestureRecognizer setDelegate:self];
     698    [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO];
     699}
     700
    691701- (void)setupInteraction
    692702{
     
    735745    [self addGestureRecognizer:_singleTapGestureRecognizer.get()];
    736746
    737     _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]);
    738     [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2];
    739     [_nonBlockingDoubleTapGestureRecognizer setDelegate:self];
    740     [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO];
     747    [self _ensureNonBlockingDoubleTapGestureRecognizer];
    741748    [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
    742 
    743     _doubleTapGestureRecognizerForDoubleClick = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_doubleTapRecognizedForDoubleClick:)]);
    744     [_doubleTapGestureRecognizerForDoubleClick setNumberOfTapsRequired:2];
    745     [_doubleTapGestureRecognizerForDoubleClick setDelegate:self];
    746     [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    747749
    748750    [self _createAndConfigureDoubleTapGestureRecognizer];
     
    893895    [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
    894896
    895     [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil];
    896     [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    897 
    898897    [_twoFingerDoubleTapGestureRecognizer setDelegate:nil];
    899898    [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
     
    972971    [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()];
    973972    [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
    974     [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    975973    [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
    976974    [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()];
     
    992990    [self addGestureRecognizer:_doubleTapGestureRecognizer.get()];
    993991    [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
    994     [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    995992    [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
    996993    [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()];
     
    18961893        return YES;
    18971894
    1898     if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))
    1899         return YES;
    1900 
    1901     if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))
    1902         return YES;
    1903 
    19041895    return NO;
    19051896}
     
    20942085        || gestureRecognizer == _doubleTapGestureRecognizer
    20952086        || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer
    2096         || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick
    20972087        || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) {
    20982088
     
    23312321        break;
    23322322    }
    2333 }
    2334 
    2335 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer
    2336 {
    2337     _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart);
    23382323}
    23392324
     
    39143899- (void)_didStartProvisionalLoadForMainFrame
    39153900{
    3916     // Reset the double tap gesture recognizer to prevent any double click that is in the process of being recognized.
    3917     [_doubleTapGestureRecognizerForDoubleClick setEnabled:NO];
    3918     [_doubleTapGestureRecognizerForDoubleClick setEnabled:YES];
    3919     // We also need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which
     3901    // We need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which
    39203902    // are enabled when a single tap is first recognized. This avoids tests running in sequence and simulating taps
    39213903    // in the same location to trigger double-tap recognition.
     
    39853967    [_nonBlockingDoubleTapGestureRecognizer setEnabled:!enabled];
    39863968    [self _resetIsDoubleTapPending];
     3969}
     3970
     3971- (double)_doubleTapForDoubleClickDelay
     3972{
     3973    static double doubleTapForDoubleClickDelay = 350;
     3974    static dispatch_once_t onceToken;
     3975    dispatch_once(&onceToken, ^{
     3976        [self _ensureNonBlockingDoubleTapGestureRecognizer];
     3977        doubleTapForDoubleClickDelay = [_nonBlockingDoubleTapGestureRecognizer maximumIntervalBetweenSuccessiveTaps];
     3978    });
     3979    return doubleTapForDoubleClickDelay;
     3980}
     3981
     3982- (float)_doubleTapForDoubleClickRadius
     3983{
     3984    static float doubleTapForDoubleClickRadius = 45;
     3985    static dispatch_once_t onceToken;
     3986    dispatch_once(&onceToken, ^{
     3987        [self _ensureNonBlockingDoubleTapGestureRecognizer];
     3988        doubleTapForDoubleClickRadius = [_nonBlockingDoubleTapGestureRecognizer allowableMovement];
     3989    });
     3990    return doubleTapForDoubleClickRadius;
    39873991}
    39883992
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r247817 r247820  
    839839}
    840840
    841 void WebPageProxy::handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t layerTreeTransactionIdAtLastTouchStart)
    842 {
    843     process().send(Messages::WebPage::HandleDoubleTapForDoubleClickAtPoint(point, modifiers, layerTreeTransactionIdAtLastTouchStart), m_pageID);
    844 }
    845 
    846841void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position)
    847842{
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r247817 r247820  
    417417    , m_keyboardIsAttached(parameters.keyboardIsAttached)
    418418    , m_canShowWhileLocked(parameters.canShowWhileLocked)
     419    , m_doubleTapForDoubleClickDelay(parameters.doubleTapForDoubleClickDelay)
     420    , m_doubleTapForDoubleClickRadius(parameters.doubleTapForDoubleClickRadius)
    419421#endif
    420422    , m_layerVolatilityTimer(*this, &WebPage::layerVolatilityTimerFired)
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r247817 r247820  
    636636    void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&);
    637637    void didRecognizeLongPress();
    638     void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);
     638    bool handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);
    639639
    640640    void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&);
     
    18661866    bool m_canShowWhileLocked { false };
    18671867    bool m_inDynamicSizeUpdate { false };
     1868    Seconds m_doubleTapForDoubleClickDelay { 350_ms };
     1869    float m_doubleTapForDoubleClickRadius { 45 };
    18681870    HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory;
    18691871    RefPtr<WebCore::Node> m_pendingSyntheticClickNode;
     
    18761878    double m_lastTransactionPageScaleFactor { 0 };
    18771879    uint64_t m_lastTransactionIDWithScaleChange { 0 };
     1880    Optional<MonotonicTime> m_lastCommittedTapTimestamp;
     1881    Optional<WebCore::FloatPoint> m_lastCommittedTapLocation;
    18781882
    18791883    CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply;
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r247817 r247820  
    5858    TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point)
    5959    DidRecognizeLongPress()
    60     HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)
    6160    InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point)
    6261    InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point)
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r247817 r247820  
    833833}
    834834
    835 void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)
    836 {
     835bool WebPage::handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)
     836{
     837    if (!m_lastCommittedTapTimestamp || !m_lastCommittedTapLocation)
     838        return false;
     839
     840    auto millisecondsSinceLastTap = (MonotonicTime::now() - *m_lastCommittedTapTimestamp).milliseconds();
     841    if (millisecondsSinceLastTap > m_doubleTapForDoubleClickDelay.milliseconds())
     842        return false;
     843
     844    auto distanceBetweenTaps = sqrtf(pow(m_potentialTapLocation.x() - m_lastCommittedTapLocation->x(), 2) + pow(m_potentialTapLocation.y() - m_lastCommittedTapLocation->y(), 2));
     845    if (distanceBetweenTaps > m_doubleTapForDoubleClickRadius)
     846        return false;
     847
    837848    FloatPoint adjustedPoint;
    838     auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(point, adjustedPoint);
     849    auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(m_potentialTapLocation, adjustedPoint);
    839850    if (!nodeRespondingToDoubleClick)
    840         return;
     851        return false;
    841852
    842853    auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame();
    843854    if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad())
    844         return;
     855        return false;
    845856
    846857    bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey);
     
    851862    nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap));
    852863    if (m_isClosed)
    853         return;
     864        return false;
    854865    nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap));
     866    return true;
    855867}
    856868
     
    10731085void WebPage::commitPotentialTap(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId, WebCore::PointerID pointerId)
    10741086{
     1087    auto currentPotentialTapLocation = m_potentialTapLocation;
     1088    auto updateLastCommittedLocationAndTimestamp = [&] {
     1089        m_lastCommittedTapTimestamp = MonotonicTime::now();
     1090        m_lastCommittedTapLocation = currentPotentialTapLocation;
     1091    };
     1092
    10751093    auto invalidTargetForSingleClick = !m_potentialTapNode;
    10761094    if (!invalidTargetForSingleClick) {
     
    10811099    }
    10821100    if (invalidTargetForSingleClick) {
     1101        // When the node has no click eventlistener, but it may have a dblclick one.
     1102        handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId);
    10831103        commitPotentialTapFailed();
    1084         return;
     1104        return updateLastCommittedLocationAndTimestamp();
    10851105    }
    10861106
     
    10911111    if (!frameRespondingToClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) {
    10921112        commitPotentialTapFailed();
    1093         return;
     1113        return updateLastCommittedLocationAndTimestamp();
    10941114    }
    10951115
     
    11021122        } else
    11031123#endif
    1104             handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId);
     1124        {
     1125            if (handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId))
     1126                commitPotentialTapFailed();
     1127            else
     1128                handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId);
     1129        }
    11051130    } else
    11061131        commitPotentialTapFailed();
     
    11091134    m_potentialTapLocation = FloatPoint();
    11101135    m_potentialTapSecurityOrigin = nullptr;
     1136    return updateLastCommittedLocationAndTimestamp();
    11111137}
    11121138
Note: See TracChangeset for help on using the changeset viewer.