We no longer rely on the bogus br node for positioning the caret.
If an editable region has a non-editable block element, we can
probably rely on the block element to reserve the vertical
height, so in those cases we should be able to get away without
a bogus br node.
These tests all involving focusing on an empty element. Touch caret will
not show under the new touch caret UI spec. Therefore, I fix them by
disabling touch caret when running those tests.
Recomputing the placeholder visibility does not require the placeholder div
itself to be present, as the only information required for that is the current
value of the text control which is present either way. This patch fixes
nsTextEditorState::ValueWasChanged and nsTextEditorState::UpdatePlaceholderVisibility
to that effect.
But the real fix is in nsTextEditorState::UpdatePlaceholderText, where after
setting the placeholder text on the anonymous div, we redo the placeholder
visibility computation. Since this function can be called from
HTMLTextAreaElement::CreatePlaceholderNode during frame construction, the
GetValue function may return the wrong value since the editor has not properly
been set up yet, resulting in this bug. And this function call is useless
anyway, because changing the placeholder text does not really affect the
result of the visibility computation, so there is no need to do this work
in the first place.
Recomputing the placeholder visibility does not require the placeholder div
itself to be present, as the only information required for that is the current
value of the text control which is present either way. This patch fixes
nsTextEditorState::ValueWasChanged and nsTextEditorState::UpdatePlaceholderVisibility
to that effect.
But the real fix is in nsTextEditorState::UpdatePlaceholderText, where after
setting the placeholder text on the anonymous div, we redo the placeholder
visibility computation. Since this function can be called from
HTMLTextAreaElement::CreatePlaceholderNode during frame construction, the
GetValue function may return the wrong value since the editor has not properly
been set up yet, resulting in this bug. And this function call is useless
anyway, because changing the placeholder text does not really affect the
result of the visibility computation, so there is no need to do this work
in the first place.
1. Start headless X server. Start basic window manager on it.
2. Run reftests with said X server. Take note of failing tests.
3. Disable all reftests that need focus:
find $topsrcdir -name '*.list' | xargs sed -i -e '/needs-focus/s/^/#/'
4. Make reftest.js:Focus never focus the window and always return true.
5. Start reftests with said X server again. Once the tests begin
running, start a xterm on the same X server. The window manager will
focus this xterm and will not return focus to the browser.
6. Compare now-failing tests with baseline. Mark all such tests as
needs-focus.
Comments on specific tests:
editor/reftests/
- spellcheck-input-ref.html and spellcheck-textarea-ref.html focus
input elements and don't work right without the window having focus.
- spellcheck-hyphen-invalid-ref.html and
spellcheck-hyphen-multiple-invalid-ref.html use @autofocus on
textarea.
- 674212-spellcheck.html, 338427-2.html, and
462758-grabbers-resizers.html all wait for onfocus for div elements.
layout/reftests/bugs/
- 652301-1b.html focuses a bogus element with an onfocus handler.
layout/reftests/selection/
- pseudo-element-of-native-anonymous-ref.html .select()s an <input>.
This patch ensures that the NODE_IS_EDITABLE flag is only set on nodes living
under an editing host. Things like text controls which used to have that flag
previously will not have it any more. The flag would be set on their anonymous
div node instead. Note that if text controls actually fall under an editing
host, they will get the NODE_IS_EDITABLE flag.
This patch also makes nsHTMLEditor::IsEditable return sane results (text nodes
are always considered to be editable).