⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 276523 in webkit


Ignore:
Timestamp:
Apr 23, 2021, 3:06:26 PM (5 years ago)
Author:
commit-queue@webkit.org
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

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r276522 r276523  
     12021-04-23  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, reverting r275562.
     4        https://bugs.webkit.org/show_bug.cgi?id=225002
     5
     6        Causes issues in iOS contextmenu animations and interactions
     7        with other popovers
     8
     9        Reverted changeset:
     10
     11        "[iOS] contextmenu hints can be clipped by the WKWebView"
     12        https://bugs.webkit.org/show_bug.cgi?id=224204
     13        https://trac.webkit.org/changeset/275562
     14
    1152021-04-23  Aditya Keerthi  <akeerthi@apple.com>
    216
  • trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h

    r276447 r276523  
    12191219
    12201220#if USE(UICONTEXTMENU)
     1221@interface UITargetedPreview ()
     1222@property (nonatomic, strong, setter=_setOverridePositionTrackingView:) UIView *overridePositionTrackingView;
     1223@end
     1224
    12211225@interface UIContextMenuInteraction ()
    12221226@property (nonatomic, readonly) UIGestureRecognizer *gestureRecognizerForFailureRelationships;
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm

    r275562 r276523  
    3232#import "RemoteLayerTreeHost.h"
    3333#import "RemoteLayerTreeNode.h"
    34 #import "ScrollingTreeFrameScrollingNodeRemoteIOS.h"
    3534#import "ScrollingTreeOverflowScrollingNodeIOS.h"
    3635#import "WebPageProxy.h"
     
    5857{
    5958    auto* treeNode = m_scrollingTree->nodeForID(nodeID);
    60 
    61     if (is<ScrollingTreeOverflowScrollingNode>(treeNode)) {
    62         auto* overflowScrollingNode = downcast<ScrollingTreeOverflowScrollingNode>(treeNode);
    63 
    64         // All ScrollingTreeOverflowScrollingNodes are ScrollingTreeOverflowScrollingNodeIOS on iOS.
    65         return static_cast<ScrollingTreeOverflowScrollingNodeIOS*>(overflowScrollingNode)->scrollView();
    66     }
    67 
    68     if (is<ScrollingTreeFrameScrollingNode>(treeNode)) {
    69         auto* frameScrollingNode = downcast<ScrollingTreeFrameScrollingNode>(treeNode);
    70 
    71         // All ScrollingTreeFrameScrollingNodes are ScrollingTreeFrameScrollingNodeRemoteIOS on iOS.
    72         return static_cast<ScrollingTreeFrameScrollingNodeRemoteIOS*>(frameScrollingNode)->scrollView();
    73     }
    74 
    75     return nil;
     59    if (!is<ScrollingTreeOverflowScrollingNode>(treeNode))
     60        return nil;
     61
     62    auto* scrollingNode = downcast<ScrollingTreeOverflowScrollingNode>(treeNode);
     63    // All ScrollingTreeOverflowScrollingNodes are ScrollingTreeOverflowScrollingNodeIOS on iOS.
     64    return static_cast<ScrollingTreeOverflowScrollingNodeIOS*>(scrollingNode)->scrollView();
    7665}
    7766
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h

    r275562 r276523  
    3939    virtual ~ScrollingTreeFrameScrollingNodeRemoteIOS();
    4040
    41     UIScrollView *scrollView() const;
    42 
    4341private:
    4442    ScrollingTreeFrameScrollingNodeRemoteIOS(WebCore::ScrollingTree&, WebCore::ScrollingNodeType, WebCore::ScrollingNodeID);
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm

    r275562 r276523  
    5050ScrollingTreeFrameScrollingNodeRemoteIOS::~ScrollingTreeFrameScrollingNodeRemoteIOS()
    5151{
    52 }
    53 
    54 UIScrollView *ScrollingTreeFrameScrollingNodeRemoteIOS::scrollView() const
    55 {
    56     return m_scrollingNodeDelegate ? m_scrollingNodeDelegate->scrollView() : nil;
    5752}
    5853
  • trunk/Source/WebKit/UIProcess/ios/WKContentView.mm

    r276312 r276523  
    350350    if (self.window)
    351351        [self setUpInteraction];
    352     else
    353         [self cleanUpRelatedViews];
    354352}
    355353
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h

    r276364 r276523  
    302302    RetainPtr<_UIHighlightView> _highlightView;
    303303    RetainPtr<UIView> _interactionViewsContainerView;
    304     RetainPtr<UIView> _targetedPreviewViewsContainerView;
    305     WeakObjCPtr<UIScrollView> _scrollViewForTargetedPreview;
    306304    RetainPtr<UIView> _contextMenuHintContainerView;
    307305    RetainPtr<UIView> _dragPreviewContainerView;
     
    535533- (void)setUpInteraction;
    536534- (void)cleanUpInteraction;
    537 - (void)cleanUpRelatedViews;
    538535
    539536- (void)scrollViewWillStartPanOrPinchGesture;
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r276441 r276523  
    10561056    _layerTreeTransactionIdAtLastInteractionStart = { };
    10571057
    1058 #if USE(UICONTEXTMENU)
    1059     [self _removeContextMenuViewIfPossible];
    1060 #endif // USE(UICONTEXTMENU)
    1061 
    10621058#if ENABLE(DRAG_SUPPORT)
    10631059    [existingLocalDragSessionContext(_dragDropInteractionState.dragSession()) cleanUpTemporaryDirectories];
     
    11141110#endif
    11151111
    1116     [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
    1117 
    11181112    _hasSetUpInteractions = NO;
    11191113    _suppressSelectionAssistantReasons = { };
     
    11241118
    11251119    _cachedSelectedTextRange = nil;
    1126 }
    1127 
    1128 - (void)cleanUpRelatedViews
    1129 {
    1130     [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
    11311120}
    11321121
     
    20582047- (void)_didScroll
    20592048{
    2060     [self _updateTargetedPreviewViewsContainerViewFrameIfNeeded];
    2061 
    20622049    [self _cancelLongPressGestureRecognizer];
    20632050    [self _cancelInteraction];
     
    76187605#endif // HAVE(PASTEBOARD_DATA_OWNER)
    76197606
    7620 - (UIView *)textEffectsWindow
    7621 {
    7622     return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene];
    7623 }
    7624 
    76257607- (RetainPtr<UIView>)_createPreviewContainerWithLayerName:(NSString *)layerName
    76267608{
    7627     if (!_targetedPreviewViewsContainerView) {
    7628         _targetedPreviewViewsContainerView = adoptNS([[UIView alloc] init]);
    7629         [_targetedPreviewViewsContainerView layer].name = @"Preview Views Container";
    7630         [_targetedPreviewViewsContainerView layer].anchorPoint = CGPointZero;
    7631         [self _updateTargetedPreviewViewsContainerViewFrameIfNeeded];
    7632         [self.textEffectsWindow addSubview:_targetedPreviewViewsContainerView.get()];
    7633     }
    7634 
    76357609    auto container = adoptNS([[UIView alloc] init]);
    76367610    [container layer].anchorPoint = CGPointZero;
    76377611    [container layer].name = layerName;
    7638     [_targetedPreviewViewsContainerView addSubview:container.get()];
     7612    [_interactionViewsContainerView addSubview:container.get()];
    76397613    return container;
    76407614}
     
    76447618    if (!_dropPreviewContainerView)
    76457619        _dropPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drop Preview Container"];
    7646 
    7647     [_targetedPreviewViewsContainerView setHidden:NO];
    76487620
    76497621    ASSERT([_dropPreviewContainerView superview]);
     
    76577629        _dragPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drag Preview Container"];
    76587630
    7659     [_targetedPreviewViewsContainerView setHidden:NO];
    7660 
    76617631    ASSERT([_dragPreviewContainerView superview]);
    76627632    [_dragPreviewContainerView setHidden:NO];
     
    76697639        _contextMenuHintContainerView = [self _createPreviewContainerWithLayerName:@"Context Menu Hint Preview Container"];
    76707640
    7671     [_targetedPreviewViewsContainerView setHidden:NO];
    7672 
    76737641    ASSERT([_contextMenuHintContainerView superview]);
    76747642    [_contextMenuHintContainerView setHidden:NO];
     
    76787646- (void)_hideTargetedPreviewContainerViews
    76797647{
    7680     [_targetedPreviewViewsContainerView setHidden:YES];
    76817648    [_dropPreviewContainerView setHidden:YES];
    76827649    [_dragPreviewContainerView setHidden:YES];
    76837650    [_contextMenuHintContainerView setHidden:YES];
    7684 }
    7685 
    7686 - (void)_updateTargetedPreviewViewsContainerViewFrameIfNeeded
    7687 {
    7688     if (!_targetedPreviewViewsContainerView || [_targetedPreviewViewsContainerView isHidden])
    7689         return;
    7690 
    7691     auto scrollView = _scrollViewForTargetedPreview.get() ?: retainPtr(self._scroller);
    7692 
    7693     CGRect frame = [_targetedPreviewViewsContainerView frame];
    7694     frame.origin = [scrollView convertPoint:CGPointZero toView:[_targetedPreviewViewsContainerView superview]];
    7695     [_targetedPreviewViewsContainerView setFrame:frame];
    7696 }
    7697 
    7698 - (void)_removeTargetedPreviewViewsContainerViewIfPossible
    7699 {
    7700     if (!_targetedPreviewViewsContainerView || [_targetedPreviewViewsContainerView subviews].count)
    7701         return;
    7702 
    7703     [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];
    7704     _scrollViewForTargetedPreview = nil;
    7705 }
    7706 
    7707 - (void)_updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:(WebCore::ScrollingNodeID)scrollingNodeID
    7708 {
    7709     if (scrollingNodeID) {
    7710         if (auto* scrollingCoordinator = _page->scrollingCoordinatorProxy()) {
    7711             if (UIScrollView *scrollViewForScrollingNode = scrollingCoordinator->scrollViewForScrollingNodeID(scrollingNodeID)) {
    7712                 _scrollViewForTargetedPreview = scrollViewForScrollingNode;
    7713                 return;
    7714             }
    7715         }
    7716     }
    7717 
    7718     _scrollViewForTargetedPreview = self.webView.scrollView;
    77197651}
    77207652
     
    80387970
    80397971    [std::exchange(_dragPreviewContainerView, nil) removeFromSuperview];
    8040     [self _removeTargetedPreviewViewsContainerViewIfPossible];
    80417972    [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview];
    80427973    [_editDropCaretView remove];
     
    82928223}
    82938224
     8225- (UIView *)textEffectsWindow
     8226{
     8227    return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene];
     8228}
     8229
    82948230- (NSDictionary *)_autofillContext
    82958231{
     
    83888324
    83898325    return adoptNS([[UITargetedPreview alloc] initWithView:snapshotView parameters:parameters.get() target:target.get()]);
     8326}
     8327
     8328- (void)overridePositionTrackingViewForTargetedPreviewIfNecessary:(UITargetedPreview *)targetedPreview containerScrollingNodeID:(WebCore::ScrollingNodeID)scrollingNodeID
     8329{
     8330    if (!scrollingNodeID)
     8331        return;
     8332
     8333    UIScrollView *positionTrackingView = self.webView.scrollView;
     8334    if (auto* scrollingCoordinator = _page->scrollingCoordinatorProxy())
     8335        positionTrackingView = scrollingCoordinator->scrollViewForScrollingNodeID(scrollingNodeID);
     8336
     8337    if ([targetedPreview respondsToSelector:@selector(_setOverridePositionTrackingView:)])
     8338        [targetedPreview _setOverridePositionTrackingView:positionTrackingView];
    83908339}
    83918340
     
    84068355    auto targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _focusedElementInformation.interactionRect, backgroundColor);
    84078356
    8408     [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID];
     8357    [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID];
    84098358
    84108359    _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview);
     
    84298378        targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _positionInformation.bounds, nil);
    84308379
    8431     [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_positionInformation.containerScrollingNodeID];
     8380    [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_positionInformation.containerScrollingNodeID];
    84328381
    84338382    _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview);
     
    84608409   
    84618410    [std::exchange(_contextMenuHintContainerView, nil) removeFromSuperview];
    8462     [self _removeTargetedPreviewViewsContainerViewIfPossible];
    84638411}
    84648412
     
    89588906{
    89598907    [std::exchange(_dropPreviewContainerView, nil) removeFromSuperview];
    8960     [self _removeTargetedPreviewViewsContainerViewIfPossible];
    89618908    [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview];
    89628909    [std::exchange(_unselectedContentSnapshot, nil) removeFromSuperview];
Note: See TracChangeset for help on using the changeset viewer.