[iOS] Unable to make a selection in jsfiddle.net using arrow keys when requesting...
authorwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2019 23:30:37 +0000 (23:30 +0000)
committerwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2019 23:30:37 +0000 (23:30 +0000)
commit920b04f1416a660ec0023e50b8cf4486d4d7d6c1
treeeda0f2925d8b55e1e42ca222c5183973d839fafb
parenta23f64217cf23176735202636dbb9e1019d660ca
[iOS] Unable to make a selection in jsfiddle.net using arrow keys when requesting desktop site
https://bugs.webkit.org/show_bug.cgi?id=193758
<rdar://problem/43614978>

Reviewed by Tim Horton.

Source/WebCore:

CodeMirror's script adds a repeating timer that periodically normalizes the logical selection in the editor
(this is distinct from the actual DOM selection, which is inside a hidden textarea element). This script defines
a helper method to select all the text inside of a text form control, called `selectInput`, which normally
invokes `node.select()`. However, in the case of iOS, the script works around broken `select()` behavior by
setting `selectionStart` and `selectionEnd` to encompass all the content in the form control. When requesting
the desktop version of the site, CodeMirror no longer attempts to apply its iOS workaround.

This iOS-specific behavior was introduced to fix <rdar://problem/4901923>. However, the original bug no longer
reproduces even without this quirk. To fix CodeMirror, we make two adjustments:

1.  Roll out this ancient demo hack, in favor of standardized behavior.
2.  Note that `select()` is also used when focusing an input. However, when focusing an input element on iOS, we
    want to match the platform (i.e. UITextField behavior) and move focus to the end of the text field. To
    achieve this, we introduce a new helper on HTMLInputElement that is called when setting the default
    selection of a text input after focus; on iOS, this helper method moves the selection to the end of the
    input, but everywhere else, it selects all the text in the input element.

This causes 6 existing layout tests to begin passing on iOS.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::updateFocusAppearance):
(WebCore::HTMLInputElement::setDefaultSelectionAfterFocus):
* html/HTMLInputElement.h:
* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::select):

LayoutTests:

Mark some existing layout tests as passing on iOS. Additionally, remove failing expectations for another
existing layout test on iOS.

* platform/ios/TestExpectations:
* platform/ios/editing/text-iterator/hidden-textarea-selection-quirk-expected.txt: Removed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240452 268f45cc-cd09-0410-ab3c-d52691b4dbfc
LayoutTests/ChangeLog
LayoutTests/platform/ios/TestExpectations
LayoutTests/platform/ios/editing/text-iterator/hidden-textarea-selection-quirk-expected.txt [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLInputElement.h
Source/WebCore/html/HTMLTextFormControlElement.cpp