Commit Graph
299 Commits
Author SHA1 Message Date
Masayuki Nakano 541b5d984e Bug 1656430 - part 1: Rename AutoRangeArray to AutoSelectionRangeArray r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D85684
2020-08-05 01:37:26 +00:00
Simon Giesecke a69d79b6db Bug 1648010 - Replace uses of NS_LITERAL_STRING/NS_LITERAL_CSTRING macros by _ns literals. r=geckoview-reviewers,jgilbert,agi,hsivonen,froydnj
Differential Revision: https://phabricator.services.mozilla.com/D80860
2020-07-01 08:29:29 +00:00
Masayuki Nakano d3d86fd84e Bug 1642594 - part 4: Stop using "whitespace" in under libeditor r=m_kato
I realized that there is no word "whitespace" in formal English.  This patch
replaces it with "white-space" in comments, and change method names to use
"WhiteSpace".

Depends on D78654

Differential Revision: https://phabricator.services.mozilla.com/D78655
2020-06-10 13:44:10 +00:00
Emilio Cobos Álvarez 03cfd95496 Bug 1641245 - Make string comparators not virtual. r=froydnj,necko-reviewers,geckoview-reviewers,jgilbert,agi,valentin
There's no use case for stateful comparators, so they can be just plain
function pointers.

This is used in some hot places like CSS selector matching.

Differential Revision: https://phabricator.services.mozilla.com/D77084
2020-05-27 18:11:12 +00:00
Olli Pettay f41ed32728 Bug 1637712 - Consider to move *Ancestor* API to nsINode r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D75169
2020-05-20 14:55:15 +00:00
Masayuki Nakano 68db6f1413 Bug 1622231 - Make HTMLEditor::SetInlinePropertyAsAction() override property if it's called for XUL cmd_fontFace with a magic value "tt" r=m_kato
`FontFaceStateCommand::SetState()` called
`HTMLEditor::SetInlinePropertyAsAction()` with `nsGkAtoms::tt` when given value
is "tt".
https://searchfox.org/mozilla-central/rev/bc5737c51b8da4e758cf4db0ddb606f0aea81a7d/editor/libeditor/HTMLEditorCommands.cpp#626-627

However, I accidentally not ported this to
`HTMLEditor::SetInlinePropertyAsAction()`.  Therefore, this patch restores the
old code for the magic value.

Differential Revision: https://phabricator.services.mozilla.com/D74379
2020-05-11 07:30:47 +00:00
Masayuki Nakano 6ebd11fd06 Bug 1627175 - part 15: Create HTMLEditUtils::GetFirstLeafChild() instead of EditorBase::GetLeftmostChild() r=m_kato
This is used by `TextEditor::UndoAsAction()` too, so, it might be better to be
in `EditorUtils`.  However, it is completely designed for `HTMLEditor` and
ideally, `UndoAsAction` should be overridden by `HTMLEditor` too and
`TextEditor` should use faster path because of its content is in anonymous
subtree. But we don't have any merit to do that instead of avoiding virtual
call.

Differential Revision: https://phabricator.services.mozilla.com/D74362
2020-05-08 09:49:19 +00:00
Mirko Brodesser aace44041e Bug 1634663: part 2) Declare callers of GetRangeAt around EditorBase const. r=masayuki
Depends on D73444

Differential Revision: https://phabricator.services.mozilla.com/D73445
2020-05-02 23:44:46 +00:00
Masayuki Nakano 7e17963197 Bug 1540037 - part 14: Move EditorBase::MoveNodeWithTransaction() and EditorBase::MoveNodeToEndWithTransaction() r=m_kato
They are used only by `HTMLEditor` so that we can move them.

Differential Revision: https://phabricator.services.mozilla.com/D72846
2020-04-30 17:46:37 +00:00
Masayuki Nakano 945ccb7f65 Bug 1540037 - part 8: Move EditorBase::SplitNodeWithTransaction() to HTMLEditor r=m_kato
Now, it's used only by `HTMLEditor` so that we can move it.

Differential Revision: https://phabricator.services.mozilla.com/D72832
2020-04-30 11:27:33 +00:00
Masayuki Nakano 838457651a Bug 1540037 - part 5: Move EditorBase::JoinNodesWithTransaction() to HTMLEditor r=m_kato
It's used only by `HTMLEditor` so that we can move it into `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D72829
2020-04-30 09:31:11 +00:00
Masayuki Nakano 29d36216a0 Bug 1540037 - part 4: Move EditorBase::SplitNodeDeepWithTransaction() to HTMLEditor r=m_kato
It's only used by `HTMLEditor` so that we can move it.

Differential Revision: https://phabricator.services.mozilla.com/D72826
2020-04-30 07:29:27 +00:00
Masayuki Nakano 7bc093e9c9 Bug 1540037 - part 3: Move EditorBase::InsertContainerWithTransaction() and related methods to HTMLEditor r=m_kato
They are not used by `TextEditor` so that we should move them into `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D72825
2020-04-30 06:36:53 +00:00
Masayuki Nakano 3b731fb33e Bug 1540037 - part 2: Move EditorBase::RemoveContainerWithTransaction() to HTMLEditor r=m_kato
Its users are only `HTMLEditor` and `CSSEditUtils` so that we should move it
into `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D72823
2020-04-30 06:36:41 +00:00
Masayuki Nakano beed95bd08 Bug 1627175 - part 8: Move EditorBase::IsContainer() to HTMLEditUtils r=m_kato
It's a virtual method which always returns true if `TextEditor`.  Therefore,
we can move it into `HTMLEditUtils` and we can make the only caller of
`EditorBase` check `IsTextEditor()` instead.

Depends on D70880

Differential Revision: https://phabricator.services.mozilla.com/D70882
2020-04-16 10:32:26 +00:00
Masayuki Nakano 54c8d6c320 Bug 1627175 - part 6: Move "can contain" utility methods to HTMLEditUtils r=m_kato
Actually, they are used only by `HTMLEditor` because `TextEditor` finally
returns `true` for any cases in `TextEditor`, but the users are overridden by
`HTMLEditor` and never used by `HTMLEditor`.  Therefore, we cam move them
into `HTMLEditUtils`.

Depends on D70878

Differential Revision: https://phabricator.services.mozilla.com/D70879
2020-04-16 04:38:40 +00:00
Masayuki Nakano de570163e1 Bug 1627175 - part 4: Get rid of EditorBase::IsText() r=m_kato
A lot of editor code refers `nsINode::IsText()` directly so that we don't
need to keep the too simple editor API anymore.

Depends on D70876

Differential Revision: https://phabricator.services.mozilla.com/D70877
2020-04-15 16:05:30 +00:00
Masayuki Nakano f2d40b4016 Bug 1627175 - part 3: Move EditorBase::AreNodesSameType() to HTMLEditUtils r=m_kato
It's only non-`HTMLEditor` user is `EditorBase::JoinNodesDeepWithTransaction()`,
but it's called only by `HTMLEditor`.  Therefore, we can move it into
`HTMLEditUtils` and move `EditorBase::JoinNodesDeepWithTransaction()` to
`HTMLEditor`.

Depends on D70875

Differential Revision: https://phabricator.services.mozilla.com/D70876
2020-04-15 15:55:20 +00:00
Masayuki Nakano d069d21d40 Bug 1627175 - part 2: Move EditorBase::IsModifiableNode(), EditorBase::IsEditable(), EditorBase::IsTextElementOrText() and EditorBase::IsPaddingBRElementForEmptyEditor() to EditorUtils r=m_kato
Due to the include hell, `EditorBase.h` cannot include `EditorUtils.h`.
Therefore we need these 3 methods once.  Additionally, `IsModifiableNode()`
is really odd method and looks like that it's used for the following 2 purposes:
1. Simply can be editable.
2. Can be removed from parent.

For the former case, we should sort out it with
`EditorUtils::IsEditableContent()`, but for now, this patch moves it to
`HTMLEditUtils::IsSimplyEditable()`.  On the other hand, for the latter case,
we obviously has a bug.  Therefore, this patch creates
`HTMLEditUtils::IsRemovableFromParentNode()` and make it check whether the
removing node is also editable.

Unfortunately, `EditorUtils::IsEditableContent()` needs to take editor type.
But it's most callers are in `HTMLEditor` and most of remains are in
common methods of `EditorBase`.  I guess we could remove this ugly argument
in the future.

Depends on D70874

Differential Revision: https://phabricator.services.mozilla.com/D70875
2020-04-15 15:27:38 +00:00
Masayuki Nakano 336ad26cc3 Bug 1627175 - part 1: Move HTMLEditor::IsBlockNode() into HTMLEditUtils r=m_kato
`HTMLEditor::IsBlockNode()` is a virtual method derived from
`EditorBase::IsBlockNode()`.  For the performance, `EditorBase`'s one just
return false for text node and `<br>` element.  However, these check cost
is really cheap in these days.  Therefore, we can make `TextEditor` also
use rich API.

This patch moves `HTMLEditor::NodeIsBlockStatic()` and
`HTMLEditor::NodeIsInlineStatic()` to `HTMLEditUtils`, and removes the wrapper
of the fommer, `HTMLEditor::IsBlockNode()` and `WSRunScanner::IsBlockNode()`.

Differential Revision: https://phabricator.services.mozilla.com/D70874
2020-04-15 13:55:36 +00:00
Masayuki Nakano 5e8bdc7dd4 Bug 1627573 - part 4: Mark CSSEditUtils methods which refer computed style as MOZ_CAN_RUN_SCRIPT r=m_kato
When it refers computed value of style, it may flush pending notifications.
Therefore, they should be marked as `MOZ_CAN_RUN_SCRIPT`.

Differential Revision: https://phabricator.services.mozilla.com/D70151
2020-04-09 10:10:34 +00:00
Masayuki Nakano 69be515285 Bug 1627573 - part 2: Split public methods of CSSEditUtils which work with both specified values and computed values r=m_kato
Some methods take `StyleType` to work them with specified values or computed
values.  This method hides `StyleType` into `CSSEditUtils` and splits the
public methods which took `StyleType` to 2 methods, one is for working with
specified values, the other is for working with computed values.

Additionally, this patch fixes some argument name and type.

Differential Revision: https://phabricator.services.mozilla.com/D70149
2020-04-09 10:08:37 +00:00
Bogdan Tara 1b8a8529ba Backed out 4 changesets (bug 1627573) for bustages complaining about CSSEditUtils.cpp CLOSED TREE
Backed out changeset 8ced0e6ed31e (bug 1627573)
Backed out changeset 07b5b67c32c2 (bug 1627573)
Backed out changeset 04734d17e8d0 (bug 1627573)
Backed out changeset 77486fd073af (bug 1627573)
2020-04-09 10:58:46 +03:00
Masayuki Nakano 499df9225e Bug 1627573 - part 4: Mark CSSEditUtils methods which refer computed style as MOZ_CAN_RUN_SCRIPT r=m_kato
When it refers computed value of style, it may flush pending notifications.
Therefore, they should be marked as `MOZ_CAN_RUN_SCRIPT`.

Differential Revision: https://phabricator.services.mozilla.com/D70151
2020-04-08 15:51:17 +00:00
Masayuki Nakano 92d589025a Bug 1627573 - part 2: Split public methods of CSSEditUtils which work with both specified values and computed values r=m_kato
Some methods take `StyleType` to work them with specified values or computed
values.  This method hides `StyleType` into `CSSEditUtils` and splits the
public methods which took `StyleType` to 2 methods, one is for working with
specified values, the other is for working with computed values.

Additionally, this patch fixes some argument name and type.

Differential Revision: https://phabricator.services.mozilla.com/D70149
2020-04-08 13:32:28 +00:00
Boris Chiou c8d41a941f Bug 1625970 - Compare isSet flags between first value and others for text-decoration related HTML properties. r=masayuki
underline and strike use `text-decoration` property, which is a
shorthand and may include other longhand property values, e.g.
`text-decoration-color`. In order to set `aAll` flag correctly, we
should not just compare the computed values between `firstValue` and
`theValue`. This patch makes the HTMLStyleEditor more independent of
the serializations of the computed values on text-decoration.

If https://github.com/w3c/editing/issues/241 is accepted, we can just
replace `text-decoration` with `text-decoration-line` and drop this
patch.

Differential Revision: https://phabricator.services.mozilla.com/D69619
2020-04-04 09:29:08 +00:00
Masayuki Nakano fcca05a619 Bug 1620504 - part 22-8: Clean up warnings in HTMLStyleEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D67130
2020-03-19 12:48:42 +00:00
Boris Zbarsky 8b76288352 Bug 1535530. Fix can-run-script analysis to not mishandle on-stack refs to RefPtrs. r=andi,masayuki
The key here is to test the type of the variable declaration for being a
smartptr type, instead of testing the type of the variable _use_.

Differential Revision: https://phabricator.services.mozilla.com/D65581
2020-03-06 09:57:45 +00:00
Makoto Kato 993e91597c Bug 1359404 - Make IsEmptyNode infaillible. r=masayuki
IsEmptyNode won't return error if parameter is not null. So we shouldn't use
nserror for return value and use assertion to check parameter.

Differential Revision: https://phabricator.services.mozilla.com/D63124
2020-02-19 05:37:13 +00:00
Simon Giesecke 9bcfd47601 Bug 1611415 - Prefer using std::move over forget. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D60980
2020-02-13 14:38:48 +00:00
shindli 6bb3487209 Backed out changeset 0c982bc69cb3 (bug 1611415) for causing build bustages in /builds/worker/workspace/build/src/obj-firefox/dist/include/nsCOMPtr CLOSED TREE 2020-02-12 20:13:29 +02:00
Simon Giesecke d45525793f Bug 1611415 - Applied FixItHints from mozilla-non-std-move. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D60980
2020-02-12 17:24:41 +00:00
Masayuki Nakano 7891fef5cc Bug 1611751 - Remove unused scriptable methods of nsIHTMLEditor, nsIEditorStyleSheets and nsITableEditor r=m_kato
* `nsIHTMLEditor.removeAllInlineProperties`
* `nsIHTMLEditor.increaseFontSize`
* `nsIHTMLEditor.decreaseFontSize`
* `nsIHTMLEditor.setParagraphFormat`
* `nsIHTMLEditor.getBackgroundColorState`
* `nsIHTMLEditor.indent`
* `nsIHTMLEditor.align`
* `nsIEditorStyleSheets.replaceOverrideStyleSheet`
* `nsITableEditor.selectBlockOfCells`

These methods are not used by any Gecko products including comm-central and
BlueGriffon so that we should remove them.  Note that only
`HTMLEditor::GetBackgroundColorState()` is used internally so that we need to
keep it as a public method of `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D61139
2020-01-30 08:50:41 +00:00
Masayuki Nakano 60a48c15d9 Bug 970802 - part 5: Make AutoEditActionDataSetter created method dispatch "beforeinput" event r=smaug,m_kato
`AutoEditActionDataSetter` is created in the stack when editor's public method
is called and that guarantees lifetime of global objects in editor such as
editor itself, selection controller, etc.

The dispatcher of `beforeinput` event returns `NS_ERROR_EDITOR_ACTION_CANCELED`
if an event is actually dispatched but canceled.  The reason why it's an error
is, editor code must stop handling anything when any methods return error.
So, returning an error code is reasonable in editor module.  But when it's
filtered by `EditorBase::ToGenericNSResult()` at return statement of public
methods, it's converted to `NS_SUCCESS_DOM_NO_OPERATION`.  This avoids throwing
new exception, but editor class users in C++ can distinguish whether each edit
action is canceled or handled.  The reason why we should not throw new
exception from XPCOM API is, without taking care of each caller may break some
our UI (especially for avoiding to break comm-central).  Therefore, this patch
does not make XPCOM methods return error code when `beforeinput` event is
canceled.

In most cases, immediately after creating `AutoEditActionDataSetter` is good
timing to dispatch `beforeinput` event since editor has not touched the DOM
yet.  If `beforeinput` requires `data` or `dataTransfer`, methods need to
dispatch `beforeinput` event after that.  Alhtough this is not a good thing
from point of view of consistency of the code.  However, I have no better
idea.

Note 1: Our implementation does NOT conform to the spec about event order
between `keypress` and `beforeinput` (dispatching `beforeinput` event after
`keypress` event).  However, we follow all other browsers' behavior so that it
must be safe and the spec should be updated for backward compatibility.
Spec issue: https://github.com/w3c/uievents/issues/220

Note 2: Our implementation does NOT conform to the spec about event order
between `compositionupdate` and `beforeinput`.  Our behavior is same as
Safari, but different from Chrome.  This might cause web-compat issues.
However, our behavior does make sense from point of view of consistency of
event spec.  Additionally, at both `compositionupdate` and `beforeinput`,
composition string in editor has not been modified yet.  Therefore, this
may not cause web-compat issues (and I hope so).
Spec issue: https://github.com/w3c/input-events/issues/49

Note that this patch makes editor detect bugs that `beforeinput` event hasn't
been handled yet when it dispatches `input` event or modifying `data` and
`dataTransfer` value are modified after dispatching `beforeinput` event with
`MOZ_ASSERT`s.

Differential Revision: https://phabricator.services.mozilla.com/D58127
2020-01-14 07:18:51 +00:00
Masayuki Nakano d56156d1f8 Bug 970802 - part 2: HTML editor command classes shouldn't handle edit actions multiple times r=m_kato
Some HTML editor command classes call `*AsAction()` methods multiple times.
That causes that user needs multiple undo/redo for a command and one command
causes multiple "input" events.  For both compatibility with the other
browsers and making "beforeinput" cancelable, they should call `*AsAction()`
once.  Instead, `HTMLEditor` should handle related element deletion.

This patch makes `HTMLEditor::RemoveInlinePropertyInternal()` remove multiple
elements if its caller allows, and `HTMLEditor::SetInlinePropertyAsAction()`
call `RemoveInlinePropertyInternal()` in some cases.

According to comm-central and BlueGriffon, we can make
`HTMLEditor::RemoveInlineProperty()` also removes the related methods
automatically because comm-central does same thing from script and BlueGriffon
does not use this.  However, we cannot do that for
`HTMLEditor::SetInlineProperty()` because BlueGriffon may call it with any
HTML5 elements and does not expect removing elements in same block at that
time.  If we needed to reduce the overhead of comm-central, we could change
only `RemoveInlineProperty()`, but it would make these APIs behavior
inconsistent.

Differential Revision: https://phabricator.services.mozilla.com/D58124
2020-01-14 07:14:55 +00:00
Razvan Maries fb31761821 Backed out 5 changesets (bug 970802) for xpcshell perma fails. CLOSED TREE
Backed out changeset 5511edd700f7 (bug 970802)
Backed out changeset 1fb9cf2264b6 (bug 970802)
Backed out changeset 6b185296c742 (bug 970802)
Backed out changeset ce6853e64ed6 (bug 970802)
Backed out changeset aa9bd45c09b1 (bug 970802)
2020-01-14 04:41:15 +02:00
Masayuki Nakano eefa668237 Bug 970802 - part 5: Make AutoEditActionDataSetter created method dispatch "beforeinput" event r=smaug,m_kato
`AutoEditActionDataSetter` is created in the stack when editor's public method
is called and that guarantees lifetime of global objects in editor such as
editor itself, selection controller, etc.

The dispatcher of `beforeinput` event returns `NS_ERROR_EDITOR_ACTION_CANCELED`
if an event is actually dispatched but canceled.  The reason why it's an error
is, editor code must stop handling anything when any methods return error.
So, returning an error code is reasonable in editor module.  But when it's
filtered by `EditorBase::ToGenericNSResult()` at return statement of public
methods, it's converted to `NS_SUCCESS_DOM_NO_OPERATION`.  This avoids throwing
new exception, but editor class users in C++ can distinguish whether each edit
action is canceled or handled.  The reason why we should not throw new
exception from XPCOM API is, without taking care of each caller may break some
our UI (especially for avoiding to break comm-central).  Therefore, this patch
does not make XPCOM methods return error code when `beforeinput` event is
canceled.

In most cases, immediately after creating `AutoEditActionDataSetter` is good
timing to dispatch `beforeinput` event since editor has not touched the DOM
yet.  If `beforeinput` requires `data` or `dataTransfer`, methods need to
dispatch `beforeinput` event after that.  Alhtough this is not a good thing
from point of view of consistency of the code.  However, I have no better
idea.

Note 1: Our implementation does NOT conform to the spec about event order
between `keypress` and `beforeinput` (dispatching `beforeinput` event after
`keypress` event).  However, we follow all other browsers' behavior so that it
must be safe and the spec should be updated for backward compatibility.
Spec issue: https://github.com/w3c/uievents/issues/220

Note 2: Our implementation does NOT conform to the spec about event order
between `compositionupdate` and `beforeinput`.  Our behavior is same as
Safari, but different from Chrome.  This might cause web-compat issues.
However, our behavior does make sense from point of view of consistency of
event spec.  Additionally, at both `compositionupdate` and `beforeinput`,
composition string in editor has not been modified yet.  Therefore, this
may not cause web-compat issues (and I hope so).
Spec issue: https://github.com/w3c/input-events/issues/49

Note that this patch makes editor detect bugs that `beforeinput` event hasn't
been handled yet when it dispatches `input` event or modifying `data` and
`dataTransfer` value are modified after dispatching `beforeinput` event with
`MOZ_ASSERT`s.

Differential Revision: https://phabricator.services.mozilla.com/D58127
2020-01-14 01:09:45 +00:00
Masayuki Nakano fc0e25e156 Bug 970802 - part 2: HTML editor command classes shouldn't handle edit actions multiple times r=m_kato
Some HTML editor command classes call `*AsAction()` methods multiple times.
That causes that user needs multiple undo/redo for a command and one command
causes multiple "input" events.  For both compatibility with the other
browsers and making "beforeinput" cancelable, they should call `*AsAction()`
once.  Instead, `HTMLEditor` should handle related element deletion.

This patch makes `HTMLEditor::RemoveInlinePropertyInternal()` remove multiple
elements if its caller allows, and `HTMLEditor::SetInlinePropertyAsAction()`
call `RemoveInlinePropertyInternal()` in some cases.

According to comm-central and BlueGriffon, we can make
`HTMLEditor::RemoveInlineProperty()` also removes the related methods
automatically because comm-central does same thing from script and BlueGriffon
does not use this.  However, we cannot do that for
`HTMLEditor::SetInlineProperty()` because BlueGriffon may call it with any
HTML5 elements and does not expect removing elements in same block at that
time.  If we needed to reduce the overhead of comm-central, we could change
only `RemoveInlineProperty()`, but it would make these APIs behavior
inconsistent.

Differential Revision: https://phabricator.services.mozilla.com/D58124
2020-01-08 09:22:52 +00:00
Edgar Chen aa4ce717b2 Bug 1580491 - Use Element::HasNonEmptyAttr in various places; r=bzbarsky
This was done by reviewing the results of
https://searchfox.org/mozilla-central/search?q=%2F*GetAttr%5C(.%2B(%26%26%7C%5C%7C%5C%7C)&case=true&regexp=true
one by one and replacing them with Element::HasNonEmptyAttr if possible.

Differential Revision: https://phabricator.services.mozilla.com/D51241
2019-11-01 15:24:25 +00:00
Masayuki Nakano ae4862ce5c Bug 1566795 - part 6: Make HTMLEditor::RemoveInlinePropertyInternal() remove text node style which comes from block parent r=m_kato
Finally, `Document.execCommand()` still does not work fine if selection
starts from very start of block and/or end at very end of block because
`PromoteInlineRange()` extends selection range to contain the
containers, then, `SubtreeContentIterator` won't list up text nodes.

In this case, `RemoveInlinePropertyInternal()` expects that
`RemoveStyleInside()` removes text node style with creating
`<span>` elements.  However, `RemoveStyleInsilde()` only handles
`Element`s and it handles elements from most-descendants.
Therefore, it cannot distinguish whether text node style comes
from removing inline elements or parent block.

This patch makes `RemoveInlinePropertyInternal()` collect
descendant text nodes in the range after handling all nodes in
the range except descendant text nodes, then, check the
final style of descendant text nodes, finally, remove the style
if coming from parent block.

Differential Revision: https://phabricator.services.mozilla.com/D47865
2019-10-09 08:04:34 +00:00
Masayuki Nakano 105a3acdcd Bug 1566795 - part 5: Make the for loop of HTMLEditor::RemoveInlinePropertyInternal() partially selected text nodes r=m_kato
If selection range is not in **one** text node, `RemoveInlinePropertyInternal()`
collects target nodes with `SubtreeContentIterator`.  It only collects topmost
nodes which are **entirely** contained in the range (it's enough because their
descendants will be handled by `RemoveStyleInside()` recursively).

The reasons why it uses `SubtreeContentIterator` rather than
`PreContentIterator` must be:
1. Performance reason.
2. Assuming there are no multiple text nodes.
3. Not expects that user removes text node styles come from parent block.

The reason 2 is wrong because when removing a style, all browsers don't
join text nodes which was in removing element with adjacent text nodes.
(I.e., we cannot change this behavior for compatibility.)

The reason 3 is of course wrong we're struggling with this scenario.

Therefore, `RemoveInlinePropertyInternal()` needs to collect partially
selected text nodes by itself (if there are).  Then, we can merge the
single text node selected case with the `for` loop.

Differential Revision: https://phabricator.services.mozilla.com/D47864
2019-10-08 09:24:47 +00:00
Masayuki Nakano bda1c55ded Bug 1566795 - part 4: Make HTMLEditor not check IsCSSEnabled() at removing inline style r=m_kato
For compatibility with Chrome, when removing inline style at block parent,
we should reset the style with creating `<span>` element whose `style`
attribute removes the style.  We do this only in CSS mode, but we should do
it in HTML mode too.

This patch also makes `FontFaceStateCommand::SetState()` ignore `tt` value
if its root caller is `Document::ExecCommand()`.  It was implemented for
composer to handle XUL command in bug 115922.  Therefore, we should not do
this special handling on the web.  If it were possible to separate this
change to another bug, it'd be nicer.  But without this change, we'll have
a lot of regressions of `Document.execCommand("fontname")`.  Therefore,
this is also fixed in this patch.

Note that this removes first `.ini` file selection because
the tests cannot be run without test number range parameter.
So, the sections are not used anymore.

Differential Revision: https://phabricator.services.mozilla.com/D47862
2019-10-08 09:24:19 +00:00
Razvan Maries 4287198b5b Backed out changeset 90695432b21e (bug 1566795)for build bustages on HTMLStyleEditor.cpp. CLOSED TREE 2019-10-08 10:21:58 +03:00
Masayuki Nakano 8c4c0a3b9d Bug 1566795 - part 4: Make HTMLEditor not check IsCSSEnabled() at removing inline style r=m_kato
For compatibility with Chrome, when removing inline style at block parent,
we should reset the style with creating `<span>` element whose `style`
attribute removes the style.  We do this only in CSS mode, but we should do
it in HTML mode too.

This patch also makes `FontFaceStateCommand::SetState()` ignore `tt` value
if its root caller is `Document::ExecCommand()`.  It was implemented for
composer to handle XUL command in bug 115922.  Therefore, we should not do
this special handling on the web.  If it were possible to separate this
change to another bug, it'd be nicer.  But without this change, we'll have
a lot of regressions of `Document.execCommand("fontname")`.  Therefore,
this is also fixed in this patch.

Note that this removes first `.ini` file selection because
the tests cannot be run without test number range parameter.
So, the sections are not used anymore.

Differential Revision: https://phabricator.services.mozilla.com/D47862
2019-10-07 05:31:19 +00:00
Masayuki Nakano 53c5025739 Bug 1566795 - part 3: Clean up HTMLEditor::RemoveStyleInside() r=m_kato
Surprisingly, its `aChildOnly` is never set to `true` and if it were set to
`true`, it does unnecessary recursive calls.  Therefore, we can make it
simpler.

Differential Revision: https://phabricator.services.mozilla.com/D47860
2019-10-07 03:33:11 +00:00
Masayuki Nakano 5dcf1029f6 Bug 1566795 - part 2: Clean up HTMLEditor::SplitAboveRange() r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D47859
2019-10-07 01:11:31 +00:00
Masayuki Nakano 27f1583d73 Bug 1566795 - part 1: Clean up HTMLEditor::ClearStyle(), HTMLEditor::SplitStyleAbovePoint() and their callers r=m_kato
Both method take a DOM point with `nsCOMPtr<nsINode>*` and `int32_t*`.
This makes each caller complicated.  Instead, we should use stack only class
to return both `EditorDOMPoint` and `nsresult`.  I name it `EditResult`.

Additionally, this fixes a bug of `HTMLeditor::SplitStyleAboveRange()`.  That
is not tracking new selection start point while it splits elements at end
of given range.  This is detected by the debug assertion in
`ToRawRangeBoundary()` (i.e., this fix is required to pass some tests).

Differential Revision: https://phabricator.services.mozilla.com/D47858
2019-10-07 00:55:02 +00:00
Masayuki Nakano e4c4219762 Bug 1581034 - part 2: Get rid of TextEditUtils::IsBreak() and TextEditUtils itself r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D45811
2019-09-18 12:37:14 +00:00
Masayuki Nakano c668efb72a Bug 1540029 - part 10: Get rid of TextEditRules and HTMLEditRules r=m_kato
Now, we can get rid of `TextEditRules` and `HTMLEditRules` completely.
And also this patch renames their cpp files to `TextEditSubActionHandler`
and `HTMLEditSubActionHandler`.

`TextEditor::Init()` and `HTMLEditor::Init()` are still complicated due to
`AutoEditInitRulesTrigger`.  The following patch will remove it.

Differential Revision: https://phabricator.services.mozilla.com/D45792
2019-09-18 08:40:08 +00:00
Masayuki Nakano b32c2c7c6e Bug 1540029 - part 4: Merge BeforeEdit() and OnStartToHandleTopLevelEditSubAction(), and AfterEdit() and OnEndHandlingTopLevelEditSubAction() r=m_kato
And also this patch make each `AutoEditSubActionNotifier` creator check
the result of `OnStartToHandleTopLevelEditSubAction()` at least for
`NS_ERROR_EDITOR_DESTROYED`.

We need to take care of its destructor's result later, though.

Differential Revision: https://phabricator.services.mozilla.com/D45786
2019-09-18 03:01:28 +00:00