Changeset 276523 in webkit
- Timestamp:
- Apr 23, 2021, 3:06:26 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
Platform/spi/ios/UIKitSPI.h (modified) (1 diff)
-
UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm (modified) (2 diffs)
-
UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h (modified) (1 diff)
-
UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (modified) (1 diff)
-
UIProcess/ios/WKContentView.mm (modified) (1 diff)
-
UIProcess/ios/WKContentViewInteraction.h (modified) (2 diffs)
-
UIProcess/ios/WKContentViewInteraction.mm (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r276522 r276523 1 2021-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 1 15 2021-04-23 Aditya Keerthi <akeerthi@apple.com> 2 16 -
trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h
r276447 r276523 1219 1219 1220 1220 #if USE(UICONTEXTMENU) 1221 @interface UITargetedPreview () 1222 @property (nonatomic, strong, setter=_setOverridePositionTrackingView:) UIView *overridePositionTrackingView; 1223 @end 1224 1221 1225 @interface UIContextMenuInteraction () 1222 1226 @property (nonatomic, readonly) UIGestureRecognizer *gestureRecognizerForFailureRelationships; -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm
r275562 r276523 32 32 #import "RemoteLayerTreeHost.h" 33 33 #import "RemoteLayerTreeNode.h" 34 #import "ScrollingTreeFrameScrollingNodeRemoteIOS.h"35 34 #import "ScrollingTreeOverflowScrollingNodeIOS.h" 36 35 #import "WebPageProxy.h" … … 58 57 { 59 58 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(); 76 65 } 77 66 -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h
r275562 r276523 39 39 virtual ~ScrollingTreeFrameScrollingNodeRemoteIOS(); 40 40 41 UIScrollView *scrollView() const;42 43 41 private: 44 42 ScrollingTreeFrameScrollingNodeRemoteIOS(WebCore::ScrollingTree&, WebCore::ScrollingNodeType, WebCore::ScrollingNodeID); -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm
r275562 r276523 50 50 ScrollingTreeFrameScrollingNodeRemoteIOS::~ScrollingTreeFrameScrollingNodeRemoteIOS() 51 51 { 52 }53 54 UIScrollView *ScrollingTreeFrameScrollingNodeRemoteIOS::scrollView() const55 {56 return m_scrollingNodeDelegate ? m_scrollingNodeDelegate->scrollView() : nil;57 52 } 58 53 -
trunk/Source/WebKit/UIProcess/ios/WKContentView.mm
r276312 r276523 350 350 if (self.window) 351 351 [self setUpInteraction]; 352 else353 [self cleanUpRelatedViews];354 352 } 355 353 -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
r276364 r276523 302 302 RetainPtr<_UIHighlightView> _highlightView; 303 303 RetainPtr<UIView> _interactionViewsContainerView; 304 RetainPtr<UIView> _targetedPreviewViewsContainerView;305 WeakObjCPtr<UIScrollView> _scrollViewForTargetedPreview;306 304 RetainPtr<UIView> _contextMenuHintContainerView; 307 305 RetainPtr<UIView> _dragPreviewContainerView; … … 535 533 - (void)setUpInteraction; 536 534 - (void)cleanUpInteraction; 537 - (void)cleanUpRelatedViews;538 535 539 536 - (void)scrollViewWillStartPanOrPinchGesture; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r276441 r276523 1056 1056 _layerTreeTransactionIdAtLastInteractionStart = { }; 1057 1057 1058 #if USE(UICONTEXTMENU)1059 [self _removeContextMenuViewIfPossible];1060 #endif // USE(UICONTEXTMENU)1061 1062 1058 #if ENABLE(DRAG_SUPPORT) 1063 1059 [existingLocalDragSessionContext(_dragDropInteractionState.dragSession()) cleanUpTemporaryDirectories]; … … 1114 1110 #endif 1115 1111 1116 [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];1117 1118 1112 _hasSetUpInteractions = NO; 1119 1113 _suppressSelectionAssistantReasons = { }; … … 1124 1118 1125 1119 _cachedSelectedTextRange = nil; 1126 }1127 1128 - (void)cleanUpRelatedViews1129 {1130 [std::exchange(_targetedPreviewViewsContainerView, nil) removeFromSuperview];1131 1120 } 1132 1121 … … 2058 2047 - (void)_didScroll 2059 2048 { 2060 [self _updateTargetedPreviewViewsContainerViewFrameIfNeeded];2061 2062 2049 [self _cancelLongPressGestureRecognizer]; 2063 2050 [self _cancelInteraction]; … … 7618 7605 #endif // HAVE(PASTEBOARD_DATA_OWNER) 7619 7606 7620 - (UIView *)textEffectsWindow7621 {7622 return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene];7623 }7624 7625 7607 - (RetainPtr<UIView>)_createPreviewContainerWithLayerName:(NSString *)layerName 7626 7608 { 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 7635 7609 auto container = adoptNS([[UIView alloc] init]); 7636 7610 [container layer].anchorPoint = CGPointZero; 7637 7611 [container layer].name = layerName; 7638 [_ targetedPreviewViewsContainerView addSubview:container.get()];7612 [_interactionViewsContainerView addSubview:container.get()]; 7639 7613 return container; 7640 7614 } … … 7644 7618 if (!_dropPreviewContainerView) 7645 7619 _dropPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drop Preview Container"]; 7646 7647 [_targetedPreviewViewsContainerView setHidden:NO];7648 7620 7649 7621 ASSERT([_dropPreviewContainerView superview]); … … 7657 7629 _dragPreviewContainerView = [self _createPreviewContainerWithLayerName:@"Drag Preview Container"]; 7658 7630 7659 [_targetedPreviewViewsContainerView setHidden:NO];7660 7661 7631 ASSERT([_dragPreviewContainerView superview]); 7662 7632 [_dragPreviewContainerView setHidden:NO]; … … 7669 7639 _contextMenuHintContainerView = [self _createPreviewContainerWithLayerName:@"Context Menu Hint Preview Container"]; 7670 7640 7671 [_targetedPreviewViewsContainerView setHidden:NO];7672 7673 7641 ASSERT([_contextMenuHintContainerView superview]); 7674 7642 [_contextMenuHintContainerView setHidden:NO]; … … 7678 7646 - (void)_hideTargetedPreviewContainerViews 7679 7647 { 7680 [_targetedPreviewViewsContainerView setHidden:YES];7681 7648 [_dropPreviewContainerView setHidden:YES]; 7682 7649 [_dragPreviewContainerView setHidden:YES]; 7683 7650 [_contextMenuHintContainerView setHidden:YES]; 7684 }7685 7686 - (void)_updateTargetedPreviewViewsContainerViewFrameIfNeeded7687 {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)_removeTargetedPreviewViewsContainerViewIfPossible7699 {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)scrollingNodeID7708 {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;7719 7651 } 7720 7652 … … 8038 7970 8039 7971 [std::exchange(_dragPreviewContainerView, nil) removeFromSuperview]; 8040 [self _removeTargetedPreviewViewsContainerViewIfPossible];8041 7972 [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview]; 8042 7973 [_editDropCaretView remove]; … … 8292 8223 } 8293 8224 8225 - (UIView *)textEffectsWindow 8226 { 8227 return [UITextEffectsWindow sharedTextEffectsWindowForWindowScene:self.window.windowScene]; 8228 } 8229 8294 8230 - (NSDictionary *)_autofillContext 8295 8231 { … … 8388 8324 8389 8325 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]; 8390 8339 } 8391 8340 … … 8406 8355 auto targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _focusedElementInformation.interactionRect, backgroundColor); 8407 8356 8408 [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID];8357 [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_focusedElementInformation.containerScrollingNodeID]; 8409 8358 8410 8359 _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview); … … 8429 8378 targetedPreview = createFallbackTargetedPreview(self, self.containerForContextMenuHintPreviews, _positionInformation.bounds, nil); 8430 8379 8431 [self _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:_positionInformation.containerScrollingNodeID];8380 [self overridePositionTrackingViewForTargetedPreviewIfNecessary:targetedPreview.get() containerScrollingNodeID:_positionInformation.containerScrollingNodeID]; 8432 8381 8433 8382 _contextMenuInteractionTargetedPreview = WTFMove(targetedPreview); … … 8460 8409 8461 8410 [std::exchange(_contextMenuHintContainerView, nil) removeFromSuperview]; 8462 [self _removeTargetedPreviewViewsContainerViewIfPossible];8463 8411 } 8464 8412 … … 8958 8906 { 8959 8907 [std::exchange(_dropPreviewContainerView, nil) removeFromSuperview]; 8960 [self _removeTargetedPreviewViewsContainerViewIfPossible];8961 8908 [std::exchange(_visibleContentViewSnapshot, nil) removeFromSuperview]; 8962 8909 [std::exchange(_unselectedContentSnapshot, nil) removeFromSuperview];
Note:
See TracChangeset
for help on using the changeset viewer.