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)