Skip to content

Commit 6453e5e

Browse files
Add test and infrastructure for link popover
https://bugs.webkit.org/show_bug.cgi?id=163406 Patch by Megan Gardner <[email protected]> on 2016-10-17 Reviewed by Simon Fraser. Source/WebKit2: Add infrastructure to see when a link popover appears, and what URL it has loaded. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView didShowForcePressPreview]): (-[WKWebView didDismissForcePressPreview]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _contentsOfUserInterfaceItem:]): (-[WKContentView _presentedViewControllerForPreviewItemController:]): (-[WKContentView _previewItemController:didDismissPreview:committing:]): (-[WKContentView _previewItemControllerDidCancelPreview:]): Tools: Added functionality test for link popovers. Can query for what URL is loaded, and that the popover has appeared or has been dismissed. Added a link popover test. * DumpRenderTree/ios/UIScriptControllerIOS.mm: (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted. * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: * TestRunnerShared/UIScriptContext/UIScriptContext.h: * TestRunnerShared/UIScriptContext/UIScriptController.cpp: (WTR::UIScriptController::setDidShowForcePressPreviewCallback): (WTR::UIScriptController::didShowForcePressPreviewCallback): (WTR::UIScriptController::setDidDismissForcePressPreviewCallback): (WTR::UIScriptController::didDismissForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback): (WTR::UIScriptController::didEndFormControlInteractionCallback): Deleted. (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted. * TestRunnerShared/UIScriptContext/UIScriptController.h: * WebKitTestRunner/cocoa/TestRunnerWKWebView.h: * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm: (-[TestRunnerWKWebView dealloc]): (-[TestRunnerWKWebView didShowForcePressPreview]): (-[TestRunnerWKWebView didDismissForcePressPreview]): * WebKitTestRunner/ios/UIScriptControllerIOS.mm: (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback): (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted. LayoutTests: * fast/events/touch/ios/iphone7/force-press-on-link-expected.txt: Added. * fast/events/touch/ios/iphone7/force-press-on-link.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@207447 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 4cdf085 commit 6453e5e

File tree

16 files changed

+291
-0
lines changed

16 files changed

+291
-0
lines changed

LayoutTests/ChangeLog

+10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
2016-10-17 Megan Gardner <[email protected]>
2+
3+
Add test and infrastructure for link popover
4+
https://bugs.webkit.org/show_bug.cgi?id=163406
5+
6+
Reviewed by Simon Fraser.
7+
8+
* fast/events/touch/ios/iphone7/force-press-on-link-expected.txt: Added.
9+
* fast/events/touch/ios/iphone7/force-press-on-link.html: Added.
10+
111
2016-10-17 Joseph Pecoraro <[email protected]>
212

313
Web Inspector: Add toggles for debugger pauses at console.assert failures
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PASS: correct page loaded in popover
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
2+
3+
<html>
4+
<head>
5+
<script>
6+
if (window.testRunner) {
7+
testRunner.dumpAsText();
8+
testRunner.waitUntilDone();
9+
}
10+
11+
function getUIScript()
12+
{
13+
return `
14+
(function() {
15+
var eventStream = {
16+
events : [
17+
{
18+
interpolate : "linear",
19+
timestep: 0.025,
20+
startEvent : {
21+
inputType : "hand",
22+
timeOffset : 0,
23+
touches : [
24+
{
25+
inputType : "finger",
26+
phase : "began",
27+
id : 1,
28+
x : 20,
29+
y : 40,
30+
pressure : 0
31+
}
32+
]
33+
},
34+
endEvent : {
35+
inputType : "hand",
36+
timeOffset : 3.0,
37+
touches : [
38+
{
39+
inputType : "finger",
40+
phase : "stationary",
41+
id : 1,
42+
x : 20,
43+
y : 40,
44+
pressure : 500
45+
}
46+
]
47+
}
48+
}
49+
]
50+
};
51+
52+
uiController.sendEventStream(JSON.stringify(eventStream), function() {});
53+
54+
uiController.didShowForcePressPreviewCallback = function() {
55+
uiController.uiScriptComplete(JSON.stringify(uiController.contentsOfUserInterfaceItem('linkPreviewPopoverContents')));
56+
};
57+
58+
})();`
59+
}
60+
61+
function getUIFinishScript()
62+
{
63+
return `
64+
(function() {
65+
uiController.liftUpAtPoint(20, 40, 1, function() {
66+
uiController.uiScriptComplete();
67+
});
68+
})();`
69+
}
70+
71+
function runTest()
72+
{
73+
if (!testRunner.runUIScript)
74+
return;
75+
76+
var output = '';
77+
var target = document.getElementById('target');
78+
79+
if (testRunner.runUIScript) {
80+
testRunner.runUIScript(getUIScript(), function(result) {
81+
var uiContentsDictionary = JSON.parse(result);
82+
var pageURL = uiContentsDictionary.linkPreviewPopoverContents.pageURL;
83+
if (pageURL = 'http://localhost:54321')
84+
output += 'PASS: correct page loaded in popover';
85+
document.getElementById('target').innerHTML = output;
86+
87+
testRunner.runUIScript(getUIFinishScript(), function() {
88+
testRunner.notifyDone();
89+
});
90+
});
91+
}
92+
}
93+
94+
window.addEventListener('load', runTest, false);
95+
</script>
96+
<style>
97+
#target {
98+
height: 100px;
99+
width: 200px;
100+
background-color: silver;
101+
}
102+
</style>
103+
<meta name="viewport" content="initial-scale=1">
104+
</head>
105+
<body>
106+
<div id="target">
107+
<a href="http://localhost:54321">Link Test</a>
108+
This test requires UIScriptController to run.
109+
</div>
110+
</body>
111+
</html>

Source/WebKit2/ChangeLog

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
2016-10-17 Megan Gardner <[email protected]>
2+
3+
Add test and infrastructure for link popover
4+
https://bugs.webkit.org/show_bug.cgi?id=163406
5+
6+
Reviewed by Simon Fraser.
7+
8+
Add infrastructure to see when a link popover appears, and what URL it has loaded.
9+
10+
* UIProcess/API/Cocoa/WKWebView.mm:
11+
(-[WKWebView didShowForcePressPreview]):
12+
(-[WKWebView didDismissForcePressPreview]):
13+
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
14+
* UIProcess/ios/WKContentViewInteraction.mm:
15+
(-[WKContentView _contentsOfUserInterfaceItem:]):
16+
(-[WKContentView _presentedViewControllerForPreviewItemController:]):
17+
(-[WKContentView _previewItemController:didDismissPreview:committing:]):
18+
(-[WKContentView _previewItemControllerDidCancelPreview:]):
19+
120
2016-10-17 Tim Horton <[email protected]>
221

322
REGRESSION (r169805): WKWebView canGoBack returning YES when nothing is in the back-forward list after restoring session state

Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

+10
Original file line numberDiff line numberDiff line change
@@ -4547,6 +4547,16 @@ - (void)didEndFormControlInteraction
45474547
// For subclasses to override.
45484548
}
45494549

4550+
- (void)_didShowForcePressPreview
4551+
{
4552+
// For subclasses to override.
4553+
}
4554+
4555+
- (void)_didDismissForcePressPreview
4556+
{
4557+
// For subclasses to override.
4558+
}
4559+
45504560
- (NSArray<UIView *> *)_uiTextSelectionRectViews
45514561
{
45524562
return [_contentView valueForKeyPath:@"interactionAssistant.selectionView.rangeView.m_rectViews"];

Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h

+3
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,9 @@ typedef NS_ENUM(NSInteger, _WKImmediateActionType) {
268268
- (void)didStartFormControlInteraction WK_API_AVAILABLE(ios(WK_IOS_TBA));
269269
- (void)didEndFormControlInteraction WK_API_AVAILABLE(ios(WK_IOS_TBA));
270270

271+
- (void)_didShowForcePressPreview WK_API_AVAILABLE(ios(WK_IOS_TBA));
272+
- (void)_didDismissForcePressPreview WK_API_AVAILABLE(ios(WK_IOS_TBA));
273+
271274
@property (nonatomic, readonly) NSArray<UIView *> *_uiTextSelectionRectViews WK_API_AVAILABLE(ios(WK_IOS_TBA));
272275

273276
#endif

Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm

+11
Original file line numberDiff line numberDiff line change
@@ -3849,6 +3849,11 @@ - (NSDictionary *)_contentsOfUserInterfaceItem:(NSString *)userInterfaceItem
38493849
if ([userInterfaceItem isEqualToString:@"actionSheet"])
38503850
return @{ userInterfaceItem: [_actionSheetAssistant currentAvailableActionTitles] };
38513851

3852+
if ([userInterfaceItem isEqualToString:@"linkPreviewPopoverContents"]) {
3853+
NSString *url = [_previewItemController previewData][UIPreviewDataLink];
3854+
return @{ userInterfaceItem: @{ @"pageURL": url } };
3855+
}
3856+
38523857
return nil;
38533858
}
38543859

@@ -4022,6 +4027,8 @@ - (CGRect)_presentationRectForPreviewItemController:(UIPreviewItemController *)c
40224027
- (UIViewController *)_presentedViewControllerForPreviewItemController:(UIPreviewItemController *)controller
40234028
{
40244029
id <WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);
4030+
4031+
[_webView _didShowForcePressPreview];
40254032

40264033
NSURL *targetURL = controller.previewData[UIPreviewDataLink];
40274034
URL coreTargetURL = targetURL;
@@ -4128,6 +4135,8 @@ - (void)_previewItemController:(UIPreviewItemController *)controller didDismissP
41284135
[uiDelegate _webView:_webView didDismissPreviewViewController:viewController committing:committing];
41294136
else if ([uiDelegate respondsToSelector:@selector(_webView:didDismissPreviewViewController:)])
41304137
[uiDelegate _webView:_webView didDismissPreviewViewController:viewController];
4138+
4139+
[_webView _didDismissForcePressPreview];
41314140
}
41324141

41334142
- (UIImage *)_presentationSnapshotForPreviewItemController:(UIPreviewItemController *)controller
@@ -4161,6 +4170,8 @@ - (NSArray *)_presentationRectsForPreviewItemController:(UIPreviewItemController
41614170
- (void)_previewItemControllerDidCancelPreview:(UIPreviewItemController *)controller
41624171
{
41634172
_highlightLongPressCanClick = NO;
4173+
4174+
[_webView _didDismissForcePressPreview];
41644175
}
41654176

41664177
@end

Tools/ChangeLog

+38
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
2016-10-17 Megan Gardner <[email protected]>
2+
3+
Add test and infrastructure for link popover
4+
https://bugs.webkit.org/show_bug.cgi?id=163406
5+
6+
Reviewed by Simon Fraser.
7+
8+
Added functionality test for link popovers.
9+
Can query for what URL is loaded, and that the popover has appeared or has
10+
been dismissed.
11+
Added a link popover test.
12+
13+
* DumpRenderTree/ios/UIScriptControllerIOS.mm:
14+
(WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
15+
(WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
16+
(WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.
17+
* TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
18+
* TestRunnerShared/UIScriptContext/UIScriptContext.h:
19+
* TestRunnerShared/UIScriptContext/UIScriptController.cpp:
20+
(WTR::UIScriptController::setDidShowForcePressPreviewCallback):
21+
(WTR::UIScriptController::didShowForcePressPreviewCallback):
22+
(WTR::UIScriptController::setDidDismissForcePressPreviewCallback):
23+
(WTR::UIScriptController::didDismissForcePressPreviewCallback):
24+
(WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
25+
(WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
26+
(WTR::UIScriptController::didEndFormControlInteractionCallback): Deleted.
27+
(WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.
28+
* TestRunnerShared/UIScriptContext/UIScriptController.h:
29+
* WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
30+
* WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
31+
(-[TestRunnerWKWebView dealloc]):
32+
(-[TestRunnerWKWebView didShowForcePressPreview]):
33+
(-[TestRunnerWKWebView didDismissForcePressPreview]):
34+
* WebKitTestRunner/ios/UIScriptControllerIOS.mm:
35+
(WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
36+
(WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
37+
(WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.
38+
139
2016-10-17 Tim Horton <[email protected]>
240

341
REGRESSION (r169805): WKWebView canGoBack returning YES when nothing is in the back-forward list after restoring session state

Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm

+8
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,14 @@
173173
void UIScriptController::platformSetDidEndFormControlInteractionCallback()
174174
{
175175
}
176+
177+
void UIScriptController::platformSetDidShowForcePressPreviewCallback()
178+
{
179+
}
180+
181+
void UIScriptController::platformSetDidDismissForcePressPreviewCallback()
182+
{
183+
}
176184

177185
void UIScriptController::platformSetWillBeginZoomingCallback()
178186
{

Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl

+4
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ interface UIScriptController {
122122
attribute object didStartFormControlInteractionCallback;
123123
attribute object didEndFormControlInteractionCallback;
124124

125+
// Force press preview handling
126+
attribute object didShowForcePressPreviewCallback;
127+
attribute object didDismissForcePressPreviewCallback;
128+
125129
// <select> picker
126130
void selectFormAccessoryPickerRow(long rowIndex);
127131

Tools/TestRunnerShared/UIScriptContext/UIScriptContext.h

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ typedef enum {
5656
CallbackTypeDidEndScrolling,
5757
CallbackTypeDidStartFormControlInteraction,
5858
CallbackTypeDidEndFormControlInteraction,
59+
CallbackTypeDidShowForcePressPreview,
60+
CallbackTypeDidDismissForcePressPreview,
5961
CallbackTypeNonPersistent = firstNonPersistentCallbackID
6062
} CallbackType;
6163

Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,28 @@ JSValueRef UIScriptController::didEndFormControlInteractionCallback() const
7979
{
8080
return m_context->callbackWithID(CallbackTypeDidEndFormControlInteraction);
8181
}
82+
83+
void UIScriptController::setDidShowForcePressPreviewCallback(JSValueRef callback)
84+
{
85+
m_context->registerCallback(callback, CallbackTypeDidShowForcePressPreview);
86+
platformSetDidShowForcePressPreviewCallback();
87+
}
88+
89+
JSValueRef UIScriptController::didShowForcePressPreviewCallback() const
90+
{
91+
return m_context->callbackWithID(CallbackTypeDidShowForcePressPreview);
92+
}
93+
94+
void UIScriptController::setDidDismissForcePressPreviewCallback(JSValueRef callback)
95+
{
96+
m_context->registerCallback(callback, CallbackTypeDidDismissForcePressPreview);
97+
platformSetDidDismissForcePressPreviewCallback();
98+
}
99+
100+
JSValueRef UIScriptController::didDismissForcePressPreviewCallback() const
101+
{
102+
return m_context->callbackWithID(CallbackTypeDidDismissForcePressPreview);
103+
}
82104

83105
void UIScriptController::setWillBeginZoomingCallback(JSValueRef callback)
84106
{
@@ -253,6 +275,14 @@ void UIScriptController::platformSetDidStartFormControlInteractionCallback()
253275
void UIScriptController::platformSetDidEndFormControlInteractionCallback()
254276
{
255277
}
278+
279+
void UIScriptController::platformSetDidShowForcePressPreviewCallback()
280+
{
281+
}
282+
283+
void UIScriptController::platformSetDidDismissForcePressPreviewCallback()
284+
{
285+
}
256286

257287
void UIScriptController::platformSetWillBeginZoomingCallback()
258288
{

Tools/TestRunnerShared/UIScriptContext/UIScriptController.h

+8
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ class UIScriptController : public JSWrappable {
8585

8686
void setDidEndFormControlInteractionCallback(JSValueRef);
8787
JSValueRef didEndFormControlInteractionCallback() const;
88+
89+
void setDidShowForcePressPreviewCallback(JSValueRef);
90+
JSValueRef didShowForcePressPreviewCallback() const;
91+
92+
void setDidDismissForcePressPreviewCallback(JSValueRef);
93+
JSValueRef didDismissForcePressPreviewCallback() const;
8894

8995
void setWillBeginZoomingCallback(JSValueRef);
9096
JSValueRef willBeginZoomingCallback() const;
@@ -118,6 +124,8 @@ class UIScriptController : public JSWrappable {
118124

119125
void platformSetDidStartFormControlInteractionCallback();
120126
void platformSetDidEndFormControlInteractionCallback();
127+
void platformSetDidShowForcePressPreviewCallback();
128+
void platformSetDidDismissForcePressPreviewCallback();
121129
void platformSetWillBeginZoomingCallback();
122130
void platformSetDidEndZoomingCallback();
123131
void platformSetDidShowKeyboardCallback();

Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
@property (nonatomic, copy) void (^didStartFormControlInteractionCallback)(void);
3535
@property (nonatomic, copy) void (^didEndFormControlInteractionCallback)(void);
36+
@property (nonatomic, copy) void (^didShowForcePressPreviewCallback)(void);
37+
@property (nonatomic, copy) void (^didDismissForcePressPreviewCallback)(void);
3638
@property (nonatomic, copy) void (^willBeginZoomingCallback)(void);
3739
@property (nonatomic, copy) void (^didEndZoomingCallback)(void);
3840
@property (nonatomic, copy) void (^didShowKeyboardCallback)(void);

Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm

+14
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ - (void)dealloc
7575

7676
self.didStartFormControlInteractionCallback = nil;
7777
self.didEndFormControlInteractionCallback = nil;
78+
self.didShowForcePressPreviewCallback = nil;
79+
self.didDismissForcePressPreviewCallback = nil;
7880
self.willBeginZoomingCallback = nil;
7981
self.didEndZoomingCallback = nil;
8082
self.didShowKeyboardCallback = nil;
@@ -99,6 +101,18 @@ - (void)didEndFormControlInteraction
99101
self.didEndFormControlInteractionCallback();
100102
}
101103

104+
- (void)_didShowForcePressPreview
105+
{
106+
if (self.didShowForcePressPreviewCallback)
107+
self.didShowForcePressPreviewCallback();
108+
}
109+
110+
- (void)_didDismissForcePressPreview
111+
{
112+
if (self.didDismissForcePressPreviewCallback)
113+
self.didDismissForcePressPreviewCallback();
114+
}
115+
102116
- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler
103117
{
104118
ASSERT(!self.zoomToScaleCompletionHandler);

0 commit comments

Comments
 (0)