Diff
Modified: branches/safari-610.1.1-branch/Source/WebKit/ChangeLog (255444 => 255445)
--- branches/safari-610.1.1-branch/Source/WebKit/ChangeLog 2020-01-30 20:02:11 UTC (rev 255444)
+++ branches/safari-610.1.1-branch/Source/WebKit/ChangeLog 2020-01-30 20:02:14 UTC (rev 255445)
@@ -1,50 +1,5 @@
2020-01-30 Alan Coon <[email protected]>
- Cherry-pick r255337. rdar://problem/58936679
-
- macCatalyst: Right clicking on a link follows it immediately
- https://bugs.webkit.org/show_bug.cgi?id=206919
- <rdar://problem/58936679>
-
- Reviewed by Wenson Hsieh.
-
- Source/WebKit:
-
- * UIProcess/ios/WKMouseGestureRecognizer.mm:
- (-[WKMouseGestureRecognizer createMouseEventWithType:forEvent:]):
- (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
- (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
- UIKit's _buttonMask does not include the currently-released button,
- so in order to correctly identify the released button in touchesEnded,
- store the mask for the length of the click.
-
- Tools:
-
- * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
- (TEST):
- Add a test ensuring that mouseup is still called with the secondary button,
- even if the event's buttonmask is 0.
-
- git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 2020-01-28 Tim Horton <[email protected]>
-
- macCatalyst: Right clicking on a link follows it immediately
- https://bugs.webkit.org/show_bug.cgi?id=206919
- <rdar://problem/58936679>
-
- Reviewed by Wenson Hsieh.
-
- * UIProcess/ios/WKMouseGestureRecognizer.mm:
- (-[WKMouseGestureRecognizer createMouseEventWithType:forEvent:]):
- (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
- (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
- UIKit's _buttonMask does not include the currently-released button,
- so in order to correctly identify the released button in touchesEnded,
- store the mask for the length of the click.
-
-2020-01-30 Alan Coon <[email protected]>
-
Cherry-pick r255105. rdar://problem/58936679
macCatalyst: Right clicking on links follows the link, but shouldn't
Modified: branches/safari-610.1.1-branch/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm (255444 => 255445)
--- branches/safari-610.1.1-branch/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm 2020-01-30 20:02:11 UTC (rev 255444)
+++ branches/safari-610.1.1-branch/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm 2020-01-30 20:02:14 UTC (rev 255445)
@@ -56,7 +56,6 @@
std::unique_ptr<WebKit::NativeWebMouseEvent> _lastEvent;
Optional<CGPoint> _lastLocation;
- Optional<UIEventButtonMask> _pressedButtonMask;
}
- (instancetype)initWithTarget:(id)target action:(SEL)action
@@ -120,10 +119,10 @@
return NO;
}
-- (std::unique_ptr<WebKit::NativeWebMouseEvent>)createMouseEventWithType:(WebKit::WebEvent::Type)type
+- (std::unique_ptr<WebKit::NativeWebMouseEvent>)createMouseEventWithType:(WebKit::WebEvent::Type)type forEvent:(UIEvent *)uiEvent
{
auto modifiers = webEventModifiersForUIKeyModifierFlags(self.modifierFlags);
- BOOL isRightButton = modifiers.contains(WebKit::WebEvent::Modifier::ControlKey) || (_pressedButtonMask && (*_pressedButtonMask & UIEventButtonMaskSecondary));
+ BOOL isRightButton = modifiers.contains(WebKit::WebEvent::Modifier::ControlKey) || ([uiEvent _buttonMask] & UIEventButtonMaskSecondary);
auto button = [&] {
if (!_touching)
@@ -152,9 +151,8 @@
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
_touching = YES;
- _pressedButtonMask = [event _buttonMask];
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseDown];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseDown forEvent:event];
_lastLocation = [self locationInView:self.view];
self.state = UIGestureRecognizerStateChanged;
@@ -162,7 +160,7 @@
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
_lastLocation = [self locationInView:self.view];
self.state = UIGestureRecognizerStateChanged;
@@ -170,11 +168,10 @@
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseU];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseUp forEvent:event];
_lastLocation = [self locationInView:self.view];
_touching = NO;
- _pressedButtonMask = WTF::nullopt;
self.state = UIGestureRecognizerStateChanged;
}
@@ -186,7 +183,7 @@
- (void)_hoverEntered:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
if (_currentHoverEvent == nil && touches.count == 1 && [event isKindOfClass:NSClassFromString(@"UIHoverEvent")]) {
_currentHoverEvent = (UIHoverEvent *)event;
@@ -205,7 +202,7 @@
return;
}
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
_lastLocation = [self locationInView:self.view];
if (_currentHoverEvent == event && [touches containsObject:_currentTouch.get()])
@@ -216,7 +213,7 @@
- (void)_hoverExited:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
_lastLocation = [self locationInView:self.view];
if (_currentHoverEvent == event) {
Modified: branches/safari-610.1.1-branch/Tools/ChangeLog (255444 => 255445)
--- branches/safari-610.1.1-branch/Tools/ChangeLog 2020-01-30 20:02:11 UTC (rev 255444)
+++ branches/safari-610.1.1-branch/Tools/ChangeLog 2020-01-30 20:02:14 UTC (rev 255445)
@@ -1,45 +1,3 @@
-2020-01-30 Alan Coon <[email protected]>
-
- Cherry-pick r255337. rdar://problem/58936679
-
- macCatalyst: Right clicking on a link follows it immediately
- https://bugs.webkit.org/show_bug.cgi?id=206919
- <rdar://problem/58936679>
-
- Reviewed by Wenson Hsieh.
-
- Source/WebKit:
-
- * UIProcess/ios/WKMouseGestureRecognizer.mm:
- (-[WKMouseGestureRecognizer createMouseEventWithType:forEvent:]):
- (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
- (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
- UIKit's _buttonMask does not include the currently-released button,
- so in order to correctly identify the released button in touchesEnded,
- store the mask for the length of the click.
-
- Tools:
-
- * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
- (TEST):
- Add a test ensuring that mouseup is still called with the secondary button,
- even if the event's buttonmask is 0.
-
- git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 2020-01-28 Tim Horton <[email protected]>
-
- macCatalyst: Right clicking on a link follows it immediately
- https://bugs.webkit.org/show_bug.cgi?id=206919
- <rdar://problem/58936679>
-
- Reviewed by Wenson Hsieh.
-
- * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
- (TEST):
- Add a test ensuring that mouseup is still called with the secondary button,
- even if the event's buttonmask is 0.
-
2020-01-29 Alan Coon <[email protected]>
Cherry-pick r254632. rdar://problem/59001684
Deleted: branches/safari-610.1.1-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm (255444 => 255445)
--- branches/safari-610.1.1-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm 2020-01-30 20:02:11 UTC (rev 255444)
+++ branches/safari-610.1.1-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm 2020-01-30 20:02:14 UTC (rev 255445)
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2020 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-
-#if PLATFORM(MACCATALYST)
-
-#import "PlatformUtilities.h"
-#import "Test.h"
-#import "TestNavigationDelegate.h"
-#import "TestWKWebView.h"
-#import "UIKitSPI.h"
-#import <WebKit/WKWebViewConfigurationPrivate.h>
-#import <WebKit/WKWebViewPrivateForTesting.h>
-#import <WebKit/WebKit.h>
-#import <wtf/RetainPtr.h>
-
-@interface WKMouseGestureRecognizer : UIGestureRecognizer
-- (void)_hoverEntered:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
-- (void)_hoverExited:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
-- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
-- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
-@end
-
-@interface WKContentView ()
-- (void)_mouseGestureRecognizerChanged:(WKMouseGestureRecognizer *)gestureRecognizer;
-@end
-
-@interface WKTestingEvent : UIEvent
-@end
-
-@implementation WKTestingEvent {
- UIEventButtonMask _buttonMask;
-}
-
-- (CGPoint)locationInView:(UIView *)view
-{
- return CGPointMake(10, 10);
-}
-
-- (void)_setButtonMask:(UIEventButtonMask)buttonMask
-{
- _buttonMask = buttonMask;
-}
-
-- (UIEventButtonMask)_buttonMask
-{
- return _buttonMask;
-}
-
-@end
-
-@interface WKTestingTouch : UITouch
-@end
-
-@implementation WKTestingTouch {
- NSUInteger _tapCount;
-}
-
-- (CGPoint)locationInView:(UIView *)view
-{
- return CGPointMake(10, 10);
-}
-
-- (void)setTapCount:(NSUInteger)tapCount
-{
- _tapCount = tapCount;
-}
-
-- (NSUInteger)tapCount
-{
- return _tapCount;
-}
-
-@end
-
-static WKMouseGestureRecognizer *mouseGesture(UIView *view)
-{
- for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
- if ([recognizer isKindOfClass:NSClassFromString(@"WKMouseGestureRecognizer")])
- return (WKMouseGestureRecognizer *)recognizer;
- }
-
- return nil;
-}
-
-TEST(MacCatalystMouseSupport, DoNotChangeSelectionWithRightClick)
-{
- auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
- auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
- [webView synchronouslyLoadTestPageNamed:@"simple"];
- [webView objectByEvaluatingJavaScript:@"document.body.setAttribute('contenteditable','');"];
-
- auto contentView = [webView wkContentView];
- auto gesture = mouseGesture(contentView);
-
- RetainPtr<WKTestingTouch> touch = adoptNS([[WKTestingTouch alloc] init]);
- RetainPtr<NSSet> touchSet = [NSSet setWithObject:touch.get()];
-
- RetainPtr<WKTestingEvent> event = adoptNS([[WKTestingEvent alloc] init]);
-
- [gesture _hoverEntered:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
- [touch setTapCount:1];
- [event _setButtonMask:UIEventButtonMaskSecondary];
- [gesture touchesBegan:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
- [gesture touchesEnded:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
-
- __block bool done = false;
-
- [webView _doAfterProcessingAllPendingMouseEvents:^{
- NSNumber *result = [webView objectByEvaluatingJavaScript:@"window.getSelection().isCollapsed"];
- EXPECT_TRUE([result boolValue]);
- done = true;
- }];
-
- TestWebKitAPI::Util::run(&done);
-}
-
-TEST(MacCatalystMouseSupport, TrackButtonMaskFromTouchStart)
-{
- auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
- auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
- [webView synchronouslyLoadHTMLString:@"<script>"
- "window.didReleaseRightButton = false;"
- "document.documentElement.addEventListener('mouseup', function (e) {"
- " if (e.button == 2)"
- " window.didReleaseRightButton = true;"
- "});"
- "</script>"];
-
- auto contentView = [webView wkContentView];
- auto gesture = mouseGesture(contentView);
-
- RetainPtr<WKTestingTouch> touch = adoptNS([[WKTestingTouch alloc] init]);
- RetainPtr<NSSet> touchSet = [NSSet setWithObject:touch.get()];
-
- RetainPtr<WKTestingEvent> event = adoptNS([[WKTestingEvent alloc] init]);
-
- [gesture _hoverEntered:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
- [touch setTapCount:1];
- [event _setButtonMask:UIEventButtonMaskSecondary];
- [gesture touchesBegan:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
- [event _setButtonMask:0];
- [gesture touchesEnded:touchSet.get() withEvent:event.get()];
- [contentView _mouseGestureRecognizerChanged:gesture];
-
- __block bool done = false;
-
- [webView _doAfterProcessingAllPendingMouseEvents:^{
- NSNumber *result = [webView objectByEvaluatingJavaScript:@"window.didReleaseRightButton"];
- EXPECT_TRUE([result boolValue]);
- done = true;
- }];
-
- TestWebKitAPI::Util::run(&done);
-}
-
-
-#endif // PLATFORM(MACCATALYST)