WebKit Bugzilla
Attachment 348032 Details for
Bug 188896
: [iOS] Support inputmode=none
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188896-20180824115520.patch (text/plain), 21.21 KB, created by
Aditya Keerthi
on 2018-08-24 11:55:21 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Aditya Keerthi
Created:
2018-08-24 11:55:21 PDT
Size:
21.21 KB
patch
obsolete
>Subversion Revision: 235263 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c02c4fa17ab014c7a52b7482ac083234c4d7caeb..b5e3219d55fa684aafe27f24c18c2f2964954674 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2018-08-24 Aditya Keerthi <akeerthi@apple.com> >+ >+ [iOS] Support inputmode=none >+ https://bugs.webkit.org/show_bug.cgi?id=188896 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Updated InputMode.cpp to ensure that "none" is recognized as a valid value for the >+ inputmode attribute. This keyword is useful for content that renders its own >+ keyboard control. >+ >+ Spec: https://html.spec.whatwg.org/multipage/interaction.html#input-modalities%3A-the-inputmode-attribute >+ >+ Test: fast/forms/ios/inputmode-none.html >+ >+ * html/InputMode.cpp: >+ (WebCore::inputModeForAttributeValue): >+ (WebCore::stringForInputMode): >+ (WebCore::InputModeNames::none): >+ * html/InputMode.h: >+ > 2018-08-23 Aditya Keerthi <akeerthi@apple.com> > > Unreviewed, fix the Windows build after r235245. >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 6e53e9628c25b0093836409c9833f57e23cd7480..26cc520682ab72ef3b67a3c366e1331a16705120 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,27 @@ >+2018-08-24 Aditya Keerthi <akeerthi@apple.com> >+ >+ [iOS] Support inputmode=none >+ https://bugs.webkit.org/show_bug.cgi?id=188896 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ inputmode=none is used by content that renders its own keyboard control. >+ Consequently, we should not display the virtual keyboard when a user interacts >+ with an element that has the inputmode attribute set to the "none" value. >+ >+ In order to achieve this behavior, we return a UIView with a bounds of CGRectZero >+ as the inputView of the WKContentView when inputmode=none is present. Furthermore, >+ we do not provide an accessory view in this case. >+ >+ Updated the logic that zooms and scrolls to a control when it gains focus, as that >+ behavior currently relies on an accessory view being present. >+ >+ * UIProcess/ios/WKContentViewInteraction.mm: >+ (-[WKContentView _displayFormNodeInputView]): >+ (-[WKContentView inputView]): >+ (-[WKContentView requiresAccessoryView]): >+ (-[WKContentView textInputTraits]): >+ > 2018-08-23 Sihui Liu <sihui_liu@apple.com> > > Move legacy directory configuration from WebProcessPool to API::WebsiteDataStore >diff --git a/Source/WebCore/html/InputMode.cpp b/Source/WebCore/html/InputMode.cpp >index 53f87d3c2b61b5236ef4277ec1cc7c66707fadbc..bca35b4a31ff8bd0b67ac622c26dc95defde50e5 100644 >--- a/Source/WebCore/html/InputMode.cpp >+++ b/Source/WebCore/html/InputMode.cpp >@@ -32,6 +32,8 @@ namespace WebCore { > > InputMode inputModeForAttributeValue(const AtomicString& value) > { >+ if (equalIgnoringASCIICase(value, InputModeNames::none())) >+ return InputMode::None; > if (equalIgnoringASCIICase(value, InputModeNames::text())) > return InputMode::Text; > if (equalIgnoringASCIICase(value, InputModeNames::tel())) >@@ -55,6 +57,8 @@ const AtomicString& stringForInputMode(InputMode mode) > switch (mode) { > case InputMode::Unspecified: > return emptyAtom(); >+ case InputMode::None: >+ return InputModeNames::none(); > case InputMode::Text: > return InputModeNames::text(); > case InputMode::Telephone: >@@ -76,6 +80,12 @@ const AtomicString& stringForInputMode(InputMode mode) > > namespace InputModeNames { > >+const AtomicString& none() >+{ >+ static NeverDestroyed<AtomicString> mode("none", AtomicString::ConstructFromLiteral); >+ return mode; >+} >+ > const AtomicString& text() > { > static NeverDestroyed<AtomicString> mode("text", AtomicString::ConstructFromLiteral); >diff --git a/Source/WebCore/html/InputMode.h b/Source/WebCore/html/InputMode.h >index 0455594245adf1aeeaf8a18879ee9286dfde7b6c..73683701d66bec6a1d6e342d8b5923cde6beaed7 100644 >--- a/Source/WebCore/html/InputMode.h >+++ b/Source/WebCore/html/InputMode.h >@@ -31,6 +31,7 @@ namespace WebCore { > > enum class InputMode : uint8_t { > Unspecified, >+ None, > Text, > Telephone, > Url, >@@ -45,6 +46,7 @@ const AtomicString& stringForInputMode(InputMode); > > namespace InputModeNames { > >+const AtomicString& none(); > const AtomicString& text(); > const AtomicString& tel(); > const AtomicString& url(); >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >index f75c13b04515024fd689eaabe6de44e0a830766d..df3768b1160525861b5a97dad415384c2f974bbe 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >@@ -1305,7 +1305,7 @@ static NSValue *nsSizeForTapHighlightBorderRadius(WebCore::IntSize borderRadius, > minimumScale:_assistedNodeInformation.minimumScaleFactor > maximumScale:_assistedNodeInformation.maximumScaleFactorIgnoringAlwaysScalable > allowScaling:_assistedNodeInformation.allowsUserScalingIgnoringAlwaysScalable && !currentUserInterfaceIdiomIsPad() >- forceScroll:[self requiresAccessoryView]]; >+ forceScroll:(_assistedNodeInformation.inputMode == InputMode::None) ? !currentUserInterfaceIdiomIsPad() : [self requiresAccessoryView]]; > > _didAccessoryTabInitiateFocus = NO; > [self _ensureFormAccessoryView]; >@@ -1317,6 +1317,9 @@ static NSValue *nsSizeForTapHighlightBorderRadius(WebCore::IntSize borderRadius, > if (!hasAssistedNode(_assistedNodeInformation)) > return nil; > >+ if (_assistedNodeInformation.inputMode == InputMode::None) >+ return [[UIView new] autorelease]; >+ > if (!_inputPeripheral) { > switch (_assistedNodeInformation.elementType) { > case InputType::Select: >@@ -2056,6 +2059,9 @@ static void cancelPotentialTapIfNecessary(WKContentView* contentView) > if ([_formInputSession accessoryViewShouldNotShow]) > return NO; > >+ if (_assistedNodeInformation.inputMode == InputMode::None) >+ return NO; >+ > switch (_assistedNodeInformation.elementType) { > case InputType::None: > return NO; >@@ -3585,6 +3591,8 @@ static NSString *contentTypeFromFieldName(WebCore::AutofillFieldName fieldName) > [_traits setKeyboardType:UIKeyboardTypeDefault]; > } > break; >+ case InputMode::None: >+ break; > case InputMode::Text: > [_traits setKeyboardType:UIKeyboardTypeDefault]; > break; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 34775758fdf95e90e34d01ae2cee03dffa5fc56d..b0d387b99c712ee7e5c16d435b27a7e7ce4cbd59 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,26 @@ >+2018-08-24 Aditya Keerthi <akeerthi@apple.com> >+ >+ [iOS] Support inputmode=none >+ https://bugs.webkit.org/show_bug.cgi?id=188896 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added new test to verify that the system keyboard does not show for inputs with >+ inputmode=none. Updated existing inputmode tests to reflect the addition of the >+ "none" value. >+ >+ * fast/forms/inputmode-attribute-contenteditable-expected.txt: >+ * fast/forms/inputmode-attribute-contenteditable.html: >+ * fast/forms/inputmode-attribute-input-expected.txt: >+ * fast/forms/inputmode-attribute-input.html: >+ * fast/forms/inputmode-attribute-textarea-expected.txt: >+ * fast/forms/inputmode-attribute-textarea.html: >+ * fast/forms/ios/inputmode-none-expected.txt: Added. >+ * fast/forms/ios/inputmode-none.html: Added. >+ * resources/ui-helper.js: >+ (window.UIHelper.activateFormControl): >+ (window.UIHelper.inputViewBounds): >+ > 2018-08-23 Andy Estes <aestes@apple.com> > > [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index a927bc968fb726b01ddc658465521fb717a73e6a..5628008606c2ef211651e7e0ebab92f31e3bcef7 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-24 Aditya Keerthi <akeerthi@apple.com> >+ >+ [iOS] Support inputmode=none >+ https://bugs.webkit.org/show_bug.cgi?id=188896 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/html/dom/reflection-misc-expected.txt: Rebaseline. >+ > 2018-08-23 Aditya Keerthi <akeerthi@apple.com> > > [iOS] Support the inputmode attribute on contenteditable elements >diff --git a/LayoutTests/fast/forms/inputmode-attribute-contenteditable-expected.txt b/LayoutTests/fast/forms/inputmode-attribute-contenteditable-expected.txt >index 0cfb945c9809936f0288379c55d55617e68a1522..2ca5b9808f165da5a4687d4e81fae553d0445088 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-contenteditable-expected.txt >+++ b/LayoutTests/fast/forms/inputmode-attribute-contenteditable-expected.txt >@@ -10,6 +10,9 @@ PASS editor.getAttribute("inputmode") is "foobar" > PASS editor.setAttribute("inputmode", "baz"); editor.inputMode is "" > > Valid values: >+PASS editor.inputMode = "none"; editor.inputMode is "none" >+PASS editor.getAttribute("inputmode") is "none" >+PASS editor.setAttribute("inputmode", "none"); editor.inputMode is "none" > PASS editor.inputMode = "text"; editor.inputMode is "text" > PASS editor.getAttribute("inputmode") is "text" > PASS editor.setAttribute("inputmode", "text"); editor.inputMode is "text" >diff --git a/LayoutTests/fast/forms/inputmode-attribute-contenteditable.html b/LayoutTests/fast/forms/inputmode-attribute-contenteditable.html >index 12a6a4963a9915551de22373f6c21811a06d567f..2992bff6c2f001e61b301176e3d62e5b89a90d04 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-contenteditable.html >+++ b/LayoutTests/fast/forms/inputmode-attribute-contenteditable.html >@@ -18,6 +18,9 @@ shouldBe('editor.setAttribute("inputmode", "baz"); editor.inputMode', '""'); > > debug(''); > debug('Valid values:'); >+shouldBe('editor.inputMode = "none"; editor.inputMode', '"none"'); >+shouldBe('editor.getAttribute("inputmode")', '"none"'); >+shouldBe('editor.setAttribute("inputmode", "none"); editor.inputMode', '"none"'); > shouldBe('editor.inputMode = "text"; editor.inputMode', '"text"'); > shouldBe('editor.getAttribute("inputmode")', '"text"'); > shouldBe('editor.setAttribute("inputmode", "text"); editor.inputMode', '"text"'); >diff --git a/LayoutTests/fast/forms/inputmode-attribute-input-expected.txt b/LayoutTests/fast/forms/inputmode-attribute-input-expected.txt >index fcb65c29b7f651eae4ddc69b89856e0589c0be97..a8ba057ef728e1fe9469f0b35ce41c1afbbaedbc 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-input-expected.txt >+++ b/LayoutTests/fast/forms/inputmode-attribute-input-expected.txt >@@ -11,6 +11,9 @@ PASS input.getAttribute("inputmode") is "foobar" > PASS input.setAttribute("inputmode", "baz"); input.inputMode is "" > > Valid values: >+PASS input.inputMode = "none"; input.inputMode is "none" >+PASS input.getAttribute("inputmode") is "none" >+PASS input.setAttribute("inputmode", "none"); input.inputMode is "none" > PASS input.inputMode = "text"; input.inputMode is "text" > PASS input.getAttribute("inputmode") is "text" > PASS input.setAttribute("inputmode", "text"); input.inputMode is "text" >diff --git a/LayoutTests/fast/forms/inputmode-attribute-input.html b/LayoutTests/fast/forms/inputmode-attribute-input.html >index f9ee50630b006e560fa9c7d64e6d5fa731210b61..819a2341a7ecd85f78a96fdacefd80277252d98f 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-input.html >+++ b/LayoutTests/fast/forms/inputmode-attribute-input.html >@@ -18,6 +18,9 @@ shouldBe('input.setAttribute("inputmode", "baz"); input.inputMode', '""'); > > debug(''); > debug('Valid values:'); >+shouldBe('input.inputMode = "none"; input.inputMode', '"none"'); >+shouldBe('input.getAttribute("inputmode")', '"none"'); >+shouldBe('input.setAttribute("inputmode", "none"); input.inputMode', '"none"'); > shouldBe('input.inputMode = "text"; input.inputMode', '"text"'); > shouldBe('input.getAttribute("inputmode")', '"text"'); > shouldBe('input.setAttribute("inputmode", "text"); input.inputMode', '"text"'); >diff --git a/LayoutTests/fast/forms/inputmode-attribute-textarea-expected.txt b/LayoutTests/fast/forms/inputmode-attribute-textarea-expected.txt >index 66bc9429e4ac57545c516898ec97d53c3a43a8de..ba630ec97873d24f23d3517982b3eccc441584fb 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-textarea-expected.txt >+++ b/LayoutTests/fast/forms/inputmode-attribute-textarea-expected.txt >@@ -11,6 +11,9 @@ PASS textarea.getAttribute("inputmode") is "foobar" > PASS textarea.setAttribute("inputmode", "baz"); textarea.inputMode is "" > > Valid values: >+PASS textarea.inputMode = "none"; textarea.inputMode is "none" >+PASS textarea.getAttribute("inputmode") is "none" >+PASS textarea.setAttribute("inputmode", "none"); textarea.inputMode is "none" > PASS textarea.inputMode = "text"; textarea.inputMode is "text" > PASS textarea.getAttribute("inputmode") is "text" > PASS textarea.setAttribute("inputmode", "text"); textarea.inputMode is "text" >diff --git a/LayoutTests/fast/forms/inputmode-attribute-textarea.html b/LayoutTests/fast/forms/inputmode-attribute-textarea.html >index ba1f3ed0ab670c84cb3ba6e134a25bea3182757e..ee8b99ccadc1e2553fc74dc5de22b8ce805ad6b1 100644 >--- a/LayoutTests/fast/forms/inputmode-attribute-textarea.html >+++ b/LayoutTests/fast/forms/inputmode-attribute-textarea.html >@@ -18,6 +18,9 @@ shouldBe('textarea.setAttribute("inputmode", "baz"); textarea.inputMode', '""'); > > debug(''); > debug('Valid values:'); >+shouldBe('textarea.inputMode = "none"; textarea.inputMode', '"none"'); >+shouldBe('textarea.getAttribute("inputmode")', '"none"'); >+shouldBe('textarea.setAttribute("inputmode", "none"); textarea.inputMode', '"none"'); > shouldBe('textarea.inputMode = "text"; textarea.inputMode', '"text"'); > shouldBe('textarea.getAttribute("inputmode")', '"text"'); > shouldBe('textarea.setAttribute("inputmode", "text"); textarea.inputMode', '"text"'); >diff --git a/LayoutTests/fast/forms/ios/inputmode-none-expected.txt b/LayoutTests/fast/forms/ios/inputmode-none-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..646bf6bb92ffe30ffa311546dc87d054d968bf1c >--- /dev/null >+++ b/LayoutTests/fast/forms/ios/inputmode-none-expected.txt >@@ -0,0 +1,27 @@ >+This test verifies that the system keyboard is not visible when tapping on an input field with inputmode=none. >+ >+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". >+ >+ >+ >+ACTIVATE input with inputmode=text >+PASS systemKeyboardRect.height > 0 is true >+PASS inputWithSystemKeyboard.value is "Text" >+ >+ACTIVATE input with inputmode=none >+PASS systemKeyboardRect.height === 0 is true >+ >+TEST enter text in input with inputmode=none >+PASS inputWithoutSystemKeyboard.value is "None" >+ >+TEST selection in input with inputmode=none >+PASS selectionRects.length is 1 >+PASS selectionRects[0].left is 159 >+PASS selectionRects[0].top is 261 >+PASS selectionRects[0].width is 28 >+PASS selectionRects[0].height is 15 >+ >+PASS successfullyParsed is true >+ >+TEST COMPLETE >+ >diff --git a/LayoutTests/fast/forms/ios/inputmode-none.html b/LayoutTests/fast/forms/ios/inputmode-none.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f788565b89d12fa7131354f1630efc001ec5c0c3 >--- /dev/null >+++ b/LayoutTests/fast/forms/ios/inputmode-none.html >@@ -0,0 +1,50 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta name="viewport" content="width=device-width, initial-scale=1"> >+<script src="../../../resources/js-test.js"></script> >+<script src="../../../resources/ui-helper.js"></script> >+</head> >+<body onload="runTest()"> >+<input id="input-keyboard" inputmode="text"> >+<input id="input-nokeyboard" inputmode="none"> >+<script> >+jsTestIsAsync = true; >+ >+async function runTest() { >+ inputWithSystemKeyboard = document.getElementById("input-keyboard"); >+ inputWithoutSystemKeyboard = document.getElementById("input-nokeyboard"); >+ >+ description('This test verifies that the system keyboard is not visible when tapping on an input field with inputmode=none.'); >+ >+ debug('\nACTIVATE input with inputmode=text'); >+ await UIHelper.activateFormControl(inputWithSystemKeyboard); >+ systemKeyboardRect = await UIHelper.inputViewBounds(); >+ shouldBe('systemKeyboardRect.height > 0', 'true'); >+ await UIHelper.enterText("Text"); >+ shouldBe('inputWithSystemKeyboard.value', '"Text"'); >+ >+ debug('\nACTIVATE input with inputmode=none'); >+ await UIHelper.activateFormControl(inputWithoutSystemKeyboard); >+ systemKeyboardRect = await UIHelper.inputViewBounds(); >+ shouldBe('systemKeyboardRect.height === 0', 'true'); >+ >+ debug('\nTEST enter text in input with inputmode=none'); >+ await UIHelper.enterText("None"); >+ shouldBe('inputWithoutSystemKeyboard.value', '"None"'); >+ >+ debug('\nTEST selection in input with inputmode=none'); >+ inputWithoutSystemKeyboard.setSelectionRange(0, inputWithSystemKeyboard.value.length); >+ selectionRects = await UIHelper.getUISelectionRects(); >+ shouldBe('selectionRects.length', '1'); >+ shouldBe('selectionRects[0].left', '159'); >+ shouldBe('selectionRects[0].top', '261'); >+ shouldBe('selectionRects[0].width', '28'); >+ shouldBe('selectionRects[0].height', '15'); >+ >+ debug(''); >+ finishJSTest(); >+} >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-misc-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-misc-expected.txt >index b2646b850fe503d43f13a758c0087bb578bcc664..667cfcd0153d86f7d884f50e99a286e8976121ce 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-misc-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-misc-expected.txt >@@ -3633,11 +3633,11 @@ PASS undefinedelement.inputMode: setAttribute() to "\0" > PASS undefinedelement.inputMode: setAttribute() to null > PASS undefinedelement.inputMode: setAttribute() to object "test-toString" > PASS undefinedelement.inputMode: setAttribute() to object "test-valueOf" >-FAIL undefinedelement.inputMode: setAttribute() to "none" assert_equals: IDL get expected "none" but got "" >+PASS undefinedelement.inputMode: setAttribute() to "none" > PASS undefinedelement.inputMode: setAttribute() to "xnone" > PASS undefinedelement.inputMode: setAttribute() to "none\0" > PASS undefinedelement.inputMode: setAttribute() to "one" >-FAIL undefinedelement.inputMode: setAttribute() to "NONE" assert_equals: IDL get expected "none" but got "" >+PASS undefinedelement.inputMode: setAttribute() to "NONE" > PASS undefinedelement.inputMode: setAttribute() to "text" > PASS undefinedelement.inputMode: setAttribute() to "xtext" > PASS undefinedelement.inputMode: setAttribute() to "text\0" >@@ -3688,11 +3688,11 @@ PASS undefinedelement.inputMode: IDL set to "\0" > PASS undefinedelement.inputMode: IDL set to null > PASS undefinedelement.inputMode: IDL set to object "test-toString" > PASS undefinedelement.inputMode: IDL set to object "test-valueOf" >-FAIL undefinedelement.inputMode: IDL set to "none" assert_equals: IDL get expected "none" but got "" >+PASS undefinedelement.inputMode: IDL set to "none" > PASS undefinedelement.inputMode: IDL set to "xnone" > PASS undefinedelement.inputMode: IDL set to "none\0" > PASS undefinedelement.inputMode: IDL set to "one" >-FAIL undefinedelement.inputMode: IDL set to "NONE" assert_equals: IDL get expected "none" but got "" >+PASS undefinedelement.inputMode: IDL set to "NONE" > PASS undefinedelement.inputMode: IDL set to "text" > PASS undefinedelement.inputMode: IDL set to "xtext" > PASS undefinedelement.inputMode: IDL set to "text\0" >diff --git a/LayoutTests/resources/ui-helper.js b/LayoutTests/resources/ui-helper.js >index 90a82119be122be095cb85913e6357d9cac31868..7ed42c429d1f89b517683ce6d563cd530d36227f 100644 >--- a/LayoutTests/resources/ui-helper.js >+++ b/LayoutTests/resources/ui-helper.js >@@ -111,6 +111,25 @@ window.UIHelper = class UIHelper { > }); > } > >+ static activateFormControl(element) >+ { >+ if (!this.isWebKit2() || !this.isIOS()) >+ return this.activateElement(element); >+ >+ const x = element.offsetLeft + element.offsetWidth / 2; >+ const y = element.offsetTop + element.offsetHeight / 2; >+ >+ return new Promise(resolve => { >+ testRunner.runUIScript(` >+ (function() { >+ uiController.didStartFormControlInteractionCallback = function() { >+ uiController.uiScriptComplete("Done"); >+ }; >+ uiController.singleTapAtPoint(${x}, ${y}, function() { }); >+ })()`, resolve); >+ }); >+ } >+ > static waitForKeyboardToHide() > { > return new Promise(resolve => { >@@ -300,4 +319,18 @@ window.UIHelper = class UIHelper { > const uiScript = `uiController.applyAutocorrection(\`${escapedNewText}\`, \`${escapedOldText}\`, () => uiController.uiScriptComplete())`; > return new Promise(resolve => testRunner.runUIScript(uiScript, resolve)); > } >+ >+ static inputViewBounds() >+ { >+ if (!this.isWebKit2() || !this.isIOS()) >+ return Promise.resolve(); >+ >+ return new Promise(resolve => { >+ testRunner.runUIScript(`(() => { >+ uiController.uiScriptComplete(JSON.stringify(uiController.inputViewBounds)); >+ })()`, jsonString => { >+ resolve(JSON.parse(jsonString)); >+ }); >+ }); >+ } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188896
: 348032