Title: [213584] trunk/Source/WebKit2
Revision
213584
Author
[email protected]
Date
2017-03-08 10:33:15 -0800 (Wed, 08 Mar 2017)

Log Message

Switching focus from a UITextField to an editable WKWebView causes the keyboard to dance
https://bugs.webkit.org/show_bug.cgi?id=168932
<rdar://problem/30193996>

Reviewed by Beth Dakin.

When WKWebView first becomes first responder from a tap, we don't have
enough information to immediately respond accurately to various questions
from UIKit, because we haven't had time to ask the Web Content process
what is under the touch. Defer updating input views until we get a
response or lose first responder status, so that the keyboard doesn't
start transitioning to its new state until we know what that is.

There is currently no test because TestWebKitAPI has no UIApplication,
and thus cannot generate mock events.

* Platform/spi/ios/UIKitSPI.h:
* WebKit2.xcodeproj/project.pbxproj:
* UIProcess/ios/InputViewUpdateDeferrer.h: Added.
* UIProcess/ios/InputViewUpdateDeferrer.mm: Added.
Add an RAII object that defers input view updates while alive.

* UIProcess/ios/WKContentView.mm:
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView cleanupInteraction]):
(-[WKContentView _commitPotentialTapFailed]):
(-[WKContentView _didNotHandleTapAsClick:]):
(-[WKContentView _didCompleteSyntheticClick]):
(-[WKContentView _singleTapCommited:]):
(-[WKContentView _attemptClickAtLocation:]):
(-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
Create a InputViewUpdateDeferrer just before we become first responder
from a tap, and destroy it when we get a response (of any kind) or lose
first-responder status (or interaction is torn down).

* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::didCompleteSyntheticClick):
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::didCompleteSyntheticClick):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::completeSyntheticClick):
Plumb an indication that the synthetic click completed, regardless of
how it was handled.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (213583 => 213584)


--- trunk/Source/WebKit2/ChangeLog	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/ChangeLog	2017-03-08 18:33:15 UTC (rev 213584)
@@ -1,3 +1,54 @@
+2017-03-08  Tim Horton  <[email protected]>
+
+        Switching focus from a UITextField to an editable WKWebView causes the keyboard to dance
+        https://bugs.webkit.org/show_bug.cgi?id=168932
+        <rdar://problem/30193996>
+
+        Reviewed by Beth Dakin.
+
+        When WKWebView first becomes first responder from a tap, we don't have
+        enough information to immediately respond accurately to various questions
+        from UIKit, because we haven't had time to ask the Web Content process
+        what is under the touch. Defer updating input views until we get a
+        response or lose first responder status, so that the keyboard doesn't
+        start transitioning to its new state until we know what that is.
+
+        There is currently no test because TestWebKitAPI has no UIApplication,
+        and thus cannot generate mock events.
+
+        * Platform/spi/ios/UIKitSPI.h:
+        * WebKit2.xcodeproj/project.pbxproj:
+        * UIProcess/ios/InputViewUpdateDeferrer.h: Added.
+        * UIProcess/ios/InputViewUpdateDeferrer.mm: Added.
+        Add an RAII object that defers input view updates while alive.
+
+        * UIProcess/ios/WKContentView.mm:
+        * UIProcess/ios/WKContentViewInteraction.h:
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView cleanupInteraction]):
+        (-[WKContentView _commitPotentialTapFailed]):
+        (-[WKContentView _didNotHandleTapAsClick:]):
+        (-[WKContentView _didCompleteSyntheticClick]):
+        (-[WKContentView _singleTapCommited:]):
+        (-[WKContentView _attemptClickAtLocation:]):
+        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
+        Create a InputViewUpdateDeferrer just before we become first responder
+        from a tap, and destroy it when we get a response (of any kind) or lose
+        first-responder status (or interaction is torn down).
+
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * UIProcess/ios/PageClientImplIOS.h:
+        * UIProcess/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::didCompleteSyntheticClick):
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::didCompleteSyntheticClick):
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::completeSyntheticClick):
+        Plumb an indication that the synthetic click completed, regardless of
+        how it was handled.
+
 2017-03-08  Zan Dobersek  <[email protected]>
 
         [WK2] Guard GLib-specific code in Module, Connection files with USE(GLIB)

Modified: trunk/Source/WebKit2/Platform/spi/ios/UIKitSPI.h (213583 => 213584)


--- trunk/Source/WebKit2/Platform/spi/ios/UIKitSPI.h	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/Platform/spi/ios/UIKitSPI.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -864,6 +864,11 @@
 - (CGRect)accessibilityConvertRectToSceneReferenceCoordinates:(CGRect)rect;
 @end
 
+@interface UIPeripheralHost (IPI)
+- (void)_beginIgnoringReloadInputViews;
+- (void)_endIgnoringReloadInputViews;
+@end
+
 @interface UIResponder ()
 - (UIResponder *)firstResponder;
 @end

Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/PageClient.h	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -208,6 +208,7 @@
     virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) = 0;
     virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) = 0;
     virtual void didNotHandleTapAsClick(const WebCore::IntPoint&) = 0;
+    virtual void didCompleteSyntheticClick() = 0;
 #endif
     
     virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -547,6 +547,7 @@
     void applicationDidBecomeActive();
     void commitPotentialTapFailed();
     void didNotHandleTapAsClick(const WebCore::IntPoint&);
+    void didCompleteSyntheticClick();
     void disableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID);
     void contentSizeCategoryDidChange(const String& contentSizeCategory);
     void getSelectionContext(std::function<void(const String&, const String&, const String&, CallbackBase::Error)>);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2017-03-08 18:33:15 UTC (rev 213584)
@@ -182,6 +182,7 @@
     ShowPlaybackTargetPicker(bool hasVideo, WebCore::IntRect elementRect)
     CommitPotentialTapFailed()
     DidNotHandleTapAsClick(WebCore::IntPoint point)
+    DidCompleteSyntheticClick()
     DisableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID)
     DrawToPDFCallback(IPC::DataReference pdfData, uint64_t callbackID)
     SelectionRectsCallback(Vector<WebCore::SelectionRect> selectionRects, uint64_t callbackID);

Added: trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.h (0 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <wtf/Noncopyable.h>
+
+#if PLATFORM(IOS)
+
+namespace WebKit {
+
+class InputViewUpdateDeferrer {
+    WTF_MAKE_NONCOPYABLE(InputViewUpdateDeferrer);
+public:
+    InputViewUpdateDeferrer();
+    ~InputViewUpdateDeferrer();
+};
+
+}
+
+#endif // PLATFORM(IOS)

Added: trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.mm (0 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.mm	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/ios/InputViewUpdateDeferrer.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "InputViewUpdateDeferrer.h"
+
+#if PLATFORM(IOS)
+
+#import "UIKitSPI.h"
+
+using namespace WebKit;
+
+namespace WebKit {
+
+InputViewUpdateDeferrer::InputViewUpdateDeferrer()
+{
+    [[UIPeripheralHost sharedInstance] _beginIgnoringReloadInputViews];
+}
+
+InputViewUpdateDeferrer::~InputViewUpdateDeferrer()
+{
+    [[UIPeripheralHost sharedInstance] _endIgnoringReloadInputViews];
+}
+    
+}
+
+#endif // PLATFORM(IOS)

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -184,6 +184,7 @@
     void didFailLoadForMainFrame() override;
     void didSameDocumentNavigationForMainFrame(SameDocumentNavigationType) override;
     void didNotHandleTapAsClick(const WebCore::IntPoint&) override;
+    void didCompleteSyntheticClick() override;
 
     void didChangeBackgroundColor() override;
 

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -221,6 +221,11 @@
 {
     [m_contentView _didNotHandleTapAsClick:point];
 }
+    
+void PageClientImpl::didCompleteSyntheticClick()
+{
+    [m_contentView _didCompleteSyntheticClick];
+}
 
 bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, API::SecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
 {

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -31,6 +31,7 @@
 #import "APIPageConfiguration.h"
 #import "AccessibilityIOS.h"
 #import "ApplicationStateTracker.h"
+#import "InputViewUpdateDeferrer.h"
 #import "Logging.h"
 #import "PageClientImplIOS.h"
 #import "PrintInfo.h"

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2017-03-08 18:33:15 UTC (rev 213584)
@@ -60,6 +60,7 @@
 }
 
 namespace WebKit {
+class InputViewUpdateDeferrer;
 class NativeWebTouchEvent;
 class SmartMagnificationController;
 class WebOpenPanelResultListenerProxy;
@@ -165,6 +166,8 @@
     WebKit::WKSelectionDrawingInfo _lastSelectionDrawingInfo;
 
     std::optional<WebKit::InteractionInformationRequest> _outstandingPositionInformationRequest;
+    
+    std::unique_ptr<WebKit::InputViewUpdateDeferrer> _inputViewUpdateDeferrer;
 
     BOOL _isEditable;
     BOOL _showingTextStyleOptions;
@@ -241,6 +244,7 @@
 #endif
 - (void)_commitPotentialTapFailed;
 - (void)_didNotHandleTapAsClick:(const WebCore::IntPoint&)point;
+- (void)_didCompleteSyntheticClick;
 - (void)_didGetTapHighlightForRequest:(uint64_t)requestID color:(const WebCore::Color&)color quads:(const Vector<WebCore::FloatQuad>&)highlightedQuads topLeftRadius:(const WebCore::IntSize&)topLeftRadius topRightRadius:(const WebCore::IntSize&)topRightRadius bottomLeftRadius:(const WebCore::IntSize&)bottomLeftRadius bottomRightRadius:(const WebCore::IntSize&)bottomRightRadius;
 
 - (BOOL)_mayDisableDoubleTapGesturesDuringSingleTap;

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -30,6 +30,7 @@
 
 #import "APIUIClient.h"
 #import "EditingRange.h"
+#import "InputViewUpdateDeferrer.h"
 #import "Logging.h"
 #import "ManagedConfigurationSPI.h"
 #import "NativeWebKeyboardEvent.h"
@@ -658,6 +659,8 @@
         [_fileUploadPanel dismiss];
         _fileUploadPanel = nil;
     }
+    
+    _inputViewUpdateDeferrer = nullptr;
 }
 
 - (void)_removeDefaultGestureRecognizers
@@ -851,6 +854,8 @@
     [self _cancelInteraction];
     [_webSelectionAssistant resignedFirstResponder];
     [_textSelectionAssistant deactivateSelection];
+    
+    _inputViewUpdateDeferrer = nullptr;
 
     bool superDidResign = [super resignFirstResponder];
 
@@ -1593,10 +1598,14 @@
 - (void)_commitPotentialTapFailed
 {
     [self _cancelInteraction];
+    
+    _inputViewUpdateDeferrer = nullptr;
 }
 
 - (void)_didNotHandleTapAsClick:(const WebCore::IntPoint&)point
 {
+    _inputViewUpdateDeferrer = nullptr;
+
     // FIXME: we should also take into account whether or not the UI delegate
     // has handled this notification.
     if (_hasValidPositionInformation && point == _positionInformation.request.point && _positionInformation.isDataDetectorLink) {
@@ -1611,12 +1620,20 @@
     _isDoubleTapPending = NO;
 }
 
+- (void)_didCompleteSyntheticClick
+{
+    _inputViewUpdateDeferrer = nullptr;
+}
+
 - (void)_singleTapCommited:(UITapGestureRecognizer *)gestureRecognizer
 {
     ASSERT(gestureRecognizer == _singleTapGestureRecognizer);
 
-    if (![self isFirstResponder])
+    if (![self isFirstResponder]) {
+        if (!_inputViewUpdateDeferrer)
+            _inputViewUpdateDeferrer = std::make_unique<InputViewUpdateDeferrer>();
         [self becomeFirstResponder];
+    }
 
     if (_webSelectionAssistant && ![_webSelectionAssistant shouldHandleSingleTapAtPoint:gestureRecognizer.location]) {
         [self _singleTapDidReset:gestureRecognizer];
@@ -1676,8 +1693,11 @@
 
 - (void)_attemptClickAtLocation:(CGPoint)location
 {
-    if (![self isFirstResponder])
+    if (![self isFirstResponder]) {
+        if (!_inputViewUpdateDeferrer)
+            _inputViewUpdateDeferrer = std::make_unique<InputViewUpdateDeferrer>();
         [self becomeFirstResponder];
+    }
 
     [_inputPeripheral endEditing];
     _page->handleTap(location, _layerTreeTransactionIdAtLastTouchStart);
@@ -3734,6 +3754,8 @@
 
 - (void)_startAssistingNode:(const AssistedNodeInformation&)information userIsInteracting:(BOOL)userIsInteracting blurPreviousNode:(BOOL)blurPreviousNode userObject:(NSObject <NSSecureCoding> *)userObject
 {
+    _inputViewUpdateDeferrer = nullptr;
+
     id <_WKInputDelegate> inputDelegate = [_webView _inputDelegate];
     RetainPtr<WKFocusedElementInfo> focusedElementInfo = adoptNS([[WKFocusedElementInfo alloc] initWithAssistedNodeInformation:information isUserInitiated:userIsInteracting]);
     BOOL shouldShowKeyboard;

Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (213583 => 213584)


--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -1038,6 +1038,11 @@
     m_pageClient.didNotHandleTapAsClick(point);
     m_uiClient->didNotHandleTapAsClick(point);
 }
+    
+void WebPageProxy::didCompleteSyntheticClick()
+{
+    m_pageClient.didCompleteSyntheticClick();
+}
 
 void WebPageProxy::disableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID)
 {

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (213583 => 213584)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2017-03-08 18:33:15 UTC (rev 213584)
@@ -697,6 +697,8 @@
 		2DC6D9C418C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */; };
 		2DD12A081A8177F3002C74E6 /* WKPageRenderingProgressEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD12A071A8177F3002C74E6 /* WKPageRenderingProgressEvents.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		2DD13BD518F7DADD00E130A1 /* FindControllerIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DD13BD318F7DADD00E130A1 /* FindControllerIOS.mm */; };
+		2DD45ADE1E5F8972006C355F /* InputViewUpdateDeferrer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD45ADC1E5F8972006C355F /* InputViewUpdateDeferrer.h */; };
+		2DD45ADF1E5F8972006C355F /* InputViewUpdateDeferrer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DD45ADD1E5F8972006C355F /* InputViewUpdateDeferrer.mm */; };
 		2DD67A2E1BD819730053B251 /* APIFindMatchesClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD67A2D1BD819730053B251 /* APIFindMatchesClient.h */; };
 		2DD67A351BD861060053B251 /* WKTextFinderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD67A331BD861060053B251 /* WKTextFinderClient.h */; };
 		2DD67A361BD861060053B251 /* WKTextFinderClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DD67A341BD861060053B251 /* WKTextFinderClient.mm */; };
@@ -2862,6 +2864,8 @@
 		2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewContentProviderRegistry.mm; sourceTree = "<group>"; };
 		2DD12A071A8177F3002C74E6 /* WKPageRenderingProgressEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageRenderingProgressEvents.h; sourceTree = "<group>"; };
 		2DD13BD318F7DADD00E130A1 /* FindControllerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = FindControllerIOS.mm; path = ios/FindControllerIOS.mm; sourceTree = "<group>"; };
+		2DD45ADC1E5F8972006C355F /* InputViewUpdateDeferrer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InputViewUpdateDeferrer.h; path = ios/InputViewUpdateDeferrer.h; sourceTree = "<group>"; };
+		2DD45ADD1E5F8972006C355F /* InputViewUpdateDeferrer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InputViewUpdateDeferrer.mm; path = ios/InputViewUpdateDeferrer.mm; sourceTree = "<group>"; };
 		2DD67A2D1BD819730053B251 /* APIFindMatchesClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIFindMatchesClient.h; sourceTree = "<group>"; };
 		2DD67A331BD861060053B251 /* WKTextFinderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKTextFinderClient.h; sourceTree = "<group>"; };
 		2DD67A341BD861060053B251 /* WKTextFinderClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKTextFinderClient.mm; sourceTree = "<group>"; };
@@ -5247,6 +5251,8 @@
 				A19DD3BF1D07D16800AC823B /* _WKWebViewPrintFormatterInternal.h */,
 				1AD4C1911B39F33200ABC28E /* ApplicationStateTracker.h */,
 				1AD4C1901B39F33200ABC28E /* ApplicationStateTracker.mm */,
+				2DD45ADC1E5F8972006C355F /* InputViewUpdateDeferrer.h */,
+				2DD45ADD1E5F8972006C355F /* InputViewUpdateDeferrer.mm */,
 				0F0C365D18C110A500F607D7 /* LayerRepresentation.mm */,
 				0FCB4E3618BBE044000FCFC9 /* PageClientImplIOS.h */,
 				0FCB4E3718BBE044000FCFC9 /* PageClientImplIOS.mm */,
@@ -8813,6 +8819,7 @@
 				7CD5EBBF1746B04C000C1C45 /* WKTypeRefWrapper.h in Headers */,
 				1AD8790A18B6C38A006CAFD7 /* WKUIDelegate.h in Headers */,
 				3743925818BC4C60001C8675 /* WKUIDelegatePrivate.h in Headers */,
+				2DD45ADE1E5F8972006C355F /* InputViewUpdateDeferrer.h in Headers */,
 				BC40760A124FF0270068F20A /* WKURL.h in Headers */,
 				BC40761C124FF0370068F20A /* WKURLCF.h in Headers */,
 				BC40760C124FF0270068F20A /* WKURLRequest.h in Headers */,
@@ -9678,6 +9685,7 @@
 				C02BFF1E1251502E009CCBEA /* NativeWebKeyboardEventMac.mm in Sources */,
 				31EA25D2134F78C0005B1452 /* NativeWebMouseEventMac.mm in Sources */,
 				2DA9449F1884E4F000ED86DB /* NativeWebTouchEventIOS.mm in Sources */,
+				2DD45ADF1E5F8972006C355F /* InputViewUpdateDeferrer.mm in Sources */,
 				DF58C6361371ACA000F9A37C /* NativeWebWheelEventMac.mm in Sources */,
 				1ADCB86A189831B30022EE5A /* NavigationActionData.cpp in Sources */,
 				1ABC3DF51899E437004F0626 /* NavigationState.mm in Sources */,

Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (213583 => 213584)


--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2017-03-08 18:22:56 UTC (rev 213583)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2017-03-08 18:33:15 UTC (rev 213584)
@@ -621,6 +621,8 @@
 
     if (!tapWasHandled || !nodeRespondingToClick || !nodeRespondingToClick->isElementNode())
         send(Messages::WebPageProxy::DidNotHandleTapAsClick(roundedIntPoint(location)));
+    
+    send(Messages::WebPageProxy::DidCompleteSyntheticClick());
 }
 
 void WebPage::handleTap(const IntPoint& point, uint64_t lastLayerTreeTransactionId)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to