Title: [202132] trunk
Revision
202132
Author
[email protected]
Date
2016-06-16 11:49:14 -0700 (Thu, 16 Jun 2016)

Log Message

[iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
https://bugs.webkit.org/show_bug.cgi?id=158828

Reviewed by Enrica Casucci.

Source/WebKit2:

WebPage::getAssistedNodeInformation() unconditionally set information.selectionRect()
to a 1x1 rect at the last interaction location. This caused -[WKWebView _zoomToFocusRect:...]
to early return under the !forceScroll clause if the last interaction rect was visible, but
the elementRect was not. This would happen, for example, if a click in a <button> focussed
an input on some other portion of the page. This behavior is iPad-only, because forceScroll
is only NO there.

Fix by making getAssistedNodeInformation() only set the selectionRect to the last interaction
location if that is inside of the elementRect (this caters to the case where a tap is inside
an input which is larger than the screen). Otherwise, set it to the empty rect.

Make this testable by allowing a test to opt into the iPad-style scrolling/zooming behavior
in this code path (essentially, making forceScroll NO for testing), via testing SPI on WKWebView,
plumbed through to WKContentView.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView forceIPadStyleZoomOnInputFocus]):
(-[WKWebView setForceIPadStyleZoomOnInputFocus:]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _displayFormNodeInputView]):
(-[WKContentView requiresAccessoryView:]):
(-[WKContentView inputAccessoryView]):
(-[WKContentView forceIPadStyleZoomOnInputFocus]):
(-[WKContentView setForceIPadStyleZoomOnInputFocus:]):
(-[WKContentView requiresAccessoryView]): Remove redundant returns, and allow testing to
override the "isIPad" condition.
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::getAssistedNodeInformation):

Tools:

Expose "forceIPadStyleZoomOnInputFocus" on UIScriptController, which allows iPad-style
zooming behavior on <input> focus in the iPhone simulator, which is used for testing.

* WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
* WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
(WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
(WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):
* WebKitTestRunner/UIScriptContext/UIScriptController.h:
* WebKitTestRunner/ios/TestControllerIOS.mm:
(WTR::TestController::platformResetStateToConsistentValues):
* WebKitTestRunner/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
(WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):

LayoutTests:

Add various tests for focusing form fields. focus-input-via-button-ipad.html tests
the change in the current patch.

* fast/forms/ios/focus-input-in-fixed-expected.txt: Added.
* fast/forms/ios/focus-input-in-fixed.html: Added.
* fast/forms/ios/focus-input-via-button-ipad-expected.txt: Added.
* fast/forms/ios/focus-input-via-button-ipad.html: Added.
* fast/forms/ios/focus-long-textarea-expected.txt: Added.
* fast/forms/ios/focus-long-textarea.html: Added.
* fast/forms/ios/resources/zooming-test-utils.js:
(testZoomAfterTap):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (202131 => 202132)


--- trunk/LayoutTests/ChangeLog	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/LayoutTests/ChangeLog	2016-06-16 18:49:14 UTC (rev 202132)
@@ -1,3 +1,22 @@
+2016-06-15  Simon Fraser  <[email protected]>
+
+        [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
+        https://bugs.webkit.org/show_bug.cgi?id=158828
+
+        Reviewed by Enrica Casucci.
+        
+        Add various tests for focusing form fields. focus-input-via-button-ipad.html tests
+        the change in the current patch.
+
+        * fast/forms/ios/focus-input-in-fixed-expected.txt: Added.
+        * fast/forms/ios/focus-input-in-fixed.html: Added.
+        * fast/forms/ios/focus-input-via-button-ipad-expected.txt: Added.
+        * fast/forms/ios/focus-input-via-button-ipad.html: Added.
+        * fast/forms/ios/focus-long-textarea-expected.txt: Added.
+        * fast/forms/ios/focus-long-textarea.html: Added.
+        * fast/forms/ios/resources/zooming-test-utils.js:
+        (testZoomAfterTap):
+
 2016-06-16  Adam Bergkvist  <[email protected]>
 
         WebRTC: Check type of this in RTCPeerConnection JS built-in functions

Added: trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed-expected.txt (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed-expected.txt	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,4 @@
+
+tap location	{ x: 40.000, y: 130.000 }
+scale	1.455
+visibleRect	{ left: 0.000, top: 37.809, width: 219.979, height: 329.968 }

Added: trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed.html (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-input-in-fixed.html	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,43 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=0.5">
+    <style>
+        .fixed {
+            position: fixed;
+            height: 200px;
+            width: 400px;
+            top: 100px;
+            left: 10px;
+            background-color: silver;
+        }
+        
+        input[type="text"] {
+            margin: 20px;
+        }
+    </style>
+    
+    <script src=""
+    <script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    function doTest()
+    {
+        testZoomAfterTap(document.getElementById('input'), 10, 10);
+    }
+
+    window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<div class="fixed">
+    <input id="input" type="text">
+</div>
+
+</body>
+</html>

Added: trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad-expected.txt (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad-expected.txt	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,7 @@
+Tests zooming into a text input on tap.
+
+Click to focus input
+
+tap location	{ x: 20.000, y: 62.000 }
+scale	1.455
+visibleRect	{ left: 0.000, top: 791.923, width: 219.979, height: 329.968 }

Added: trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad.html (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-input-via-button-ipad.html	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,44 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=0.5">
+    <style>
+        input[type="text"] {
+            margin: 800px 20px;
+        }
+        button {
+            display: block;
+        }
+    </style>
+    
+    <script src=""
+    <script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    function buttonClicked()
+    {
+        document.getElementById('input').focus();
+    }
+
+    function doTest()
+    {
+        const useIPadZoomingBehavior = true;
+        testZoomAfterTap(document.getElementById('target'), 10, 10, useIPadZoomingBehavior);
+    }
+
+    window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<p>Tests zooming into a text input on tap.</p>
+<button id="target" _onclick_="buttonClicked()">Click to focus input</button>
+
+<input id="input" type="text">
+
+</body>
+</html>

Added: trunk/LayoutTests/fast/forms/ios/focus-long-textarea-expected.txt (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-long-textarea-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-long-textarea-expected.txt	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,6 @@
+Tests zooming into a tall textarea on tap.
+
+
+tap location	{ x: 38.000, y: 664.000 }
+scale	1.455
+visibleRect	{ left: 0.000, top: 492.546, width: 219.979, height: 329.968 }

Added: trunk/LayoutTests/fast/forms/ios/focus-long-textarea.html (0 => 202132)


--- trunk/LayoutTests/fast/forms/ios/focus-long-textarea.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/ios/focus-long-textarea.html	2016-06-16 18:49:14 UTC (rev 202132)
@@ -0,0 +1,66 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=0.5">
+    <style>
+        textarea {
+            margin: 400px 20px;
+        }
+    </style>
+    
+    <script src=""
+    <script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    function doTest()
+    {
+        var textarea = document.getElementById('input');
+        var verticalPoint = textarea.clientHeight / 2;
+        testZoomAfterTap(textarea, 10, verticalPoint);
+    }
+
+    window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<p>Tests zooming into a tall textarea on tap.</p>
+<textarea id="input" rows="30">
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+A
+</textarea>
+
+</body>
+</html>

Modified: trunk/LayoutTests/fast/forms/ios/resources/zooming-test-utils.js (202131 => 202132)


--- trunk/LayoutTests/fast/forms/ios/resources/zooming-test-utils.js	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/LayoutTests/fast/forms/ios/resources/zooming-test-utils.js	2016-06-16 18:49:14 UTC (rev 202132)
@@ -1,12 +1,12 @@
 
-function testZoomAfterTap(targetElement, xOffset, yOffset)
+function testZoomAfterTap(targetElement, xOffset, yOffset, useIPadBehavior)
 {
     if (!window.testRunner || !testRunner.runUIScript)
         return;
 
     var point = getPointInsideElement(targetElement, xOffset, yOffset);
 
-    var uiScript = zoomAfterSingleTapUIScript(point.x, point.y);
+    var uiScript = zoomAfterSingleTapUIScript(point.x, point.y, useIPadBehavior);
     testRunner.runUIScript(uiScript, function(result) {
         var results = tableFromJSON(result);
         document.body.appendChild(results);
@@ -14,7 +14,7 @@
     });
 }
 
-function zoomAfterSingleTapUIScript(x, y)
+function zoomAfterSingleTapUIScript(x, y, useIPadBehavior)
 {
     return `
         (function() {
@@ -34,6 +34,8 @@
                 uiController.uiScriptComplete(result);
             };
 
+            if (${useIPadBehavior})
+                uiController.forceIPadStyleZoomOnInputFocus = true;
             uiController.singleTapAtPoint(${x}, ${y}, function() {});
         })();`
 }

Modified: trunk/Source/WebKit2/ChangeLog (202131 => 202132)


--- trunk/Source/WebKit2/ChangeLog	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/ChangeLog	2016-06-16 18:49:14 UTC (rev 202132)
@@ -1,3 +1,41 @@
+2016-06-15  Simon Fraser  <[email protected]>
+
+        [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
+        https://bugs.webkit.org/show_bug.cgi?id=158828
+
+        Reviewed by Enrica Casucci.
+        
+        WebPage::getAssistedNodeInformation() unconditionally set information.selectionRect()
+        to a 1x1 rect at the last interaction location. This caused -[WKWebView _zoomToFocusRect:...]
+        to early return under the !forceScroll clause if the last interaction rect was visible, but
+        the elementRect was not. This would happen, for example, if a click in a <button> focussed
+        an input on some other portion of the page. This behavior is iPad-only, because forceScroll
+        is only NO there.
+        
+        Fix by making getAssistedNodeInformation() only set the selectionRect to the last interaction
+        location if that is inside of the elementRect (this caters to the case where a tap is inside
+        an input which is larger than the screen). Otherwise, set it to the empty rect.
+        
+        Make this testable by allowing a test to opt into the iPad-style scrolling/zooming behavior
+        in this code path (essentially, making forceScroll NO for testing), via testing SPI on WKWebView,
+        plumbed through to WKContentView.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView forceIPadStyleZoomOnInputFocus]):
+        (-[WKWebView setForceIPadStyleZoomOnInputFocus:]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/ios/WKContentViewInteraction.h:
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _displayFormNodeInputView]):
+        (-[WKContentView requiresAccessoryView:]):
+        (-[WKContentView inputAccessoryView]):
+        (-[WKContentView forceIPadStyleZoomOnInputFocus]):
+        (-[WKContentView setForceIPadStyleZoomOnInputFocus:]):
+        (-[WKContentView requiresAccessoryView]): Remove redundant returns, and allow testing to
+        override the "isIPad" condition.
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::getAssistedNodeInformation):
+
 2016-06-15  Sam Weinig  <[email protected]>
 
         Forward/Back keyboard shortcuts need to flip for RTL

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (202131 => 202132)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2016-06-16 18:49:14 UTC (rev 202132)
@@ -4486,6 +4486,16 @@
     [_contentView accessoryTab:NO];
 }
 
+- (BOOL)forceIPadStyleZoomOnInputFocus
+{
+    return [_contentView forceIPadStyleZoomOnInputFocus];
+}
+
+- (void)setForceIPadStyleZoomOnInputFocus:(BOOL)forceIPadStyleZoom
+{
+    [_contentView setForceIPadStyleZoomOnInputFocus:forceIPadStyleZoom];
+}
+
 #endif // PLATFORM(IOS)
 
 #if PLATFORM(MAC)

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (202131 => 202132)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2016-06-16 18:49:14 UTC (rev 202132)
@@ -255,8 +255,10 @@
 - (CGPoint)_convertPointFromContentsToView:(CGPoint)point WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
 - (CGPoint)_convertPointFromViewToContents:(CGPoint)point WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
 
-- (void)keyboardAccessoryBarNext;
-- (void)keyboardAccessoryBarPrevious;
+- (void)keyboardAccessoryBarNext WK_AVAILABLE(NA, WK_IOS_TBA);
+- (void)keyboardAccessoryBarPrevious WK_AVAILABLE(NA, WK_IOS_TBA);
+
+@property (nonatomic) BOOL forceIPadStyleZoomOnInputFocus WK_AVAILABLE(NA, WK_IOS_TBA);
 #endif
 
 #if !TARGET_OS_IPHONE

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h (202131 => 202132)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2016-06-16 18:49:14 UTC (rev 202132)
@@ -171,6 +171,9 @@
     BOOL _showDebugTapHighlightsForFastClicking;
 
     BOOL _resigningFirstResponder;
+
+    // For testing.
+    BOOL _forceIPadStyleZoomOnInputFocus;
 }
 
 @end
@@ -231,4 +234,10 @@
 @end
 #endif
 
+@interface WKContentView (WKInteractionTesting)
+
+@property (nonatomic) BOOL forceIPadStyleZoomOnInputFocus;
+
+@end
+
 #endif // PLATFORM(IOS)

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (202131 => 202132)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2016-06-16 18:49:14 UTC (rev 202132)
@@ -1067,8 +1067,9 @@
                   fontSize:_assistedNodeInformation.nodeFontSize
               minimumScale:_assistedNodeInformation.minimumScaleFactor
               maximumScale:_assistedNodeInformation.maximumScaleFactor
-              allowScaling:(_assistedNodeInformation.allowsUserScalingIgnoringForceAlwaysScaling && !UICurrentUserInterfaceIdiomIsPad())
-               forceScroll:[self requiresAccessoryView]];
+              allowScaling:(_assistedNodeInformation.allowsUserScalingIgnoringForceAlwaysScaling && (!UICurrentUserInterfaceIdiomIsPad() || _forceIPadStyleZoomOnInputFocus))
+               forceScroll:[self requiresAccessoryView:_forceIPadStyleZoomOnInputFocus]];
+
     _didAccessoryTabInitiateFocus = NO;
     [self _ensureFormAccessoryView];
     [self _updateAccessory];
@@ -1579,7 +1580,7 @@
     [_textSelectionAssistant didEndScrollingOverflow];
 }
 
-- (BOOL)requiresAccessoryView
+- (BOOL)requiresAccessoryView:(BOOL)forceIPadBehavior
 {
     if ([_formInputSession accessoryViewShouldNotShow])
         return NO;
@@ -1595,10 +1596,8 @@
     case InputType::Phone:
     case InputType::Number:
     case InputType::NumberPad:
-        return !UICurrentUserInterfaceIdiomIsPad();
     case InputType::ContentEditable:
     case InputType::TextArea:
-        return !UICurrentUserInterfaceIdiomIsPad();
     case InputType::Select:
     case InputType::Date:
     case InputType::DateTime:
@@ -1606,7 +1605,7 @@
     case InputType::Month:
     case InputType::Week:
     case InputType::Time:
-        return !UICurrentUserInterfaceIdiomIsPad();
+        return !(UICurrentUserInterfaceIdiomIsPad() || forceIPadBehavior);
     }
 }
 
@@ -1621,7 +1620,7 @@
 
 - (UIView *)inputAccessoryView
 {
-    if (![self requiresAccessoryView])
+    if (![self requiresAccessoryView:NO])
         return nil;
 
     return self.formAccessoryView;
@@ -4112,6 +4111,21 @@
 
 #endif
 
+@implementation WKContentView (WKInteractionTesting)
+
+- (BOOL)forceIPadStyleZoomOnInputFocus
+{
+    return _forceIPadStyleZoomOnInputFocus;
+}
+
+- (void)setForceIPadStyleZoomOnInputFocus:(BOOL)forceIPadStyleZoom
+{
+    _forceIPadStyleZoomOnInputFocus = forceIPadStyleZoom;
+}
+
+@end
+
+
 // UITextRange, UITextPosition and UITextSelectionRect implementations for WK2
 
 @implementation WKTextRange (UITextInputAdditions)

Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (202131 => 202132)


--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2016-06-16 18:49:14 UTC (rev 202132)
@@ -2516,9 +2516,8 @@
 {
     layoutIfNeeded();
 
-    // FIXME: This should return the selection rect, but when this is called at focus time
+    // FIXME: information.selectionRect should be set to the actual selection rect, but when this is called at focus time
     // we don't have a selection yet. Using the last interaction location is a reasonable approximation for now.
-    // FIXME: should the selection rect always be inside the elementRect?
     information.selectionRect = IntRect(m_lastInteractionLocation, IntSize(1, 1));
 
     if (RenderObject* renderer = m_assistedNode->renderer()) {
@@ -2538,8 +2537,12 @@
             information.elementRect = frameView->contentsToRootView(renderer->absoluteBoundingBoxRect());
             frameView->setCustomFixedPositionLayoutRect(currentFixedPositionRect);
             
-            if (!information.elementRect.contains(information.selectionRect))
+            if (!information.elementRect.contains(m_lastInteractionLocation))
                 information.selectionRect.setLocation(information.elementRect.location());
+        } else {
+            // Don't use the selection rect if interaction was outside the element rect.
+            if (!information.elementRect.contains(m_lastInteractionLocation))
+                information.selectionRect = IntRect();
         }
     } else
         information.elementRect = IntRect();

Modified: trunk/Tools/ChangeLog (202131 => 202132)


--- trunk/Tools/ChangeLog	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/ChangeLog	2016-06-16 18:49:14 UTC (rev 202132)
@@ -1,3 +1,24 @@
+2016-06-15  Simon Fraser  <[email protected]>
+
+        [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
+        https://bugs.webkit.org/show_bug.cgi?id=158828
+
+        Reviewed by Enrica Casucci.
+        
+        Expose "forceIPadStyleZoomOnInputFocus" on UIScriptController, which allows iPad-style
+        zooming behavior on <input> focus in the iPhone simulator, which is used for testing.
+
+        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
+        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
+        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
+        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):
+        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
+        * WebKitTestRunner/ios/TestControllerIOS.mm:
+        (WTR::TestController::platformResetStateToConsistentValues):
+        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
+        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
+        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):
+
 2016-06-15  Sam Weinig  <[email protected]>
 
         Forward/Back keyboard shortcuts need to flip for RTL

Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl (202131 => 202132)


--- trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl	2016-06-16 18:49:14 UTC (rev 202132)
@@ -60,5 +60,8 @@
 
     readonly attribute object contentVisibleRect; // Returned object has 'left', 'top', 'width', 'height' properties.
 
+    // Behavior
+    attribute boolean forceIPadStyleZoomOnInputFocus;
+
     void uiScriptComplete(DOMString result);
 };

Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp (202131 => 202132)


--- trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp	2016-06-16 18:49:14 UTC (rev 202132)
@@ -178,6 +178,15 @@
     return nullptr;
 }
 
+bool UIScriptController::forceIPadStyleZoomOnInputFocus() const
+{
+    return false;
+}
+
+void UIScriptController::setForceIPadStyleZoomOnInputFocus(bool)
+{
+}
+
 void UIScriptController::platformSetWillBeginZoomingCallback()
 {
 }

Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h (202131 => 202132)


--- trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h	2016-06-16 18:49:14 UTC (rev 202132)
@@ -80,6 +80,9 @@
     double maximumZoomScale() const;
 
     JSObjectRef contentVisibleRect() const;
+    
+    bool forceIPadStyleZoomOnInputFocus() const;
+    void setForceIPadStyleZoomOnInputFocus(bool);
 
     void uiScriptComplete(JSStringRef result);
 

Modified: trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm (202131 => 202132)


--- trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm	2016-06-16 18:49:14 UTC (rev 202132)
@@ -29,13 +29,13 @@
 #import "PlatformWebView.h"
 #import "TestInvocation.h"
 #import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 #import <WebKit/WKPreferencesRefPrivate.h>
 #import <WebKit/WKProcessPoolPrivate.h>
 #import <WebKit/WKStringCF.h>
 #import <WebKit/WKUserContentControllerPrivate.h>
-#import <WebKit/WKWebView.h>
-#import <WebKit/WKWebViewConfiguration.h>
 #import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
 #import <wtf/MainThread.h>
 
 namespace WTR {
@@ -83,6 +83,7 @@
 void TestController::platformResetStateToConsistentValues()
 {
     cocoaResetStateToConsistentValues();
+    [mainWebView()->platformView() setForceIPadStyleZoomOnInputFocus:NO];
 }
 
 void TestController::platformConfigureViewForTest(const TestInvocation& test)

Modified: trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm (202131 => 202132)


--- trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm	2016-06-16 18:25:54 UTC (rev 202131)
+++ trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm	2016-06-16 18:49:14 UTC (rev 202132)
@@ -209,6 +209,18 @@
     return m_context->objectFromRect(wkRect);
 }
 
+bool UIScriptController::forceIPadStyleZoomOnInputFocus() const
+{
+    TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
+    return webView.forceIPadStyleZoomOnInputFocus;
+}
+
+void UIScriptController::setForceIPadStyleZoomOnInputFocus(bool value)
+{
+    TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
+    webView.forceIPadStyleZoomOnInputFocus = value;
+}
+
 void UIScriptController::platformSetWillBeginZoomingCallback()
 {
     TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to