Changeset 247866 in webkit


Ignore:
Timestamp:
Jul 26, 2019 11:22:06 AM (5 years ago)
Author:
Alan Bujtas
Message:

Unable to tap/double tap to open files/folders in Google Drive in Safari
https://bugs.webkit.org/show_bug.cgi?id=200096
<rdar://problem/52748552>

Reviewed by Wenson Hsieh.

Source/WebKit:

This patch reverts to the original double-tap-for-double-click implementation (see r244775 and r246347 for more information).

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):

  • Shared/WebPageCreationParameters.h:
  • UIProcess/PageClient.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::creationParameters):

  • UIProcess/WebPageProxy.h:
  • UIProcess/ios/PageClientImplIOS.h:
  • UIProcess/ios/PageClientImplIOS.mm:

(WebKit::PageClientImpl::doubleTapForDoubleClickDelay): Deleted.
(WebKit::PageClientImpl::doubleTapForDoubleClickRadius): Deleted.

  • UIProcess/ios/WKContentViewInteraction.h:
  • UIProcess/ios/WKContentViewInteraction.mm:

(-[WKContentView setupInteraction]):
(-[WKContentView cleanupInteraction]):
(-[WKContentView _removeDefaultGestureRecognizers]):
(-[WKContentView _addDefaultGestureRecognizers]):
(-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Do not recognize the single and double gestures the same time.
(-[WKContentView gestureRecognizerShouldBegin:]):
(-[WKContentView _doubleTapRecognizedForDoubleClick:]):
(-[WKContentView _didStartProvisionalLoadForMainFrame]):
(-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): Deleted.
(-[WKContentView _doubleTapForDoubleClickDelay]): Deleted.
(-[WKContentView _doubleTapForDoubleClickRadius]): Deleted.

  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):

  • WebProcess/WebPage/WebPage.cpp:
  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):
(WebKit::WebPage::commitPotentialTap):
(WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): Deleted.

LayoutTests:

  1. Rebaseline (progression).
  2. Payment request tests activate elements by tapping on them at a high speed, triggering double clicks instead. Let's slow them down a bit.
  • fast/events/touch/ios/double-tap-for-double-click3-expected.txt:
  • http/tests/adClickAttribution/anchor-tag-attributes-validation.html:
  • http/tests/resources/payment-request.js:

(activateThen):

  • resources/ui-helper.js:

(window.UIHelper.activateElementAtHumanSpeed.return.new.Promise):
(window.UIHelper.activateElementAtHumanSpeed):

  • tests-options.json:
Location:
trunk
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r247860 r247866  
     12019-07-26  Zalan Bujtas  <zalan@apple.com>
     2
     3        Unable to tap/double tap to open files/folders in Google Drive in Safari
     4        https://bugs.webkit.org/show_bug.cgi?id=200096
     5        <rdar://problem/52748552>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        1. Rebaseline (progression).
     10        2. Payment request tests activate elements by tapping on them at a high speed, triggering double clicks instead. Let's slow them down a bit.
     11
     12        * fast/events/touch/ios/double-tap-for-double-click3-expected.txt:
     13        * http/tests/adClickAttribution/anchor-tag-attributes-validation.html:
     14        * http/tests/resources/payment-request.js:
     15        (activateThen):
     16        * resources/ui-helper.js:
     17        (window.UIHelper.activateElementAtHumanSpeed.return.new.Promise):
     18        (window.UIHelper.activateElementAtHumanSpeed):
     19        * tests-options.json:
     20
    1212019-07-26  Rob Buis  <rbuis@igalia.com>
    222
  • trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt

    r247820 r247866  
    11PASS if 'double click' text is NOT shown below.
    2 [click][click]
     2[click]
  • trunk/LayoutTests/http/tests/adClickAttribution/anchor-tag-attributes-validation-expected.txt

    r244086 r247866  
    1 CONSOLE MESSAGE: line 165: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.
    2 CONSOLE MESSAGE: line 165: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.
    3 CONSOLE MESSAGE: line 165: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
    4 CONSOLE MESSAGE: line 165: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
    5 CONSOLE MESSAGE: line 165: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
    6 CONSOLE MESSAGE: line 165: addestination could not be converted to a valid HTTP-family URL.
    7 CONSOLE MESSAGE: line 165: addestination could not be converted to a valid HTTP-family URL.
    8 CONSOLE MESSAGE: line 165: addestination could not be converted to a valid HTTP-family URL.
    9 CONSOLE MESSAGE: line 165: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.
    10 CONSOLE MESSAGE: line 165: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.
    11 CONSOLE MESSAGE: line 165: addestination can not be the same site as the current website.
     1CONSOLE MESSAGE: line 192: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.
     2CONSOLE MESSAGE: line 192: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.
     3CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
     4CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
     5CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.
     6CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL.
     7CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL.
     8CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL.
     9CONSOLE MESSAGE: line 192: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.
     10CONSOLE MESSAGE: line 192: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.
     11CONSOLE MESSAGE: line 192: addestination can not be the same site as the current website.
    1212Test for validity of ad click attribution attributes on anchor tags.
    1313
  • trunk/LayoutTests/http/tests/adClickAttribution/anchor-tag-attributes-validation.html

    r244581 r247866  
    2626
    2727    function activateElement(elementID, callback) {
    28         var element = document.getElementById(elementID);
    29         var centerX = element.offsetLeft + element.offsetWidth / 2;
    30         var centerY = element.offsetTop + element.offsetHeight / 2;
    31         UIHelper.activateAt(centerX, centerY).then(
     28        UIHelper.activateElementAtHumanSpeed(document.getElementById(elementID)).then(
    3229            function () {
    3330                callback();
  • trunk/LayoutTests/http/tests/resources/payment-request.js

    r237381 r247866  
    99        };
    1010        document.body.insertBefore(button, document.body.firstChild);
    11         UIHelper.activateElement(button);
     11        UIHelper.activateElementAtHumanSpeed(button);
    1212    });
    1313}
  • trunk/LayoutTests/resources/ui-helper.js

    r247839 r247866  
    182182    }
    183183
     184    static activateElementAtHumanSpeed(element)
     185    {
     186        const x = element.offsetLeft + element.offsetWidth / 2;
     187        const y = element.offsetTop + element.offsetHeight / 2;
     188
     189        if (!this.isWebKit2() || !this.isIOSFamily()) {
     190            eventSender.mouseMoveTo(x, y);
     191            eventSender.mouseDown();
     192            eventSender.mouseUp();
     193            return Promise.resolve();
     194        }
     195
     196        return new Promise(async (resolve) => {
     197            await new Promise(resolveAfterDelay => setTimeout(resolveAfterDelay, 350));
     198            testRunner.runUIScript(`
     199                uiController.singleTapAtPoint(${x}, ${y}, function() {
     200                    uiController.uiScriptComplete();
     201                });`, resolve);
     202        });
     203    }
     204
    184205    static async doubleActivateAt(x, y)
    185206    {
  • trunk/LayoutTests/tests-options.json

    r247193 r247866  
    18981898    "imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html": [
    18991899        "slow"
     1900    ],
     1901    "http/tests/paymentrequest/payment-response-reference-cycle-leak.https.html": [
     1902        "slow"
    19001903    ]
    19011904}
  • trunk/Source/WebKit/ChangeLog

    r247864 r247866  
     12019-07-26  Zalan Bujtas  <zalan@apple.com>
     2
     3        Unable to tap/double tap to open files/folders in Google Drive in Safari
     4        https://bugs.webkit.org/show_bug.cgi?id=200096
     5        <rdar://problem/52748552>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        This patch reverts to the original double-tap-for-double-click implementation (see r244775 and r246347 for more information).
     10
     11        * Shared/WebPageCreationParameters.cpp:
     12        (WebKit::WebPageCreationParameters::encode const):
     13        (WebKit::WebPageCreationParameters::decode):
     14        * Shared/WebPageCreationParameters.h:
     15        * UIProcess/PageClient.h:
     16        * UIProcess/WebPageProxy.cpp:
     17        (WebKit::WebPageProxy::creationParameters):
     18        * UIProcess/WebPageProxy.h:
     19        * UIProcess/ios/PageClientImplIOS.h:
     20        * UIProcess/ios/PageClientImplIOS.mm:
     21        (WebKit::PageClientImpl::doubleTapForDoubleClickDelay): Deleted.
     22        (WebKit::PageClientImpl::doubleTapForDoubleClickRadius): Deleted.
     23        * UIProcess/ios/WKContentViewInteraction.h:
     24        * UIProcess/ios/WKContentViewInteraction.mm:
     25        (-[WKContentView setupInteraction]):
     26        (-[WKContentView cleanupInteraction]):
     27        (-[WKContentView _removeDefaultGestureRecognizers]):
     28        (-[WKContentView _addDefaultGestureRecognizers]):
     29        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Do not recognize the single and double gestures the same time.
     30        (-[WKContentView gestureRecognizerShouldBegin:]):
     31        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
     32        (-[WKContentView _didStartProvisionalLoadForMainFrame]):
     33        (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): Deleted.
     34        (-[WKContentView _doubleTapForDoubleClickDelay]): Deleted.
     35        (-[WKContentView _doubleTapForDoubleClickRadius]): Deleted.
     36        * UIProcess/ios/WebPageProxyIOS.mm:
     37        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
     38        * WebProcess/WebPage/WebPage.cpp:
     39        * WebProcess/WebPage/WebPage.h:
     40        * WebProcess/WebPage/WebPage.messages.in:
     41        * WebProcess/WebPage/ios/WebPageIOS.mm:
     42        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):
     43        (WebKit::WebPage::commitPotentialTap):
     44        (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): Deleted.
     45
    1462019-07-26  Eric Liang  <ericliang@apple.com>
    247
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r247820 r247866  
    9999    encoder << keyboardIsAttached;
    100100    encoder << canShowWhileLocked;
    101     encoder << doubleTapForDoubleClickDelay;
    102     encoder << doubleTapForDoubleClickRadius;
    103101    encoder << overrideViewportArguments;
    104102#endif
     
    293291    if (!decoder.decode(parameters.canShowWhileLocked))
    294292        return WTF::nullopt;
    295     if (!decoder.decode(parameters.doubleTapForDoubleClickDelay))
    296         return WTF::nullopt;
    297     if (!decoder.decode(parameters.doubleTapForDoubleClickRadius))
    298         return WTF::nullopt;
    299293
    300294    Optional<Optional<WebCore::ViewportArguments>> overrideViewportArguments;
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

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

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

    r247853 r247866  
    72127212    parameters.overrideViewportArguments = m_overrideViewportArguments;
    72137213    parameters.canShowWhileLocked = m_configuration->canShowWhileLocked();
    7214     parameters.doubleTapForDoubleClickDelay = pageClient().doubleTapForDoubleClickDelay();
    7215     parameters.doubleTapForDoubleClickRadius = pageClient().doubleTapForDoubleClickRadius();
    72167214#endif
    72177215
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r247820 r247866  
    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);
    12281229
    12291230    void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&);
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h

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

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

    r247820 r247866  
    217217    RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer;
    218218    RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer;
     219    RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick;
    219220    RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer;
    220221    RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer;
     
    481482- (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler;
    482483- (void)_setDoubleTapGesturesEnabled:(BOOL)enabled;
    483 - (double)_doubleTapForDoubleClickDelay;
    484 - (float)_doubleTapForDoubleClickRadius;
    485484#if ENABLE(DATA_DETECTION)
    486485- (NSArray *)_dataDetectionResults;
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r247838 r247866  
    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 
    701691- (void)setupInteraction
    702692{
     
    745735    [self addGestureRecognizer:_singleTapGestureRecognizer.get()];
    746736
    747     [self _ensureNonBlockingDoubleTapGestureRecognizer];
     737    _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]);
     738    [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2];
     739    [_nonBlockingDoubleTapGestureRecognizer setDelegate:self];
     740    [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO];
    748741    [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()];
    749747
    750748    [self _createAndConfigureDoubleTapGestureRecognizer];
     
    895893    [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
    896894
     895    [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil];
     896    [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
     897
    897898    [_twoFingerDoubleTapGestureRecognizer setDelegate:nil];
    898899    [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
     
    971972    [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()];
    972973    [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
     974    [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    973975    [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
    974976    [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()];
     
    990992    [self addGestureRecognizer:_doubleTapGestureRecognizer.get()];
    991993    [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()];
     994    [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];
    992995    [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()];
    993996    [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()];
     
    18931896        return YES;
    18941897
     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
    18951904    return NO;
    18961905}
     
    20852094        || gestureRecognizer == _doubleTapGestureRecognizer
    20862095        || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer
     2096        || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick
    20872097        || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) {
    20882098
     
    23212331        break;
    23222332    }
     2333}
     2334
     2335- (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer
     2336{
     2337    _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart);
    23232338}
    23242339
     
    38993914- (void)_didStartProvisionalLoadForMainFrame
    39003915{
    3901     // We need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which
     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
    39023920    // are enabled when a single tap is first recognized. This avoids tests running in sequence and simulating taps
    39033921    // in the same location to trigger double-tap recognition.
     
    39673985    [_nonBlockingDoubleTapGestureRecognizer setEnabled:!enabled];
    39683986    [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;
    39913987}
    39923988
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r247820 r247866  
    839839}
    840840
     841void 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
    841846void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position)
    842847{
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

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

    r247822 r247866  
    637637    void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&);
    638638    void didRecognizeLongPress();
    639     bool handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);
     639    void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);
    640640
    641641    void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&);
     
    18691869    bool m_canShowWhileLocked { false };
    18701870    bool m_inDynamicSizeUpdate { false };
    1871     Seconds m_doubleTapForDoubleClickDelay { 350_ms };
    1872     float m_doubleTapForDoubleClickRadius { 45 };
    18731871    HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory;
    18741872    RefPtr<WebCore::Node> m_pendingSyntheticClickNode;
     
    18811879    double m_lastTransactionPageScaleFactor { 0 };
    18821880    uint64_t m_lastTransactionIDWithScaleChange { 0 };
    1883     Optional<MonotonicTime> m_lastCommittedTapTimestamp;
    1884     Optional<WebCore::FloatPoint> m_lastCommittedTapLocation;
    18851881
    18861882    CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply;
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r247822 r247866  
    6060    TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point)
    6161    DidRecognizeLongPress()
     62    HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)
    6263    InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point)
    6364    InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point)
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r247820 r247866  
    833833}
    834834
    835 bool 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 
     835void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)
     836{
    848837    FloatPoint adjustedPoint;
    849     auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(m_potentialTapLocation, adjustedPoint);
     838    auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(point, adjustedPoint);
    850839    if (!nodeRespondingToDoubleClick)
    851         return false;
     840        return;
    852841
    853842    auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame();
    854843    if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad())
    855         return false;
     844        return;
    856845
    857846    bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey);
     
    862851    nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap));
    863852    if (m_isClosed)
    864         return false;
     853        return;
    865854    nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap));
    866     return true;
    867855}
    868856
     
    10851073void WebPage::commitPotentialTap(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId, WebCore::PointerID pointerId)
    10861074{
    1087     auto currentPotentialTapLocation = m_potentialTapLocation;
    1088     auto updateLastCommittedLocationAndTimestamp = [&] {
    1089         m_lastCommittedTapTimestamp = MonotonicTime::now();
    1090         m_lastCommittedTapLocation = currentPotentialTapLocation;
    1091     };
    1092 
    10931075    auto invalidTargetForSingleClick = !m_potentialTapNode;
    10941076    if (!invalidTargetForSingleClick) {
     
    10991081    }
    11001082    if (invalidTargetForSingleClick) {
    1101         // When the node has no click eventlistener, but it may have a dblclick one.
    1102         handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId);
    11031083        commitPotentialTapFailed();
    1104         return updateLastCommittedLocationAndTimestamp();
     1084        return;
    11051085    }
    11061086
     
    11111091    if (!frameRespondingToClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) {
    11121092        commitPotentialTapFailed();
    1113         return updateLastCommittedLocationAndTimestamp();
     1093        return;
    11141094    }
    11151095
     
    11221102        } else
    11231103#endif
    1124         {
    1125             if (handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId))
    1126                 commitPotentialTapFailed();
    1127             else
    1128                 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId);
    1129         }
     1104            handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId);
    11301105    } else
    11311106        commitPotentialTapFailed();
     
    11341109    m_potentialTapLocation = FloatPoint();
    11351110    m_potentialTapSecurityOrigin = nullptr;
    1136     return updateLastCommittedLocationAndTimestamp();
    11371111}
    11381112
Note: See TracChangeset for help on using the changeset viewer.