Bug 1779269 - Fix AccessibleCaret's display on disabled form controls. r=emilio,webdriver-reviewers,whimboo

A disabled form controls cannot be focused, and its frame selection is different
from the one for not-editable content. Use GetLastFocusedFrameSelection() (added
in Bug 253870) to get the correct frame selection that is visible to the user.

Add some basic tests for disabled <textarea> such as long pressing to select,
dragging, etc. They should behave the same as normal <textarea>.

Differential Revision: https://phabricator.services.mozilla.com/D151800
This commit is contained in:
Ting-Yu Lin 2022-07-14 17:29:34 +00:00
Родитель dd5a5ef58d
Коммит b331e396e5
3 изменённых файлов: 8 добавлений и 15 удалений

Просмотреть файл

@ -820,23 +820,9 @@ already_AddRefed<nsFrameSelection> AccessibleCaretManager::GetFrameSelection()
return nullptr;
}
nsFocusManager* fm = nsFocusManager::GetFocusManager();
MOZ_ASSERT(fm);
nsIContent* focusedContent = fm->GetFocusedElement();
if (!focusedContent) {
// For non-editable content
return mPresShell->FrameSelection();
}
nsIFrame* focusFrame = focusedContent->GetPrimaryFrame();
if (!focusFrame) {
return nullptr;
}
// Prevent us from touching the nsFrameSelection associated with other
// PresShell.
RefPtr<nsFrameSelection> fs = focusFrame->GetFrameSelection();
RefPtr<nsFrameSelection> fs = mPresShell->GetLastFocusedFrameSelection();
if (!fs || fs->GetPresShell() != mPresShell) {
return nullptr;
}

Просмотреть файл

@ -31,6 +31,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
_input_size_id = "input-size"
_textarea_id = "textarea"
_textarea2_id = "textarea2"
_textarea_disabled_id = "textarea-disabled"
_textarea_one_line_id = "textarea-one-line"
_textarea_rtl_id = "textarea-rtl"
_contenteditable_id = "contenteditable"
@ -170,6 +171,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
@parameterized(_input_id, el_id=_input_id)
@parameterized(_textarea_id, el_id=_textarea_id)
@parameterized(_textarea_disabled_id, el_id=_textarea_disabled_id)
@parameterized(_textarea_rtl_id, el_id=_textarea_rtl_id)
@parameterized(_contenteditable_id, el_id=_contenteditable_id)
@parameterized(_content_id, el_id=_content_id)
@ -193,6 +195,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
@parameterized(_input_id, el_id=_input_id)
@parameterized(_textarea_id, el_id=_textarea_id)
@parameterized(_textarea_disabled_id, el_id=_textarea_disabled_id)
@parameterized(_textarea_rtl_id, el_id=_textarea_rtl_id)
@parameterized(_contenteditable_id, el_id=_contenteditable_id)
@parameterized(_content_id, el_id=_content_id)
@ -226,6 +229,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
@parameterized(_input_id, el_id=_input_id)
@parameterized(_textarea_id, el_id=_textarea_id)
@parameterized(_textarea_disabled_id, el_id=_textarea_disabled_id)
@parameterized(_textarea_rtl_id, el_id=_textarea_rtl_id)
@parameterized(_contenteditable_id, el_id=_contenteditable_id)
@parameterized(_content_id, el_id=_content_id)
@ -263,6 +267,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
@parameterized(_input_id, el_id=_input_id)
@parameterized(_textarea_id, el_id=_textarea_id)
@parameterized(_textarea_disabled_id, el_id=_textarea_disabled_id)
@parameterized(_textarea_rtl_id, el_id=_textarea_rtl_id)
@parameterized(_contenteditable_id, el_id=_contenteditable_id)
@parameterized(_content_id, el_id=_content_id)
@ -395,6 +400,7 @@ class AccessibleCaretSelectionModeTestCase(MarionetteTestCase):
@parameterized(_input_id, el_id=_input_id)
@parameterized(_textarea_id, el_id=_textarea_id)
@parameterized(_textarea_disabled_id, el_id=_textarea_disabled_id)
@parameterized(_textarea_rtl_id, el_id=_textarea_rtl_id)
@parameterized(_contenteditable_id, el_id=_contenteditable_id)
@parameterized(_content_id, el_id=_content_id)

Просмотреть файл

@ -28,6 +28,7 @@
<br>
<div>
<textarea id="textarea" rows="4" cols="8">ABC DEF GHI JKL MNO PQR</textarea>
<textarea id="textarea-disabled" rows="4" cols="8" disabled>ABC DEF GHI JKL MNO PQR</textarea>
<textarea id="textarea-one-line" rows="4" cols="12">ABC DEF GHI</textarea>
</div>
<br>