Title: [276523] trunk/Source/WebKit
Revision
276523
Author
[email protected]
Date
2021-04-23 15:06:26 -0700 (Fri, 23 Apr 2021)

Log Message

Unreviewed, reverting r275562.
https://bugs.webkit.org/show_bug.cgi?id=225002

Causes issues in iOS contextmenu animations and interactions
with other popovers

Reverted changeset:

"[iOS] contextmenu hints can be clipped by the WKWebView"
https://bugs.webkit.org/show_bug.cgi?id=224204
https://trac.webkit.org/changeset/275562

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (276522 => 276523)


--- trunk/Source/WebKit/ChangeLog	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/ChangeLog	2021-04-23 22:06:26 UTC (rev 276523)
@@ -1,3 +1,17 @@
+2021-04-23  Commit Queue  <[email protected]>
+
+        Unreviewed, reverting r275562.
+        https://bugs.webkit.org/show_bug.cgi?id=225002
+
+        Causes issues in iOS contextmenu animations and interactions
+        with other popovers
+
+        Reverted changeset:
+
+        "[iOS] contextmenu hints can be clipped by the WKWebView"
+        https://bugs.webkit.org/show_bug.cgi?id=224204
+        https://trac.webkit.org/changeset/275562
+
 2021-04-23  Aditya Keerthi  <[email protected]>
 
         REGRESSION (r273154): fast/forms/ios/repeatedly-focus-offscreen-select.html is consistently failing

Modified: trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h (276522 => 276523)


--- trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h	2021-04-23 22:06:26 UTC (rev 276523)
@@ -1218,6 +1218,10 @@
 @end
 
 #if USE(UICONTEXTMENU)
+@interface UITargetedPreview ()
+@property (nonatomic, strong, setter=_setOverridePositionTrackingView:) UIView *overridePositionTrackingView;
+@end
+
 @interface UIContextMenuInteraction ()
 @property (nonatomic, readonly) UIGestureRecognizer *gestureRecognizerForFailureRelationships;
 - (void)_presentMenuAtLocation:(CGPoint)location;

Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm	2021-04-23 22:06:26 UTC (rev 276523)
@@ -31,7 +31,6 @@
 
 #import "RemoteLayerTreeHost.h"
 #import "RemoteLayerTreeNode.h"
-#import "ScrollingTreeFrameScrollingNodeRemoteIOS.h"
 #import "ScrollingTreeOverflowScrollingNodeIOS.h"
 #import "WebPageProxy.h"
 #import <UIKit/UIView.h>
@@ -57,22 +56,12 @@
 UIScrollView *RemoteScrollingCoordinatorProxy::scrollViewForScrollingNodeID(ScrollingNodeID nodeID) const
 {
     auto* treeNode = m_scrollingTree->nodeForID(nodeID);
+    if (!is<ScrollingTreeOverflowScrollingNode>(treeNode))
+        return nil;
 
-    if (is<ScrollingTreeOverflowScrollingNode>(treeNode)) {
-        auto* overflowScrollingNode = downcast<ScrollingTreeOverflowScrollingNode>(treeNode);
-
-        // All ScrollingTreeOverflowScrollingNodes are ScrollingTreeOverflowScrollingNodeIOS on iOS.
-        return static_cast<ScrollingTreeOverflowScrollingNodeIOS*>(overflowScrollingNode)->scrollView();
-    }
-
-    if (is<ScrollingTreeFrameScrollingNode>(treeNode)) {
-        auto* frameScrollingNode = downcast<ScrollingTreeFrameScrollingNode>(treeNode);
-
-        // All ScrollingTreeFrameScrollingNodes are ScrollingTreeFrameScrollingNodeRemoteIOS on iOS.
-        return static_cast<ScrollingTreeFrameScrollingNodeRemoteIOS*>(frameScrollingNode)->scrollView();
-    }
-
-    return nil;
+    auto* scrollingNode = downcast<ScrollingTreeOverflowScrollingNode>(treeNode);
+    // All ScrollingTreeOverflowScrollingNodes are ScrollingTreeOverflowScrollingNodeIOS on iOS.
+    return static_cast<ScrollingTreeOverflowScrollingNodeIOS*>(scrollingNode)->scrollView();
 }
 
 void RemoteScrollingCoordinatorProxy::connectStateNodeLayers(ScrollingStateTree& stateTree, const RemoteLayerTreeHost& layerTreeHost)

Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h	2021-04-23 22:06:26 UTC (rev 276523)
@@ -38,8 +38,6 @@
     static Ref<ScrollingTreeFrameScrollingNodeRemoteIOS> create(WebCore::ScrollingTree&, WebCore::ScrollingNodeType, WebCore::ScrollingNodeID);
     virtual ~ScrollingTreeFrameScrollingNodeRemoteIOS();
 
-    UIScrollView *scrollView() const;
-
 private:
     ScrollingTreeFrameScrollingNodeRemoteIOS(WebCore::ScrollingTree&, WebCore::ScrollingNodeType, WebCore::ScrollingNodeID);
 

Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm	2021-04-23 22:06:26 UTC (rev 276523)
@@ -51,11 +51,6 @@
 {
 }
 
-UIScrollView *ScrollingTreeFrameScrollingNodeRemoteIOS::scrollView() const
-{
-    return m_scrollingNodeDelegate ? m_scrollingNodeDelegate->scrollView() : nil;
-}
-
 void ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren(const ScrollingStateNode& stateNode)
 {
     ScrollingTreeFrameScrollingNode::commitStateBeforeChildren(stateNode);

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentView.mm (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/ios/WKContentView.mm	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentView.mm	2021-04-23 22:06:26 UTC (rev 276523)
@@ -349,8 +349,6 @@
 
     if (self.window)
         [self setUpInteraction];
-    else
-        [self cleanUpRelatedViews];
 }
 
 ALLOW_DEPRECATED_DECLARATIONS_BEGIN

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2021-04-23 22:06:26 UTC (rev 276523)
@@ -301,8 +301,6 @@
     RetainPtr<UIWebFormAccessory> _formAccessoryView;
     RetainPtr<_UIHighlightView> _highlightView;
     RetainPtr<UIView> _interactionViewsContainerView;
-    RetainPtr<UIView> _targetedPreviewViewsContainerView;
-    WeakObjCPtr<UIScrollView> _scrollViewForTargetedPreview;
     RetainPtr<UIView> _contextMenuHintContainerView;
     RetainPtr<UIView> _dragPreviewContainerView;
     RetainPtr<UIView> _dropPreviewContainerView;
@@ -534,7 +532,6 @@
 
 - (void)setUpInteraction;
 - (void)cleanUpInteraction;
-- (void)cleanUpRelatedViews;
 
 - (void)scrollViewWillStartPanOrPinchGesture;
 

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (276522 => 276523)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-04-23 22:04:56 UTC (rev 276522)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-04-23 22:06:26 UTC (rev 276523)
@@ -1055,10 +1055,6 @@
 
     _layerTreeTransactionIdAtLastInteractionStart = { };
 
-#if USE(UICONTEXTMENU)
-    [self _removeContextMenuViewIfPossible];
-#endif // USE(UICONTEXTMENU)
-
 #if ENABLE(DRAG_SUPPORT)
     [existingLocalDragSessionContext(_dragDropInteractionState.dragSession()) cleanUpTemporaryDirectories];
     [self teardownDragAndDropInteractions];
@@ -1113,8 +1109,6 @@
     [self _tearDownImageExtraction];
 #endif
 
-    [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
-
     _hasSetUpInteractions = NO;
     _suppressSelectionAssistantReasons = { };
 
@@ -1125,11 +1119,6 @@
     _cachedSelectedTextRange = nil;
 }
 
-- (void)cleanUpRelatedViews
-{
-    [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
-}
-
 - (void)_cancelPendingKeyEventHandler
 {
     if (!_page)
@@ -2057,8 +2046,6 @@
 
 - (void)_didScroll
 {
-    [self _updateTargetedPreviewViewsContainerViewFrameIfNeeded];
-
     [self _cancelLongPressGestureRecognizer];
     [self _cancelInteraction];
 }
@@ -7617,25 +7604,12 @@
 
 #endif // HAVE(PASTEBOARD_DATA_OWNER)
 
-- (UIView *)textEffectsWindow
-{
-    return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene];
-}
-
 - (RetainPtr<UIView>)_createPreviewContainerWithLayerName:(NSString *)layerName
 {
-    if (!_targetedPreviewViewsContainerView) {
-        _targetedPreviewViewsContainerView = adoptNS([[UIView alloc] init]);
-        [_targetedPreviewViewsContainerView layer].name = @"Preview Views Container";
-        [_targetedPreviewViewsContainerView layer].anchorPoint = CGPointZero;
-        [self _updateTargetedPreviewViewsContainerViewFrameIfNeeded];
-        [self.textEffectsWindow addSubview:_targetedPreviewViewsContainerView.get()];
-    }
-
     auto container = adoptNS([[UIView alloc] init]);
     [container layer].anchorPoint = CGPointZero;
     [container layer].name = layerName;
-    [_targetedPreviewViewsContainerView addSubview:container.get()];
+    [_interactionViewsContainerView addSubview:container.get()];
     return container;
 }
 
@@ -7644,8 +7618,6 @@
     if (!_dropPreviewContainerView)
         _dropPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drop Preview Container"];
 
-    [_targetedPreviewViewsContainerView setHidden:NO];
-
     ASSERT([_dropPreviewContainerView superview]);
     [_dropPreviewContainerView setHidden:NO];
     return _dropPreviewContainerView.get();
@@ -7656,8 +7628,6 @@
     if (!_dragPreviewContainerView)
         _dragPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drag Preview Container"];
 
-    [_targetedPreviewViewsContainerView setHidden:NO];
-
     ASSERT([_dragPreviewContainerView superview]);
     [_dragPreviewContainerView setHidden:NO];
     return _dragPreviewContainerView.get();
@@ -7668,8 +7638,6 @@
     if (!_contextMenuHintContainerView)
         _contextMenuHintContainerView = [self _createPreviewContainerWithLayerName:@"Context Menu Hint Preview Container"];
 
-    [_targetedPreviewViewsContainerView setHidden:NO];
-
     ASSERT([_contextMenuHintContainerView superview]);
     [_contextMenuHintContainerView setHidden:NO];
     return _contextMenuHintContainerView.get();
@@ -7677,47 +7645,11 @@
 
 - (void)_hideTargetedPreviewContainerViews
 {
-    [_targetedPreviewViewsContainerView setHidden:YES];
     [_dropPreviewContainerView setHidden:YES];
     [_dragPreviewContainerView setHidden:YES];
     [_contextMenuHintContainerView setHidden:YES];
 }
 
-- (void)_updateTargetedPreviewViewsContainerViewFrameIfNeeded
-{
-    if (!_targetedPreviewViewsContainerView || [_targetedPreviewViewsContainerView isHidden])
-        return;
-
-    auto scrollView = _scrollViewForTargetedPreview.get() ?: retainPtr(self._scroller);
-
-    CGRect frame = [_targetedPreviewViewsContainerView frame];
-    frame.origin = [scrollView convertPoint:CGPointZero toView:[_targetedPreviewViewsContainerView superview]];
-    [_targetedPreviewViewsContainerView setFrame:frame];
-}
-
-- (void)_removeTargetedPreviewViewsContainerViewIfPossible
-{
-    if (!_targetedPreviewViewsContainerView || [_targetedPreviewViewsContainerView subviews].count)
-        return;
-
-    [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
-    _scrollViewForTargetedPreview = nil;
-}
-
-- (void)_updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:(WebCore::ScrollingNodeID)scrollingNodeID
-{
-    if (scrollingNodeID) {
-        if (auto* scrollingCoordinator = _page->scrollingCoordinatorProxy()) {
-            if (UIScrollView *scrollViewForScrollingNode = scrollingCoordinator->scrollViewForScrollingNodeID(scrollingNodeID)) {
-                _scrollViewForTargetedPreview = scrollViewForScrollingNode;
-                return;
-            }
-        }
-    }
-
-    _scrollViewForTargetedPreview = self.webView.scrollView;
-}
-
 #pragma mark - WKDeferringGestureRecognizerDelegate
 
 - (WebKit::ShouldDeferGestures)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer willBeginTouchesWithEvent:(UIEvent *)event
@@ -8037,7 +7969,6 @@
     [self _restoreCalloutBarIfNeeded];
 
     [std::exchange(_dragPreviewContainerView, nil) removeFromSuperview];
-    [self _removeTargetedPreviewViewsContainerViewIfPossible];
     [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview];
     [_editDropCaretView remove];
     _editDropCaretView = nil;
@@ -8291,6 +8222,11 @@
     [[_textInteractionAssistant forcePressGesture] _wk_cancel];
 }
 
+- (UIView *)textEffectsWindow
+{
+    return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene];
+}
+
 - (NSDictionary *)_autofillContext
 {
     if (!self._hasFocusedElement)
@@ -8389,6 +8325,19 @@
     return adoptNS([[UITargetedPreview alloc] initWithView:snapshotView parameters:parameters.get() target:target.get()]);
 }
 
+- (void)overridePositionTrackingViewForTargetedPreviewIfNecessary:(UITargetedPreview *)targetedPreview containerScrollingNodeID:(WebCore::ScrollingNodeID)scrollingNodeID
+{
+    if (!scrollingNodeID)
+        return;
+
+    UIScrollView *positionTrackingView = self.webView.scrollView;
+    if (auto* scrollingCoordinator = _page->scrollingCoordinatorProxy())
+        positionTrackingView = scrollingCoordinator->scrollViewForScrollingNodeID(scrollingNodeID);
+
+    if ([targetedPreview respondsToSelector:@selector(_setOverridePositionTrackingView:)])
+        [targetedPreview _setOverridePositionTrackingView:positionTrackingView];
+}
+
 - (UITargetedPreview *)_createTargetedContextMenuHintPreviewForFocusedElement
 {
     auto backgroundColor = [&]() -> UIColor * {
@@ -8405,7 +8354,7 @@
 
     auto targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _focusedElementInformation.interactionRect, backgroundColor);
 
-    [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID];
+    [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID];
 
     _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview);
     return _contextMenuInteractionTargetedPreview.get();
@@ -8428,7 +8377,7 @@
     if (!targetedPreview)
         targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _positionInformation.bounds, nil);
 
-    [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_positionInformation.containerScrollingNodeID];
+    [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_positionInformation.containerScrollingNodeID];
 
     _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview);
     return _contextMenuInteractionTargetedPreview.get();
@@ -8459,7 +8408,6 @@
         return;
     
     [std::exchange(_contextMenuHintContainerView, nil) removeFromSuperview];
-    [self _removeTargetedPreviewViewsContainerViewIfPossible];
 }
 
 #endif // USE(UICONTEXTMENU)
@@ -8957,7 +8905,6 @@
 - (void)dropInteraction:(UIDropInteraction *)interaction concludeDrop:(id <UIDropSession>)session
 {
     [std::exchange(_dropPreviewContainerView, nil) removeFromSuperview];
-    [self _removeTargetedPreviewViewsContainerViewIfPossible];
     [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview];
     [std::exchange(_unselectedContentSnapshot, nil) removeFromSuperview];
     _dragDropInteractionState.clearAllDelayedItemPreviewProviders();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to