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();