Title: [171370] trunk/Source
Revision
171370
Author
enr...@apple.com
Date
2014-07-22 16:28:37 -0700 (Tue, 22 Jul 2014)

Log Message

REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
https://bugs.webkit.org/show_bug.cgi?id=135180
<rdar://problem/16721055>

Reviewed by Simon Fraser.


Source/WebCore: 
AsyncScrollingCoordinator will force a selection update on iOS
when scrolling terminates in an overflow scroll.

* loader/EmptyClients.h:
* page/EditorClient.h:
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
* page/scrolling/ScrollingTree.h:
(WebCore::ScrollingTree::scrollingTreeNodeWillStartScroll):
(WebCore::ScrollingTree::scrollingTreeNodeDidEndScroll):

Source/WebKit/mac: 
* WebCoreSupport/WebEditorClient.h:

Source/WebKit2: 
Adds notifications to the WKContentView to know when scrolling starts and ends
in an overflow scroll. When scrolling starts, we hide the selection and we restore
it when scrolling ends, though not before the selection information in the editor
state has been updated.
It also adds a new method to the EditorClient class to force the
selection update when scrolling is completed.
        
* UIProcess/PageClient.h:
* UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
* UIProcess/Scrolling/RemoteScrollingTree.cpp:
(WebKit::RemoteScrollingTree::scrollingTreeNodeWillStartScroll):
(WebKit::RemoteScrollingTree::scrollingTreeNodeDidEndScroll):
* UIProcess/Scrolling/RemoteScrollingTree.h:
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
(-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
(-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
(-[WKOverflowScrollViewDelegate scrollViewDidEndDecelerating:]):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollWillStart):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollDidEnd):
* UIProcess/WebPageProxy.h:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::overflowScrollWillStartScroll):
(WebKit::PageClientImpl::overflowScrollDidEndScroll):
* UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
(WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartScroll):
(WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidEndScroll):
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _overflowScrollingWillBegin]):
(-[WKContentView _overflowScrollingDidEnd]):
(-[WKContentView _updateChangedSelection]):
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::overflowScrollWillStartScroll):
(WebKit::WebPageProxy::overflowScrollDidEndScroll):
* WebProcess/WebCoreSupport/WebEditorClient.h:
* WebProcess/WebCoreSupport/WebEditorClient.cpp:
* WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
(WebKit::WebEditorClient::updateSelection):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (171369 => 171370)


--- trunk/Source/WebCore/ChangeLog	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebCore/ChangeLog	2014-07-22 23:28:37 UTC (rev 171370)
@@ -1,3 +1,22 @@
+2014-07-22  Enrica Casucci  <enr...@apple.com>
+
+        REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
+        https://bugs.webkit.org/show_bug.cgi?id=135180
+        <rdar://problem/16721055>
+
+        Reviewed by Simon Fraser.
+
+        AsyncScrollingCoordinator will force a selection update on iOS
+        when scrolling terminates in an overflow scroll.
+
+        * loader/EmptyClients.h:
+        * page/EditorClient.h:
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
+        * page/scrolling/ScrollingTree.h:
+        (WebCore::ScrollingTree::scrollingTreeNodeWillStartScroll):
+        (WebCore::ScrollingTree::scrollingTreeNodeDidEndScroll):
+
 2014-07-22  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         [Mac] Cocoa throws exception when the return type of NSAccessibilityLinkedUIElementsAttribute is not an array

Modified: trunk/Source/WebCore/loader/EmptyClients.h (171369 => 171370)


--- trunk/Source/WebCore/loader/EmptyClients.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebCore/loader/EmptyClients.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -471,6 +471,7 @@
     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) override { return false; }
     virtual void textWillBeDeletedInTextField(Element*) override { }
     virtual void textDidChangeInTextArea(Element*) override { }
+    virtual void overflowScrollPositionChanged() override { }
 
 #if PLATFORM(IOS)
     virtual void startDelayingAndCoalescingContentChangeNotifications() override { }

Modified: trunk/Source/WebCore/page/EditorClient.h (171369 => 171370)


--- trunk/Source/WebCore/page/EditorClient.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebCore/page/EditorClient.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -119,6 +119,7 @@
     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) = 0;
     virtual void textWillBeDeletedInTextField(Element*) = 0;
     virtual void textDidChangeInTextArea(Element*) = 0;
+    virtual void overflowScrollPositionChanged() = 0;
 
 #if PLATFORM(IOS)
     virtual void startDelayingAndCoalescingContentChangeNotifications() = 0;

Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (171369 => 171370)


--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp	2014-07-22 23:28:37 UTC (rev 171370)
@@ -28,6 +28,7 @@
 #if ENABLE(ASYNC_SCROLLING)
 #include "AsyncScrollingCoordinator.h"
 
+#include "EditorClient.h"
 #include "Frame.h"
 #include "FrameView.h"
 #include "GraphicsLayer.h"
@@ -308,6 +309,8 @@
         scrollableArea->setIsUserScroll(scrollingLayerPositionAction == SyncScrollingLayerPosition);
         scrollableArea->scrollToOffsetWithoutAnimation(scrollPosition);
         scrollableArea->setIsUserScroll(false);
+        if (scrollingLayerPositionAction == SetScrollingLayerPosition)
+            m_page->editorClient()->overflowScrollPositionChanged();
     }
 }
 

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.h (171369 => 171370)


--- trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -93,6 +93,8 @@
 #if PLATFORM(IOS)
     virtual FloatRect fixedPositionRect() = 0;
     virtual void scrollingTreeNodeWillStartPanGesture() { }
+    virtual void scrollingTreeNodeWillStartScroll() { }
+    virtual void scrollingTreeNodeDidEndScroll() { }
 #endif
 
     bool isPointInNonFastScrollableRegion(IntPoint);

Modified: trunk/Source/WebKit/mac/ChangeLog (171369 => 171370)


--- trunk/Source/WebKit/mac/ChangeLog	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-07-22 23:28:37 UTC (rev 171370)
@@ -1,3 +1,13 @@
+2014-07-22  Enrica Casucci  <enr...@apple.com>
+
+        REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
+        https://bugs.webkit.org/show_bug.cgi?id=135180
+        <rdar://problem/16721055>
+
+        Reviewed by Simon Fraser.
+
+        * WebCoreSupport/WebEditorClient.h:
+
 2014-07-22  Jeremy Jones  <jere...@apple.com>
 
         Don't create new UIWindow for video fullscreen.

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebEditorClient.h (171369 => 171370)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebEditorClient.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebEditorClient.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -132,6 +132,7 @@
     virtual bool doTextFieldCommandFromEvent(WebCore::Element*, WebCore::KeyboardEvent*) override;
     virtual void textWillBeDeletedInTextField(WebCore::Element*) override;
     virtual void textDidChangeInTextArea(WebCore::Element*) override;
+    virtual void overflowScrollPositionChanged() override { };
 
 #if PLATFORM(IOS)
     virtual void startDelayingAndCoalescingContentChangeNotifications() override;

Modified: trunk/Source/WebKit2/ChangeLog (171369 => 171370)


--- trunk/Source/WebKit2/ChangeLog	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-22 23:28:37 UTC (rev 171370)
@@ -1,3 +1,52 @@
+2014-07-22  Enrica Casucci  <enr...@apple.com>
+
+        REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
+        https://bugs.webkit.org/show_bug.cgi?id=135180
+        <rdar://problem/16721055>
+
+        Reviewed by Simon Fraser.
+
+        Adds notifications to the WKContentView to know when scrolling starts and ends
+        in an overflow scroll. When scrolling starts, we hide the selection and we restore
+        it when scrolling ends, though not before the selection information in the editor
+        state has been updated.
+        It also adds a new method to the EditorClient class to force the
+        selection update when scrolling is completed.
+        
+        * UIProcess/PageClient.h:
+        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
+        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
+        (WebKit::RemoteScrollingTree::scrollingTreeNodeWillStartScroll):
+        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidEndScroll):
+        * UIProcess/Scrolling/RemoteScrollingTree.h:
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
+        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
+        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
+        (-[WKOverflowScrollViewDelegate scrollViewDidEndDecelerating:]):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollWillStart):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollDidEnd):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/ios/PageClientImplIOS.h:
+        * UIProcess/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::overflowScrollWillStartScroll):
+        (WebKit::PageClientImpl::overflowScrollDidEndScroll):
+        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
+        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartScroll):
+        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidEndScroll):
+        * UIProcess/ios/WKContentViewInteraction.h:
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _overflowScrollingWillBegin]):
+        (-[WKContentView _overflowScrollingDidEnd]):
+        (-[WKContentView _updateChangedSelection]):
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::overflowScrollWillStartScroll):
+        (WebKit::WebPageProxy::overflowScrollDidEndScroll):
+        * WebProcess/WebCoreSupport/WebEditorClient.h:
+        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
+        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
+        (WebKit::WebEditorClient::updateSelection):
+
 2014-07-22  Benjamin Poulain  <bpoul...@apple.com>
 
         [iOS][WK2] WebPageProxy should not do anything when responding to an animated resize is the page is not in a valid state

Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/PageClient.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -273,6 +273,8 @@
     virtual WebCore::FloatSize contentsSize() const = 0;
     virtual void overflowScrollViewWillStartPanGesture() = 0;
     virtual void overflowScrollViewDidScroll() = 0;
+    virtual void overflowScrollWillStartScroll() = 0;
+    virtual void overflowScrollDidEndScroll() = 0;
     virtual void didFinishDrawingPagesToPDF(const IPC::DataReference&) = 0;
     virtual Vector<String> mimeTypesWithCustomContentProviders() = 0;
 

Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -75,6 +75,8 @@
 #if PLATFORM(IOS)
     WebCore::FloatRect customFixedPositionRect() const;
     void scrollingTreeNodeWillStartPanGesture();
+    void scrollingTreeNodeWillStartScroll();
+    void scrollingTreeNodeDidEndScroll();
 #endif
 
 private:

Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp	2014-07-22 23:28:37 UTC (rev 171370)
@@ -87,6 +87,17 @@
 {
     m_scrollingCoordinatorProxy.scrollingTreeNodeWillStartPanGesture();
 }
+    
+void RemoteScrollingTree::scrollingTreeNodeWillStartScroll()
+{
+    m_scrollingCoordinatorProxy.scrollingTreeNodeWillStartScroll();
+}
+
+void RemoteScrollingTree::scrollingTreeNodeDidEndScroll()
+{
+    m_scrollingCoordinatorProxy.scrollingTreeNodeDidEndScroll();
+}
+
 #endif
 
 void RemoteScrollingTree::scrollingTreeNodeDidScroll(ScrollingNodeID nodeID, const FloatPoint& scrollPosition, SetOrSyncScrollingLayerPosition scrollingLayerPositionAction)

Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -59,6 +59,8 @@
 #if PLATFORM(IOS)
     virtual WebCore::FloatRect fixedPositionRect() override;
     virtual void scrollingTreeNodeWillStartPanGesture() override;
+    virtual void scrollingTreeNodeWillStartScroll() override;
+    virtual void scrollingTreeNodeDidEndScroll() override;
 #endif
 
     virtual PassRefPtr<WebCore::ScrollingTreeNode> createScrollingTreeNode(WebCore::ScrollingNodeType, WebCore::ScrollingNodeID) override;

Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -40,6 +40,8 @@
     static PassRefPtr<ScrollingTreeOverflowScrollingNodeIOS> create(WebCore::ScrollingTree&, WebCore::ScrollingNodeID);
     virtual ~ScrollingTreeOverflowScrollingNodeIOS();
 
+    void overflowScrollWillStart();
+    void overflowScrollDidEnd();
     void overflowScrollViewWillStartPanGesture();
     void scrollViewDidScroll(const WebCore::FloatPoint&, bool inUserInteration);
 

Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -70,6 +70,7 @@
 
     if (scrollView.panGestureRecognizer.state == UIGestureRecognizerStateBegan)
         _scrollingTreeNode->overflowScrollViewWillStartPanGesture();
+    _scrollingTreeNode->overflowScrollWillStart();
 }
 
 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)willDecelerate
@@ -77,6 +78,7 @@
     if (_inUserInteraction && !willDecelerate) {
         _inUserInteraction = NO;
         _scrollingTreeNode->scrollViewDidScroll(scrollView.contentOffset, _inUserInteraction);
+        _scrollingTreeNode->overflowScrollDidEnd();
     }
 }
 
@@ -85,6 +87,7 @@
     if (_inUserInteraction) {
         _inUserInteraction = NO;
         _scrollingTreeNode->scrollViewDidScroll(scrollView.contentOffset, _inUserInteraction);
+        _scrollingTreeNode->overflowScrollDidEnd();
     }
 }
 
@@ -232,6 +235,16 @@
         child->updateLayersAfterAncestorChange(*this, fixedPositionRect, scrollDelta);
 }
 
+void ScrollingTreeOverflowScrollingNodeIOS::overflowScrollWillStart()
+{
+    scrollingTree().scrollingTreeNodeWillStartScroll();
+}
+
+void ScrollingTreeOverflowScrollingNodeIOS::overflowScrollDidEnd()
+{
+    scrollingTree().scrollingTreeNodeDidEndScroll();
+}
+
 void ScrollingTreeOverflowScrollingNodeIOS::overflowScrollViewWillStartPanGesture()
 {
     scrollingTree().scrollingTreeNodeWillStartPanGesture();

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -390,6 +390,8 @@
     WebCore::FloatRect computeCustomFixedPositionRect(const WebCore::FloatRect& unobscuredContentRect, double displayedContentScale, UnobscuredRectConstraint = UnobscuredRectConstraint::Unconstrained) const;
     void overflowScrollViewWillStartPanGesture();
     void overflowScrollViewDidScroll();
+    void overflowScrollWillStartScroll();
+    void overflowScrollDidEndScroll();
 
     void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& minimumLayoutSizeForMinimalUI, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, double targetScale, int32_t deviceOrientation);
     void synchronizeDynamicViewportUpdate();

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -147,6 +147,9 @@
     virtual void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale) override;
     virtual void overflowScrollViewWillStartPanGesture() override;
     virtual void overflowScrollViewDidScroll() override;
+    virtual void overflowScrollWillStartScroll() override;
+    virtual void overflowScrollDidEndScroll() override;
+
     virtual void didFinishDrawingPagesToPDF(const IPC::DataReference&) override;
 
     // Auxiliary Client Creation

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -645,6 +645,16 @@
     [m_contentView _didScroll];
 }
 
+void PageClientImpl::overflowScrollWillStartScroll()
+{
+    [m_contentView _overflowScrollingWillBegin];
+}
+
+void PageClientImpl::overflowScrollDidEndScroll()
+{
+    [m_contentView _overflowScrollingDidEnd];
+}
+
 void PageClientImpl::didFinishDrawingPagesToPDF(const IPC::DataReference& pdfData)
 {
     RetainPtr<CFDataRef> data = "" pdfData.data(), pdfData.size()));

Modified: trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -103,6 +103,16 @@
     m_webPageProxy.overflowScrollViewWillStartPanGesture();
 }
 
+void RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartScroll()
+{
+    m_webPageProxy.overflowScrollWillStartScroll();
+}
+    
+void RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidEndScroll()
+{
+    m_webPageProxy.overflowScrollDidEndScroll();
+}
+
 } // namespace WebKit
 
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -137,6 +137,7 @@
     BOOL _potentialTapInProgress;
     BOOL _hasTapHighlightForPotentialTap;
     BOOL _selectionNeedsUpdate;
+    BOOL _shouldRestoreSelection;
     BOOL _usingGestureForSelection;
     BOOL _inspectorNodeSearchEnabled;
     BOOL _didAccessoryTabInitiateFocus;
@@ -174,6 +175,8 @@
 - (void)_willStartScrollingOrZooming;
 - (void)_didScroll;
 - (void)_didEndScrollingOrZooming;
+- (void)_overflowScrollingWillBegin;
+- (void)_overflowScrollingDidEnd;
 - (void)_didUpdateBlockSelectionWithTouch:(WebKit::SelectionTouch)touch withFlags:(WebKit::SelectionFlags)flags growThreshold:(CGFloat)growThreshold shrinkThreshold:(CGFloat)shrinkThreshold;
 - (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const WebCore::IntRect&)elementRect;
 - (void)_showRunOpenPanel:(WebKit::WebOpenPanelParameters*)parameters resultListener:(WebKit::WebOpenPanelResultListenerProxy*)listener;

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -654,6 +654,25 @@
     [self _cancelInteraction];
 }
 
+- (void)_overflowScrollingWillBegin
+{
+    [_webSelectionAssistant willStartScrollingOverflow];
+    [_textSelectionAssistant willStartScrollingOverflow];    
+}
+
+- (void)_overflowScrollingDidEnd
+{
+    // If scrolling ends before we've received a selection update,
+    // we postpone showing the selection until the update is received.
+    if (!_selectionNeedsUpdate) {
+        _shouldRestoreSelection = YES;
+        return;
+    }
+    [self _updateChangedSelection];
+    [_webSelectionAssistant didEndScrollingOverflow];
+    [_textSelectionAssistant didEndScrollingOverflow];
+}
+
 - (BOOL)_requiresKeyboardWhenFirstResponder
 {
     // FIXME: We should add the logic to handle keyboard visibility during focus redirects.
@@ -2609,6 +2628,11 @@
     } else if (!_page->editorState().isContentEditable)
         [_webSelectionAssistant selectionChanged];
     _selectionNeedsUpdate = NO;
+    if (_shouldRestoreSelection) {
+        [_webSelectionAssistant didEndScrollingOverflow];
+        [_textSelectionAssistant didEndScrollingOverflow];
+        _shouldRestoreSelection = NO;
+    }
 }
 
 - (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const IntRect&)elementRect

Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (171369 => 171370)


--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -251,6 +251,16 @@
     m_pageClient.overflowScrollViewDidScroll();
 }
 
+void WebPageProxy::overflowScrollWillStartScroll()
+{
+    m_pageClient.overflowScrollWillStartScroll();
+}
+
+void WebPageProxy::overflowScrollDidEndScroll()
+{
+    m_pageClient.overflowScrollDidEndScroll();
+}
+
 void WebPageProxy::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const WebCore::FloatSize& minimumLayoutSizeForMinimalUI, const WebCore::FloatSize& maximumUnobscuredSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, const FloatRect& targetUnobscuredRectInScrollViewCoordinates,  double targetScale, int32_t deviceOrientation)
 {
     if (!isValid())

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp (171369 => 171370)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp	2014-07-22 23:28:37 UTC (rev 171370)
@@ -339,6 +339,13 @@
     m_page->injectedBundleFormClient().textDidChangeInTextArea(m_page, toHTMLTextAreaElement(element), webFrame);
 }
 
+#if !PLATFORM(IOS)
+void WebEditorClient::overflowScrollPositionChanged()
+{
+    notImplemented();
+}
+#endif
+
 static bool getActionTypeForKeyEvent(KeyboardEvent* event, WKInputFieldActionType& type)
 {
     String key = event->keyIdentifier();

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.h (171369 => 171370)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.h	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.h	2014-07-22 23:28:37 UTC (rev 171370)
@@ -90,6 +90,7 @@
     virtual bool doTextFieldCommandFromEvent(WebCore::Element*, WebCore::KeyboardEvent*) override;
     virtual void textWillBeDeletedInTextField(WebCore::Element*) override;
     virtual void textDidChangeInTextArea(WebCore::Element*) override;
+    virtual void overflowScrollPositionChanged() override;
 
 #if PLATFORM(COCOA)
     virtual NSString *userVisibleString(NSURL *) override;

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm (171369 => 171370)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm	2014-07-22 23:25:48 UTC (rev 171369)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm	2014-07-22 23:28:37 UTC (rev 171370)
@@ -134,6 +134,11 @@
     return 0;
 }
 
+void WebEditorClient::overflowScrollPositionChanged()
+{
+    m_page->didChangeSelection();
+}
+
 } // namespace WebKit
 
 #endif // PLATFORM(IOS)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to