Changeset 202132 in webkit
- Timestamp:
- Jun 16, 2016 11:49:14 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r202130 r202132 1 2016-06-15 Simon Fraser <simon.fraser@apple.com> 2 3 [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location 4 https://bugs.webkit.org/show_bug.cgi?id=158828 5 6 Reviewed by Enrica Casucci. 7 8 Add various tests for focusing form fields. focus-input-via-button-ipad.html tests 9 the change in the current patch. 10 11 * fast/forms/ios/focus-input-in-fixed-expected.txt: Added. 12 * fast/forms/ios/focus-input-in-fixed.html: Added. 13 * fast/forms/ios/focus-input-via-button-ipad-expected.txt: Added. 14 * fast/forms/ios/focus-input-via-button-ipad.html: Added. 15 * fast/forms/ios/focus-long-textarea-expected.txt: Added. 16 * fast/forms/ios/focus-long-textarea.html: Added. 17 * fast/forms/ios/resources/zooming-test-utils.js: 18 (testZoomAfterTap): 19 1 20 2016-06-16 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 21 -
trunk/LayoutTests/fast/forms/ios/resources/zooming-test-utils.js
r202116 r202132 1 1 2 function testZoomAfterTap(targetElement, xOffset, yOffset )2 function testZoomAfterTap(targetElement, xOffset, yOffset, useIPadBehavior) 3 3 { 4 4 if (!window.testRunner || !testRunner.runUIScript) … … 7 7 var point = getPointInsideElement(targetElement, xOffset, yOffset); 8 8 9 var uiScript = zoomAfterSingleTapUIScript(point.x, point.y );9 var uiScript = zoomAfterSingleTapUIScript(point.x, point.y, useIPadBehavior); 10 10 testRunner.runUIScript(uiScript, function(result) { 11 11 var results = tableFromJSON(result); … … 15 15 } 16 16 17 function zoomAfterSingleTapUIScript(x, y )17 function zoomAfterSingleTapUIScript(x, y, useIPadBehavior) 18 18 { 19 19 return ` … … 35 35 }; 36 36 37 if (${useIPadBehavior}) 38 uiController.forceIPadStyleZoomOnInputFocus = true; 37 39 uiController.singleTapAtPoint(${x}, ${y}, function() {}); 38 40 })();` -
trunk/Source/WebKit2/ChangeLog
r202129 r202132 1 2016-06-15 Simon Fraser <simon.fraser@apple.com> 2 3 [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location 4 https://bugs.webkit.org/show_bug.cgi?id=158828 5 6 Reviewed by Enrica Casucci. 7 8 WebPage::getAssistedNodeInformation() unconditionally set information.selectionRect() 9 to a 1x1 rect at the last interaction location. This caused -[WKWebView _zoomToFocusRect:...] 10 to early return under the !forceScroll clause if the last interaction rect was visible, but 11 the elementRect was not. This would happen, for example, if a click in a <button> focussed 12 an input on some other portion of the page. This behavior is iPad-only, because forceScroll 13 is only NO there. 14 15 Fix by making getAssistedNodeInformation() only set the selectionRect to the last interaction 16 location if that is inside of the elementRect (this caters to the case where a tap is inside 17 an input which is larger than the screen). Otherwise, set it to the empty rect. 18 19 Make this testable by allowing a test to opt into the iPad-style scrolling/zooming behavior 20 in this code path (essentially, making forceScroll NO for testing), via testing SPI on WKWebView, 21 plumbed through to WKContentView. 22 23 * UIProcess/API/Cocoa/WKWebView.mm: 24 (-[WKWebView forceIPadStyleZoomOnInputFocus]): 25 (-[WKWebView setForceIPadStyleZoomOnInputFocus:]): 26 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 27 * UIProcess/ios/WKContentViewInteraction.h: 28 * UIProcess/ios/WKContentViewInteraction.mm: 29 (-[WKContentView _displayFormNodeInputView]): 30 (-[WKContentView requiresAccessoryView:]): 31 (-[WKContentView inputAccessoryView]): 32 (-[WKContentView forceIPadStyleZoomOnInputFocus]): 33 (-[WKContentView setForceIPadStyleZoomOnInputFocus:]): 34 (-[WKContentView requiresAccessoryView]): Remove redundant returns, and allow testing to 35 override the "isIPad" condition. 36 * WebProcess/WebPage/ios/WebPageIOS.mm: 37 (WebKit::WebPage::getAssistedNodeInformation): 38 1 39 2016-06-15 Sam Weinig <sam@webkit.org> 2 40 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r202129 r202132 4487 4487 } 4488 4488 4489 - (BOOL)forceIPadStyleZoomOnInputFocus 4490 { 4491 return [_contentView forceIPadStyleZoomOnInputFocus]; 4492 } 4493 4494 - (void)setForceIPadStyleZoomOnInputFocus:(BOOL)forceIPadStyleZoom 4495 { 4496 [_contentView setForceIPadStyleZoomOnInputFocus:forceIPadStyleZoom]; 4497 } 4498 4489 4499 #endif // PLATFORM(IOS) 4490 4500 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h
r202120 r202132 256 256 - (CGPoint)_convertPointFromViewToContents:(CGPoint)point WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA); 257 257 258 - (void)keyboardAccessoryBarNext; 259 - (void)keyboardAccessoryBarPrevious; 258 - (void)keyboardAccessoryBarNext WK_AVAILABLE(NA, WK_IOS_TBA); 259 - (void)keyboardAccessoryBarPrevious WK_AVAILABLE(NA, WK_IOS_TBA); 260 261 @property (nonatomic) BOOL forceIPadStyleZoomOnInputFocus WK_AVAILABLE(NA, WK_IOS_TBA); 260 262 #endif 261 263 -
trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h
r199558 r202132 172 172 173 173 BOOL _resigningFirstResponder; 174 175 // For testing. 176 BOOL _forceIPadStyleZoomOnInputFocus; 174 177 } 175 178 … … 232 235 #endif 233 236 237 @interface WKContentView (WKInteractionTesting) 238 239 @property (nonatomic) BOOL forceIPadStyleZoomOnInputFocus; 240 241 @end 242 234 243 #endif // PLATFORM(IOS) -
trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm
r201347 r202132 1068 1068 minimumScale:_assistedNodeInformation.minimumScaleFactor 1069 1069 maximumScale:_assistedNodeInformation.maximumScaleFactor 1070 allowScaling:(_assistedNodeInformation.allowsUserScalingIgnoringForceAlwaysScaling && !UICurrentUserInterfaceIdiomIsPad()) 1071 forceScroll:[self requiresAccessoryView]]; 1070 allowScaling:(_assistedNodeInformation.allowsUserScalingIgnoringForceAlwaysScaling && (!UICurrentUserInterfaceIdiomIsPad() || _forceIPadStyleZoomOnInputFocus)) 1071 forceScroll:[self requiresAccessoryView:_forceIPadStyleZoomOnInputFocus]]; 1072 1072 1073 _didAccessoryTabInitiateFocus = NO; 1073 1074 [self _ensureFormAccessoryView]; … … 1580 1581 } 1581 1582 1582 - (BOOL)requiresAccessoryView 1583 - (BOOL)requiresAccessoryView:(BOOL)forceIPadBehavior 1583 1584 { 1584 1585 if ([_formInputSession accessoryViewShouldNotShow]) … … 1596 1597 case InputType::Number: 1597 1598 case InputType::NumberPad: 1598 return !UICurrentUserInterfaceIdiomIsPad();1599 1599 case InputType::ContentEditable: 1600 1600 case InputType::TextArea: 1601 return !UICurrentUserInterfaceIdiomIsPad();1602 1601 case InputType::Select: 1603 1602 case InputType::Date: … … 1607 1606 case InputType::Week: 1608 1607 case InputType::Time: 1609 return ! UICurrentUserInterfaceIdiomIsPad();1608 return !(UICurrentUserInterfaceIdiomIsPad() || forceIPadBehavior); 1610 1609 } 1611 1610 } … … 1622 1621 - (UIView *)inputAccessoryView 1623 1622 { 1624 if (![self requiresAccessoryView ])1623 if (![self requiresAccessoryView:NO]) 1625 1624 return nil; 1626 1625 … … 4113 4112 #endif 4114 4113 4114 @implementation WKContentView (WKInteractionTesting) 4115 4116 - (BOOL)forceIPadStyleZoomOnInputFocus 4117 { 4118 return _forceIPadStyleZoomOnInputFocus; 4119 } 4120 4121 - (void)setForceIPadStyleZoomOnInputFocus:(BOOL)forceIPadStyleZoom 4122 { 4123 _forceIPadStyleZoomOnInputFocus = forceIPadStyleZoom; 4124 } 4125 4126 @end 4127 4128 4115 4129 // UITextRange, UITextPosition and UITextSelectionRect implementations for WK2 4116 4130 -
trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm
r201888 r202132 2517 2517 layoutIfNeeded(); 2518 2518 2519 // FIXME: This should return theselection rect, but when this is called at focus time2519 // FIXME: information.selectionRect should be set to the actual selection rect, but when this is called at focus time 2520 2520 // we don't have a selection yet. Using the last interaction location is a reasonable approximation for now. 2521 // FIXME: should the selection rect always be inside the elementRect?2522 2521 information.selectionRect = IntRect(m_lastInteractionLocation, IntSize(1, 1)); 2523 2522 … … 2539 2538 frameView->setCustomFixedPositionLayoutRect(currentFixedPositionRect); 2540 2539 2541 if (!information.elementRect.contains( information.selectionRect))2540 if (!information.elementRect.contains(m_lastInteractionLocation)) 2542 2541 information.selectionRect.setLocation(information.elementRect.location()); 2542 } else { 2543 // Don't use the selection rect if interaction was outside the element rect. 2544 if (!information.elementRect.contains(m_lastInteractionLocation)) 2545 information.selectionRect = IntRect(); 2543 2546 } 2544 2547 } else -
trunk/Tools/ChangeLog
r202129 r202132 1 2016-06-15 Simon Fraser <simon.fraser@apple.com> 2 3 [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location 4 https://bugs.webkit.org/show_bug.cgi?id=158828 5 6 Reviewed by Enrica Casucci. 7 8 Expose "forceIPadStyleZoomOnInputFocus" on UIScriptController, which allows iPad-style 9 zooming behavior on <input> focus in the iPhone simulator, which is used for testing. 10 11 * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: 12 * WebKitTestRunner/UIScriptContext/UIScriptController.cpp: 13 (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus): 14 (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus): 15 * WebKitTestRunner/UIScriptContext/UIScriptController.h: 16 * WebKitTestRunner/ios/TestControllerIOS.mm: 17 (WTR::TestController::platformResetStateToConsistentValues): 18 * WebKitTestRunner/ios/UIScriptControllerIOS.mm: 19 (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus): 20 (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus): 21 1 22 2016-06-15 Sam Weinig <sam@webkit.org> 2 23 -
trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl
r202116 r202132 61 61 readonly attribute object contentVisibleRect; // Returned object has 'left', 'top', 'width', 'height' properties. 62 62 63 // Behavior 64 attribute boolean forceIPadStyleZoomOnInputFocus; 65 63 66 void uiScriptComplete(DOMString result); 64 67 }; -
trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp
r202116 r202132 179 179 } 180 180 181 bool UIScriptController::forceIPadStyleZoomOnInputFocus() const 182 { 183 return false; 184 } 185 186 void UIScriptController::setForceIPadStyleZoomOnInputFocus(bool) 187 { 188 } 189 181 190 void UIScriptController::platformSetWillBeginZoomingCallback() 182 191 { -
trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h
r202116 r202132 81 81 82 82 JSObjectRef contentVisibleRect() const; 83 84 bool forceIPadStyleZoomOnInputFocus() const; 85 void setForceIPadStyleZoomOnInputFocus(bool); 83 86 84 87 void uiScriptComplete(JSStringRef result); -
trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm
r200534 r202132 30 30 #import "TestInvocation.h" 31 31 #import <Foundation/Foundation.h> 32 #import <UIKit/UIKit.h> 32 33 #import <WebKit/WKPreferencesRefPrivate.h> 33 34 #import <WebKit/WKProcessPoolPrivate.h> 34 35 #import <WebKit/WKStringCF.h> 35 36 #import <WebKit/WKUserContentControllerPrivate.h> 36 #import <WebKit/WKWebView.h>37 #import <WebKit/WKWebViewConfiguration.h>38 37 #import <WebKit/WKWebViewConfigurationPrivate.h> 38 #import <WebKit/WKWebViewPrivate.h> 39 39 #import <wtf/MainThread.h> 40 40 … … 84 84 { 85 85 cocoaResetStateToConsistentValues(); 86 [mainWebView()->platformView() setForceIPadStyleZoomOnInputFocus:NO]; 86 87 } 87 88 -
trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm
r202116 r202132 210 210 } 211 211 212 bool UIScriptController::forceIPadStyleZoomOnInputFocus() const 213 { 214 TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView(); 215 return webView.forceIPadStyleZoomOnInputFocus; 216 } 217 218 void UIScriptController::setForceIPadStyleZoomOnInputFocus(bool value) 219 { 220 TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView(); 221 webView.forceIPadStyleZoomOnInputFocus = value; 222 } 223 212 224 void UIScriptController::platformSetWillBeginZoomingCallback() 213 225 {
Note: See TracChangeset
for help on using the changeset viewer.