Commit Graph

155 Commits

Author SHA1 Message Date
Sebastian Hengst
a8245ca35f merge mozilla-inbound to mozilla-central. r=merge a=merge
MozReview-Commit-ID: JhesEg4Bxjy
2017-08-04 19:28:27 +02:00
Ehsan Akhgari
9764add635 Bug 1386472 - Only register the AccessibleCaretEventHub when the accessible caret is enabled; r=bzbarsky 2017-08-03 23:06:15 -04:00
Ehsan Akhgari
bb799357a7 Bug 1386411 - Part 7: Inline EditorBase::GetSelection(); r=masayuki 2017-08-03 17:06:31 -04:00
Ehsan Akhgari
d09b186e51 Bug 1386411 - Part 6: Add a more efficient nsISelectionController::GetSelection() API for retrieving native Selection objects; r=bzbarsky
This API avoids needless refcounting and QueryInterface overhead.
2017-08-03 17:05:24 -04:00
Wes Kocher
7d71a3bf41 Backed out changeset 05400533498b (bug 1386471) for failures in browser_contentSearchUI.js a=backou
MozReview-Commit-ID: ElP9bo2hu8X
2017-08-02 18:09:22 -07:00
Ehsan Akhgari
762ffab0d4 Bug 1386471 - Don't remove all ranges before calling SetText(); r=masayuki 2017-08-02 19:58:06 -04:00
Xidorn Quan
41ee61becc Bug 1386905 - Move away mRuleNode in nsTextEditorState::UnbindFromFrame before storing the value into text buffer. r=Ehsan
Otherwise SetValue may think it's still safe to notify, while it isn't.

MozReview-Commit-ID: 6a3or1WXWAq
2017-08-04 14:18:41 +10:00
Ehsan Akhgari
0503c1edbd Bug 1386222 - Ensure that we always respect the undo/redo transaction history when modifying the <xul:textbox>.value dynamically through script; r=bzbarsky 2017-08-01 13:59:45 -04:00
Sylvestre Ledru
9d4a84d778 Bug 1378712 - Remove all trailing whitespaces r=Ehsan
MozReview-Commit-ID: Kdz2xtTF9EG
2017-07-06 14:00:35 +02:00
Bill McCloskey
ce42826bdf Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-26 14:19:58 -07:00
Ehsan Akhgari
57d664b78b Bug 1376317 - Move the pref var cache for dom.placeholder.show_on_focus to nsContentUtils; r=smaug 2017-06-26 16:17:49 -04:00
Masayuki Nakano
76399a9141 Bug 1374207 - part5: nsTextControlFrame should use TextEditor instead of nsIEditor r=smaug
MozReview-Commit-ID: Eh6Cp546bXT
2017-06-19 23:47:02 +09:00
Masayuki Nakano
e0a2ff6005 Bug 1374207 - part1: nsTextEditorState should use mozilla::TextEditor instead of editor interfaces r=smaug
Using concrete class rather than interface classes (nsI*Editor) will allow to reduce QI and some virtual calls.  Therefore, Editor classes should be used as concrete class as far as possible.

Unfortunately, if classes referring editor are initialized via scriptable interface, we cannot do this because nsI*Editor is still not marked as builtinclass.  Therefore, their editor may be implemented by JS.  E.g., inline nsIInlineSpellChecker.init() and nsIDocShell.editor.  Such remaining cases should be fixed after nsI*Editor classes are marked as builtinclass.

Note that this patch also creates nsIdentifierMapEntry.h which is separated from nsDocument.h because ShadowRoot.h needs the class but exposing nsDocument.h to the global and includes it causes bustage on Linux and Android.  Therefore, for fixing the include hell, this patch touches them and ContentChild.cpp.

MozReview-Commit-ID: i6fLWw6Qeo
2017-06-20 22:57:08 +09:00
Makoto Kato
52e77ceefe Bug 1360162 - Don't call UpdateOverlayTextVisibility twice by input.value setter when input element has focus. r=masayuki
When editor has focus, input.value setter will call UpdateOverlayTextVisibility via nsTextInputListener::EditAction -> nsTextControlFrame::SetValueChanged at first.  But SetValue will call UpdateOverlayTextVisibility again via ValueWasChanged.

So it is unnecessary to call UpdateOverlayTextVisibility on nsTextEditorState::SetValue when we have the editor.

MozReview-Commit-ID: Hw3Bh64Euo6
2017-06-21 13:10:58 +09:00
Olli Pettay
bd11bbdaa7 Bug 1374117 - nsTextEditorState::UpdateOverlayTextVisibility should use BoolVarCache, r=ehsan 2017-06-19 22:32:21 +03:00
Makoto Kato
6850a4f808 Bug 1368888 - Don't get previous value twice in input.value setter. r=smaug
We get previous input.value twice in HTMLInputElement::SetValue and nsTextEditorState::SetValue when setting input.value.  Since nsTextEditorState::GetValue uses DocumentEncoder, it is expensive.  So we should use old value as parameter of nsTextEditorState::SetValue if possible.

MozReview-Commit-ID: A1UPfETTVCn
2017-06-14 18:21:01 +09:00
Carsten "Tomcat" Book
5a72f13ad3 merge mozilla-inbound to mozilla-central a=merge 2017-06-09 12:58:49 +02:00
Makoto Kato
8684826882 Bug 1370806 - Part 2. Remove selection before calling nsIPlaintextEditor.setText. r=masayuki
nsIPlaintestEditor.setText still use BeginPlaceHolderTransaction and EndPlaceHolderTransaction.  But since input.value setter doesn't create undo transaction, it is unnecessary to save/restore selection via AutoPlaceHolderBatch.  So before calling setText, we should reset selection to reduce saving and restoring selection.

Save/Restore selection is ~7% of input.value setter.

MozReview-Commit-ID: 6yBKCtRmkQt
2017-06-07 15:31:06 +09:00
Makoto Kato
244e32cf52 Bug 1370806 - Part 1. Use RAII class for StartBatchChanges and EndBatchChanges. r=masayuki
Although we use StartBatchChanges and EndBatchChanges in nsTextEditorState::SetValue, we have a path that EndBatchChanges isn't called.  So we should use RAII class to call EndBatchChanges correctly.

MozReview-Commit-ID: 6bjtTT9wItA
2017-06-07 14:11:31 +09:00
Ray Lin
2ac740e5f5 Bug 1300996 - Part 2: Show preview text on and highlight the fields that would be filled. r=MattN, lchang
MozReview-Commit-ID: DMgVhz2lvZ1
2017-04-24 10:55:29 +08:00
Makoto Kato
5e35986067 Bug 1358025 - Part 4. Disable undo when input.value setter isn't user interaction. r=masayuki
See bug 1346723.  I would like to turn off undo when not user interaction.  Except to Gecko, other browsers don't create undo history by input.value setter.

MozReview-Commit-ID: 9P1eOKTXCXN
2017-05-18 16:32:29 +09:00
Makoto Kato
625afa50be Bug 1358025 - Part 3. Use nsIEditor.setText when input.value setter isn't user interaction. r=masayuki
When not using eSetValue_BySetUserInput, we should use SetText transaction instead for fast path.  For backward compatibility, when input.value setter is by user interaction, I keep original way.  Because the original way doesn't replace all text when some string matches.

MozReview-Commit-ID: IDm7Y1NBmaK
2017-05-18 16:32:21 +09:00
Masayuki Nakano
d4365ad2e8 Bug 1339543 part 1 Wrap nsIWidget::ExecuteNativeKeyBinding() with a WidgetKeyboardEvent method and users of the method should use it r=smaug
Currently, edit commands for native key bindings are stored in widget.  This is
stateful and really complicated in content process because it needs to cache
them.

We can make this simpler if we make WidgetKeyboardEvent store edit commands for
the key combination.  Then, child process can handle it even if it's delayed
event or it's a nested event.

This patch adds arrays to WidgetKeyboardEvent to store edit commands which are
initialized with nsIWidget::ExecuteNativeKeyBinding() and adds
WidgetKeyboardEvent::ExecuteEditCommands() to execute stored edit commands as
same as nsIWidget::ExecutenativeKeyBinding().

MozReview-Commit-ID: BGRvBrLz5lp
2017-05-19 16:50:30 +09:00
Makoto Kato
9661b86ced Bug 1364814 - Use RAII class to set and restore editor flags. r=masayuki
input.value setter removes editor flags and max-length to set value.  To clean up code, I would like to use RAII class to set and restore it.

Actually, when the frame is being destroyed by InsertText, it isn't restored.  But it might be safe since the flags is set again on nsTextEditorState::PrepareEditor by focus.


MozReview-Commit-ID: J0OYYluWD8z
2017-05-15 13:22:25 +09:00
Makoto Kato
e0cb2928c4 Bug 1360154 - Part 2. Add fast path to check whether valus is emtpy. r=masayuki
Actually, we use GetValue to check whether value is empty or not for placeholder.  But since GetValue uses TextEditor::OutputToString when on editor, it is expensive.  Since editor has DocumentIsEmpty method, we should use it for this case.

MozReview-Commit-ID: rQX8yjnWQz
2017-05-11 14:04:18 +09:00
Makoto Kato
f6ea1f4907 Bug 1352799 - Always set maxlength on initializing editor. r=masayuki
maxlength will be set by nsTextControlFrame::AttributeChanged via RestyleManager. If element is display:none, RestyleManager won't call Frame's AttributeChanged. So we should always initialize maxlength when setting focus.

Also, wrap attribute for textarea element will be updated by HTMLTextAreaElement even if display:none.  So this issue doesn't occur.  maxlength might have to be updated by HTMLInputElement.  But it is unnecessary to update editor's maxlength on display:none since this is used on focused editor.

MozReview-Commit-ID: JHODOBTv62v
2017-04-20 10:23:01 +09:00
Boris Zbarsky
9da18307f6 Bug 1357206 part 5. When moving the cursor to the end of text on value set, reset the selection direction as well, per spec. r=ehsan 2017-05-01 13:33:09 -04:00
Boris Zbarsky
a25d09a1da Bug 1357206 part 4. Don't move the cursor even if eSetValue_MoveCursorToEndIfValueChanged is set, if the value did not change. r=ehsan 2017-05-01 13:28:54 -04:00
Boris Zbarsky
19916a9aeb Bug 1357206 part 3. Rename eSetValue_MoveCursorToEnd to eSetValue_MoveCursorToEndIfValueChanged, because those are the semantics we want for it. r=ehsan
No actual behavior change here.
2017-05-01 13:26:21 -04:00
Boris Zbarsky
1166c9ddf3 Bug 1357206 part 2. Common up the PlatformToDOMLineBreaks calls for the have-editor and do-not-have-editor cases in nsTextEditorState::SetValue. r=ehsan
At this point both calls happen unconditionally.  This also removes a search for
\r which the callee will perform anyway.
2017-05-01 13:26:18 -04:00
Boris Zbarsky
0231e24dbf Bug 1357206 part 1. Move conversion of the new textarea/input value to DOM linebreaks to before we check whether the new value matches the old value. r=ehsan
Otherwise we end up calling into editor code and doing a bunch of work even though the value hasn't actually changed, when a value with \r in it is set repeatedly.
2017-05-01 13:26:11 -04:00
Ray Lin
cdc9d749a6 Bug 1340483 - Part 4. Update input visibility accordingly. r=heycam
MozReview-Commit-ID: 7eBhj7w4qhP
2017-03-30 17:38:59 +08:00
Ray Lin
f4d11417f9 Bug 1340483 - Part 2. Expose chrome-only previewValue attribute. r=baku,heycam
MozReview-Commit-ID: BCu0vXVm6wj
2017-03-21 00:08:01 +08:00
Ray Lin
78ff382026 Bug 1340483 - Part 1. Create empty anonymous node for autofill preview. r=heycam
MozReview-Commit-ID: GTVgIPoogp9
2017-03-20 11:53:40 +08:00
Olli Pettay
c6c840deae Bug 1352687, try to recycle HTMLInputElement's nsTextEditorState, r=baku 2017-04-03 20:40:48 +03:00
Olli Pettay
45822311b7 Bug 1351860 - Move mType from HTMLInputElement to nsIFormControl and make GetType non-virtual inlined, r=jessica 2017-03-31 22:49:00 -04:00
Olli Pettay
694b05ce02 Backout Bug 1351860, r=backout 2017-03-31 16:55:32 -04:00
Olli Pettay
fa83f6684e Bug 1351860 - Move mType from HTMLInputElement to nsIFormControl and make GetType non-virtual inlined, r=jessica 2017-03-31 13:13:36 -04:00
Olli Pettay
609013b1d1 Bug 1346654, follow the COM rules in nsTextInputSelectionImpl, r=ehsan 2017-03-22 12:19:20 +02:00
Boris Zbarsky
08408b8e31 Bug 1345237. Propagate uint32_t deeper into the editor state and text control frame code. r=mystor
MozReview-Commit-ID: KeUo8My6eBJ
2017-03-09 14:44:45 -05:00
Boris Zbarsky
4fdb4e94ec Bug 1343275 part 1. Get selection faster in some nsTextEditorState methods. r=ehsan
MozReview-Commit-ID: 2v0r3jtua1O
2017-03-09 14:44:10 -05:00
Boris Zbarsky
4d9c1783a8 Bug 1343037 part 18. Implement nsTextEditorState::SetRangeText. r=ehsan
MozReview-Commit-ID: FEo9yv5iu6U
2017-03-09 14:44:06 -05:00
Boris Zbarsky
34042de72d Bug 1343037 part 16. Implement a version of nsTextEditorState::SetSelectionRange that takes a string for the direction. r=ehsan
MozReview-Commit-ID: E8zYAWolg94
2017-03-09 14:44:06 -05:00
Boris Zbarsky
2d2e85a356 Bug 1343037 part 15. Implement nsTextEditorState::GetSelectionDirection. r=ehsan
MozReview-Commit-ID: 1bLLYhjmlff
2017-03-09 14:44:06 -05:00
Boris Zbarsky
8c2206f672 Bug 1343037 part 14. Implement nsTextEditorState::SetSelectionDirection. r=ehsan
This introduces two behavior changes:

1)  In cached mode, we used to treat unknown selection directions as "none".
    Now we treat it like "forward", consistently with the "have an editor" mode.
2)  Before this change, in cached mode, we did not fire "select" events on
    selectionDirection changes.

MozReview-Commit-ID: 4nBCAm3mAiz
2017-03-09 14:44:06 -05:00
Boris Zbarsky
5751a40e69 Bug 1343037 part 13. Implement nsTextEditorState::SetSelectionEnd. r=ehsan
This introduces three behavior changes:

1)  Before this change, in cached mode, we did not enforce the "start <= end"
    invariant.
2)  Before this change, in cached mode, we did not fire "select" events on
    selectionEnd changes.
3)  Changes the IDL type of HTMLInputElement's selectionEnd attribute to
    "unsigned long" to match the spec and HTMLTextareaElement.

MozReview-Commit-ID: J3Gkhr8VnbS
2017-03-09 14:44:05 -05:00
Boris Zbarsky
f1bf8c9867 Bug 1343037 part 12. Implement nsTextEditorState::SetSelectionStart. r=ehsan
This introduces three behavior changes:

1)  Before this change, in cached mode, we did not enforce the "start <= end"
    invariant.
2)  Before this change, in cached mode, we did not fire "select" events on
    selectionStart changes.
3)  Changes the IDL type of HTMLInputElement's selectionStart attribute to
    "unsigned long" to match the spec and HTMLTextareaElement.

MozReview-Commit-ID: JM9XXMMPUHM
2017-03-09 14:44:05 -05:00
Boris Zbarsky
229548759d Bug 1343037 part 11. Implement a SetSelectionRange function on nsTextEditorState. r=ehsan
MozReview-Commit-ID: 5xUkcnkptwQ
2017-03-09 14:44:05 -05:00
Boris Zbarsky
b5f0f960fd Bug 1343037 part 9. Simplify the setup around the editor state's GetSelectionDirection function. r=ehsan
Really, there are only two cases we need to worry about.  Either
IsSelectionCached(), and then our SelectionProperties has the data we want, or
not and then we have a non-null mSelCon which has the data we want.

MozReview-Commit-ID: AEW9D1zG6sM
2017-03-09 14:44:05 -05:00
Boris Zbarsky
0ff1feefd2 Bug 1343037 part 6. Simplify the setup around the editor state's GetSelectionRange function. r=ehsan
Really, there are only two cases we need to worry about.  Either
IsSelectionCached(), and then our SelectionProperties has the data we want, or
not and then we have a non-null mSelCon which has the data we want.

Since we are now using cached selection state a lot more (instead of
initializing the editor whenever someone asks for selection state), we need to
actually update it more correctly when .value is set.

And since we now update the cached selection state for the case when .value has
been set (to point to the end of the text), we need to change
HTMLInputElement::HasCachedSelection to return false for that case.  Otherwise
we will always do eager editor init on value set.  We handle that by not doing
eager init if the cached selection is collapsed.

The web platform test changes test the "update on .value set" behavior.  They
fail without this patch, pass with it.

MozReview-Commit-ID: DDU8U4MGb23
2017-03-09 14:44:04 -05:00