Diff
Modified: trunk/Source/WebKit/ChangeLog (226479 => 226480)
--- trunk/Source/WebKit/ChangeLog 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/ChangeLog 2018-01-06 01:53:44 UTC (rev 226480)
@@ -1,3 +1,34 @@
+2018-01-05 Megan Gardner <[email protected]>
+
+ Show Keyboard when re-launching WKWebView with a previously focused element
+ https://bugs.webkit.org/show_bug.cgi?id=181353
+
+ Reviewed by Tim Horton.
+
+ When relaunching an app with a WKWebView, restore the keyboard if there was a previously
+ focused element that was being assisted. The element was already being tracked, we just
+ needed to not bail on showing the keyboard for instances where it was a state change that
+ caused the element to be refocused.
+
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/ios/PageClientImplIOS.h:
+ * UIProcess/ios/PageClientImplIOS.mm:
+ (WebKit::PageClientImpl::startAssistingNode):
+ * UIProcess/ios/WKContentView.h:
+ * UIProcess/ios/WKContentViewInteraction.h:
+ * UIProcess/ios/WKContentViewInteraction.mm:
+ (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
+ (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Deleted.
+ * UIProcess/ios/WebPageProxyIOS.mm:
+ (WebKit::WebPageProxy::startAutoscrollAtPosition):
+ (WebKit::WebPageProxy::startAssistingNode):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::setActivityState):
+ (WebKit::WebPage::elementDidFocus):
+ * WebProcess/WebPage/WebPage.h:
+
2018-01-05 Alex Christensen <[email protected]>
Restrict navigation-time WKWebsiteDataStore swapping to main frame navigations
Modified: trunk/Source/WebKit/UIProcess/PageClient.h (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/PageClient.h 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/PageClient.h 2018-01-06 01:53:44 UTC (rev 226480)
@@ -290,7 +290,7 @@
virtual void restorePageState(std::optional<WebCore::FloatPoint> scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatBoxExtent& obscuredInsetsOnSave, double scale) = 0;
virtual void restorePageCenterAndScale(std::optional<WebCore::FloatPoint> center, double scale) = 0;
- virtual void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) = 0;
+ virtual void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, API::Object* userData) = 0;
virtual void stopAssistingNode() = 0;
virtual bool isAssistingNode() = 0;
virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) = 0;
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-01-06 01:53:44 UTC (rev 226480)
@@ -284,6 +284,7 @@
AssistedNodeInformation m_nodeInformation;
bool m_userIsInteracting;
bool m_blurPreviousNode;
+ bool m_changingActivityState;
RefPtr<API::Object> m_userData;
};
@@ -1600,7 +1601,7 @@
void didGetTapHighlightGeometries(uint64_t requestID, const WebCore::Color& color, const Vector<WebCore::FloatQuad>& geometries, const WebCore::IntSize& topLeftRadius, const WebCore::IntSize& topRightRadius, const WebCore::IntSize& bottomLeftRadius, const WebCore::IntSize& bottomRightRadius);
- void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, const UserData&);
+ void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, const UserData&);
void stopAssistingNode();
void showInspectorHighlight(const WebCore::Highlight&);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-01-06 01:53:44 UTC (rev 226480)
@@ -392,7 +392,7 @@
RestorePageCenterAndScale(std::optional<WebCore::FloatPoint> unobscuredCenter, double scale)
DidGetTapHighlightGeometries(uint64_t requestID, WebCore::Color color, Vector<WebCore::FloatQuad> geometries, WebCore::IntSize topLeftRadius, WebCore::IntSize topRightRadius, WebCore::IntSize bottomLeftRadius, WebCore::IntSize bottomRightRadius)
- StartAssistingNode(struct WebKit::AssistedNodeInformation information, bool userIsInteracting, bool blurPreviousNode, WebKit::UserData userData)
+ StartAssistingNode(struct WebKit::AssistedNodeInformation information, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, WebKit::UserData userData)
StopAssistingNode()
OverflowScrollWillStartScroll()
OverflowScrollDidEndScroll()
Modified: trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h 2018-01-06 01:53:44 UTC (rev 226480)
@@ -125,7 +125,7 @@
void restorePageState(std::optional<WebCore::FloatPoint>, const WebCore::FloatPoint&, const WebCore::FloatBoxExtent&, double) override;
void restorePageCenterAndScale(std::optional<WebCore::FloatPoint>, double) override;
- void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) override;
+ void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, API::Object* userData) override;
void stopAssistingNode() override;
bool isAssistingNode() override;
void selectionDidChange() override;
Modified: trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm 2018-01-06 01:53:44 UTC (rev 226480)
@@ -534,7 +534,7 @@
[m_webView _restorePageStateToUnobscuredCenter:center scale:scale];
}
-void PageClientImpl::startAssistingNode(const AssistedNodeInformation& nodeInformation, bool userIsInteracting, bool blurPreviousNode, API::Object* userData)
+void PageClientImpl::startAssistingNode(const AssistedNodeInformation& nodeInformation, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, API::Object* userData)
{
MESSAGE_CHECK(!userData || userData->type() == API::Object::Type::Data);
@@ -549,7 +549,7 @@
}
}
- [m_contentView _startAssistingNode:nodeInformation userIsInteracting:userIsInteracting blurPreviousNode:blurPreviousNode userObject:userObject];
+ [m_contentView _startAssistingNode:nodeInformation userIsInteracting:userIsInteracting blurPreviousNode:blurPreviousNode changingActivityState:changingActivityState userObject:userObject];
}
bool PageClientImpl::isAssistingNode()
Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h 2018-01-06 01:53:44 UTC (rev 226480)
@@ -283,7 +283,7 @@
- (BOOL)_mayDisableDoubleTapGesturesDuringSingleTap;
- (void)_disableDoubleTapGesturesDuringTapIfNecessary:(uint64_t)requestID;
-- (void)_startAssistingNode:(const WebKit::AssistedNodeInformation&)information userIsInteracting:(BOOL)userIsInteracting blurPreviousNode:(BOOL)blurPreviousNode userObject:(NSObject <NSSecureCoding> *)userObject;
+- (void)_startAssistingNode:(const WebKit::AssistedNodeInformation&)information userIsInteracting:(BOOL)userIsInteracting blurPreviousNode:(BOOL)blurPreviousNode changingActivityState:(bool)changingActivityState userObject:(NSObject <NSSecureCoding> *)userObject;
- (void)_stopAssistingNode;
- (void)_selectionChanged;
- (void)_updateChangedSelection;
Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2018-01-06 01:53:44 UTC (rev 226480)
@@ -3865,7 +3865,7 @@
return false;
}
-- (void)_startAssistingNode:(const AssistedNodeInformation&)information userIsInteracting:(BOOL)userIsInteracting blurPreviousNode:(BOOL)blurPreviousNode userObject:(NSObject <NSSecureCoding> *)userObject
+- (void)_startAssistingNode:(const AssistedNodeInformation&)information userIsInteracting:(BOOL)userIsInteracting blurPreviousNode:(BOOL)blurPreviousNode changingActivityState:(BOOL)changingActivityState userObject:(NSObject <NSSecureCoding> *)userObject
{
_inputViewUpdateDeferrer = nullptr;
@@ -3877,7 +3877,7 @@
shouldShowKeyboard = [inputDelegate _webView:_webView focusShouldStartInputSession:focusedElementInfo.get()];
else {
// The default behavior is to allow node assistance if the user is interacting or the keyboard is already active.
- shouldShowKeyboard = userIsInteracting || _textSelectionAssistant;
+ shouldShowKeyboard = userIsInteracting || _textSelectionAssistant || changingActivityState;
#if ENABLE(DATA_INTERACTION)
shouldShowKeyboard |= _dragDropInteractionState.isPerformingDrop();
#endif
Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (226479 => 226480)
--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2018-01-06 01:53:44 UTC (rev 226480)
@@ -398,7 +398,8 @@
}
if (m_hasDeferredStartAssistingNode) {
- m_pageClient.startAssistingNode(m_deferredNodeAssistanceArguments->m_nodeInformation, m_deferredNodeAssistanceArguments->m_userIsInteracting, m_deferredNodeAssistanceArguments->m_blurPreviousNode, m_deferredNodeAssistanceArguments->m_userData.get());
+ m_pageClient.startAssistingNode(m_deferredNodeAssistanceArguments->m_nodeInformation, m_deferredNodeAssistanceArguments->m_userIsInteracting, m_deferredNodeAssistanceArguments->m_blurPreviousNode,
+ m_deferredNodeAssistanceArguments->m_changingActivityState, m_deferredNodeAssistanceArguments->m_userData.get());
m_hasDeferredStartAssistingNode = false;
m_deferredNodeAssistanceArguments = nullptr;
}
@@ -897,16 +898,16 @@
m_pageClient.didGetTapHighlightGeometries(requestID, color, highlightedQuads, topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius);
}
-void WebPageProxy::startAssistingNode(const AssistedNodeInformation& information, bool userIsInteracting, bool blurPreviousNode, const UserData& userData)
+void WebPageProxy::startAssistingNode(const AssistedNodeInformation& information, bool userIsInteracting, bool blurPreviousNode, bool changingActivityState, const UserData& userData)
{
API::Object* userDataObject = process().transformHandlesToObjects(userData.object()).get();
if (m_editorState.isMissingPostLayoutData) {
- m_deferredNodeAssistanceArguments = std::make_unique<NodeAssistanceArguments>(NodeAssistanceArguments { information, userIsInteracting, blurPreviousNode, userDataObject });
+ m_deferredNodeAssistanceArguments = std::make_unique<NodeAssistanceArguments>(NodeAssistanceArguments { information, userIsInteracting, blurPreviousNode, changingActivityState, userDataObject });
m_hasDeferredStartAssistingNode = true;
return;
}
- m_pageClient.startAssistingNode(information, userIsInteracting, blurPreviousNode, userDataObject);
+ m_pageClient.startAssistingNode(information, userIsInteracting, blurPreviousNode, changingActivityState, userDataObject);
}
void WebPageProxy::stopAssistingNode()
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (226479 => 226480)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-01-06 01:53:44 UTC (rev 226480)
@@ -2723,7 +2723,11 @@
if (changed)
updateThrottleState();
- m_page->setActivityState(activityState);
+ {
+ SetForScope<bool> currentlyChangingActivityState { m_changingActivityState, true };
+ m_page->setActivityState(activityState);
+ }
+
for (auto* pluginView : m_pluginViews)
pluginView->activityStateDidChange(changed);
@@ -4874,7 +4878,7 @@
m_formClient->willBeginInputSession(this, downcast<Element>(node), WebFrame::fromCoreFrame(*node->document().frame()), m_userIsInteracting, userData);
- send(Messages::WebPageProxy::StartAssistingNode(information, m_userIsInteracting, m_hasPendingBlurNotification, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
+ send(Messages::WebPageProxy::StartAssistingNode(information, m_userIsInteracting, m_hasPendingBlurNotification, m_changingActivityState, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
#elif PLATFORM(MAC)
if (node->hasTagName(WebCore::HTMLNames::selectTag))
send(Messages::WebPageProxy::SetEditableElementIsFocused(false));
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (226479 => 226480)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-01-06 01:49:47 UTC (rev 226479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-01-06 01:53:44 UTC (rev 226480)
@@ -1567,6 +1567,7 @@
bool m_hasEverFocusedElementDueToUserInteractionSincePageTransition { false };
bool m_needsHiddenContentEditableQuirk { false };
bool m_needsPlainTextQuirk { false };
+ bool m_changingActivityState { false };
#if ENABLE(CONTEXT_MENUS)
bool m_isShowingContextMenu { false };