Commit Graph
330 Commits
Author SHA1 Message Date
Masayuki Nakano 3e04dd7b06 Bug 1752668 - Restore null-check in HTMLEditor::ClearStyleAt r=m_kato
I don't remember why I removed the null-check in
https://phabricator.services.mozilla.com/D131748#change-Q0aewmYc3vaK

Restoring the null-check should be fine.

Differential Revision: https://phabricator.services.mozilla.com/D137395
2022-01-31 17:15:35 +00:00
Masayuki Nakano 05d0e158a9 Bug 1742748 - Make HTMLEditor::JoinNodesWithTransaction() return JoinNodesResult r=m_kato
This patch implements `JoinNodesResult` class which callers of
`JoinNodesWithTransaction()` can access removed node, existing (joined) node and
joined point with logical named accessors, and makes
`JoinNodesWithTransaction()` return it.

Then, the callers don't need to change at fixing bug 1735608.

Differential Revision: https://phabricator.services.mozilla.com/D132120
2021-11-27 00:05:54 +00:00
Masayuki Nakano a0a6850476 Bug 1739935 - Make HTMLEditor::SplitNodeWithTransaction() return SplitNodeResult r=m_kato
With this patch, callers of it can handle left and right node logically instead
of assuming that one is split and the other is new one.

Depends on D131748

Differential Revision: https://phabricator.services.mozilla.com/D131749
2021-11-24 02:27:41 +00:00
Masayuki Nakano 8ce63d4397 Bug 1740858 - Improve SplitNodeResult r=m_kato
First, left/right node accessors are not used so that we can get rid of them.
However, we should have similar methods which can retrieve original node and
new node.  Therefore, this adds `GetNewContent()` and `GetOriginalContent()`.

Next, `SplitPoint()` should return both `EditorDOMPoint` and `EditorRawDOMPoint`
for avoiding unnecessary conversion from `EditorRawDOMPoint` to
`EditorDOMPoint`.  Therefore, this patch makes it a template method too.

Finally, this patch adds helper methods to get point of each related content.
E.g., `AtNewContent()` corresponding to `GetNewContent()`.

Differential Revision: https://phabricator.services.mozilla.com/D131748
2021-11-24 00:56:33 +00:00
Masayuki Nakano 1e39247e59 Bug 1740859 - part 2: Make HTMLEditor::SplitNodeDeepWithTransaction() callers omit checking whether the editor is destroyed r=m_kato
It touches the DOM tree only with `SplitNodeTransaction()` and it now returns
`NS_ERROR_EDITOR_DESTROYED` so that the callers don't need to check whether
the editor is destroyed or alive by themselves.

Depends on D131043

Differential Revision: https://phabricator.services.mozilla.com/D131044
2021-11-15 02:29:48 +00:00
Masayuki Nakano 617c1cb919 Bug 1740859 - part 1: Make HTMLEditor::SplitNodeWithTransaction() return NS_ERROR_EDITOR_DESTROYED if it happens r=m_kato
For making the code simpler, this patch makes it returns
`Result<nsCOMPtr<nsIContent>, nsresult>` instead of using `ErrorResult`.
This must make the construction faster and callers simpler.

Depends on D130950

Differential Revision: https://phabricator.services.mozilla.com/D131043
2021-11-15 02:23:33 +00:00
Masayuki Nakano 780fbf11f8 Bug 1714914 - Make editor classes treat offset in parent node as uint32_t r=m_kato
It should be treated as `uint32_t` since DOM API does so.  However, there are
some exceptions:

* Result of `nsINode::ComputeIndexOf()`
* Result of `nsAString` methods

They return `-1` as not found, and anyway, they cannot treat large integer
than `INT32_MAX`.  Therefore, this patch does not touch around them.

Differential Revision: https://phabricator.services.mozilla.com/D118933
2021-06-30 07:07:28 +00:00
Masayuki Nakano 961cdfee8a Bug 1717178 - part 4: Get rid of nsIHTMLEditor.getInlineProperty() because of unused r=m_kato
Only `test_bug1140105.html` is its user, but it can be replaced with
`getInlinePropertyWithAttrValue()` since they do exactly same things:
https://searchfox.org/mozilla-central/rev/fc95c6ad297d9d257f05599d01741503f3f57326/editor/libeditor/HTMLStyleEditor.cpp#1685-1687,1719-1721

Depends on D118799

Differential Revision: https://phabricator.services.mozilla.com/D118800
2021-06-28 12:08:50 +00:00
Masayuki Nakano 651ef12aa0 Bug 1716746 - Rename EditorBase::IsPlaintextEditor() to IsInPlaintextMode() r=m_kato
Developers may be confused at `IsTextEditor()` and `IsPlaintextEditor()`. When
the latter is `true`, the former is always `true`, but it may be `true` when the
editor is `HTMLEditor` too. So, it's a mode of  `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D118246
2021-06-18 20:35:48 +00:00
Masayuki Nakano 284ea1b8a5 Bug 1627175 - part 66: Move HTMLEditor::IsTextPropertySetByContent() to HTMLEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D115178
2021-05-18 06:55:03 +00:00
Masayuki Nakano 589f224651 Bug 1627175 - part 53: Rename HTMLEditUtils::GetFirstLeafChild() and HTMLEditUtils::GetLastLeafChild() r=m_kato
They may return a descendant, and now `HTMLEditUtils` has some methods whose
name ends with `Child` and they scan only direct children of given node.
So, we should rename these methods for avoiding misunderstanding.

Differential Revision: https://phabricator.services.mozilla.com/D115122
2021-05-17 08:01:37 +00:00
Masayuki Nakano 3317dce634 Bug 1627175 - part 50: Move HTMLEditor::GetFirstEditableChild() to HTMLEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D115119
2021-05-17 07:08:39 +00:00
Masayuki Nakano 4118203d72 Bug 1627175 - part 49: Move HTMLEditor::GetLastEditableChild() to HTMLEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D115118
2021-05-17 05:44:34 +00:00
Masayuki Nakano a92de4a62f Bug 1627175 - part 47: Move HTMLEditor::GetNextHTMLSibling() to HTMLEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D115116
2021-05-17 05:25:04 +00:00
Masayuki Nakano 6a94b6a4c2 Bug 1627175 - part 46: Move HTMLEditor::GetPriorHTMLSibling() to HTMLEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D115115
2021-05-17 03:05:13 +00:00
Masayuki Nakano 537ba14656 Bug 1627175 - part 23: Move HTMLEditor::IsEmptyNode() into HTMLEditUtils with making it take EnumSet instead of bool arguments r=m_kato
It's hard to understand each caller of `HTMLEditor::IsEmptyNode()` tries to
check with multiple `bool` arguments.  Therefore, they should be replaced
with an `EnumSet`.

Note that only the first argument is reverted the meaning.  Therefore, if
it's omitted or `false`, `EmptyCheckOption::TreatSingleBRElementAsVisible`
is specified explicitly.  Otherwise, i.e., `true`, nothing should be
specified.

Differential Revision: https://phabricator.services.mozilla.com/D112513
2021-04-20 12:02:17 +00:00
Masayuki Nakano bb9b5f8217 Bug 1627175 - part 22: Get rid of HTMLEditor::IsEmptyTextNode() r=m_kato
It returns true only when it's a text node, but the text is empty.
However, `HTMLEditUtils::IsVisibleTextNode()` is used in
`HTMLEditor::IsEmptyNodeImpl()`.  So, we replace it with directly using
`HTMLEditUtils::IsVisibleTextNode()`.

Depends on D112511

Differential Revision: https://phabricator.services.mozilla.com/D112512
2021-04-20 02:00:15 +00:00
Masayuki Nakano eb2fdfe3b2 Bug 1699866 - Make HTMLEditor::SplitAncestorStyledInlineElementsAt return "not handled" if there is no splitable element at given point r=m_kato
When given point is **in** a void element, e.g., this can be when JS inserts
nodes into a void element like `<meta>`,
`HTMLEditor::SplitNodeDeepWithTransaction` may return "not handled" state.
So, it's possible case, we shouldn't assert the case.

This patch adds both WPT and crashtests because I couldn't reproduce it
with WPT's simpler API use.

Differential Revision: https://phabricator.services.mozilla.com/D111231
2021-04-09 02:34:23 +00:00
Masayuki Nakano e1d379d2d9 Bug 1649639 - Add WPT and remove unnecessary MOZ_ASSERT of HTMLEditor::ClearStyleAt r=m_kato
When the method detects the style coming from a parent block, the `MOZ_ASSERT`
checks whether the current mode is "style with CSS" or not because currently,
`HTMLEditor` does not use `<span>` with CSS when the mode is not "style with
CSS".  However, fixing it requires bigger patch, and the change does not match
with the bug's summary.  So, I just remove the `MOZ_ASSERT`, add WPT and filed
bug 1649639 for the root issue.

Differential Revision: https://phabricator.services.mozilla.com/D111067
2021-04-08 07:49:53 +00:00
Masayuki Nakano 04ff975886 Bug 1703144 - Get rid of MOZ_KnownLive for EditorBase::SelectionRefPtr() r=m_kato
The lifetime of it is guaranteed by `AutoEditActionDataSetter` which grabs
`Selection` until it's destroyed, and it's a stack only class and created
at first step of all public method calls.  Therefore, we can mark it as
`MOZ_KNOWN_LIVE` and we can change it returning reference of `Selection`
instead of reference of `RefPtr<Selection>`.

Differential Revision: https://phabricator.services.mozilla.com/D110896
2021-04-08 01:31:54 +00:00
Masayuki Nakano 44f0dae5b2 Bug 1697249 - Stop creating <span> element for keeping same style as the link when the link will be unlinked r=m_kato
When typing at edge of a link, editor splits the link element at the edge (i.e.,
creating an empty link element).  Then, unlink the new link element (i.e.,
clearing the "link style").  At this time, `class` attribute and `style`
attribute are cloned to new `<span>` element for keeping the original style.
However, in this case, other browsers discard the specified style of the link.

On the other hand, when unlinking a link with `execCommand("unlink")`, the
other browsers keep specified style coming from `style` attribute.

Therefore, this patch adds new state to `PropItem`, which indicates whether
the `class` and `style` attribute should be cloned or discarded.  And then,
when preparing for inserting text, this patch makes it pass to the utility
method.

For better compatibility, we should stop cloning `class` attribute, but not
in this bug because this patch should be minimized for requesting uplift to
beta channel.

Differential Revision: https://phabricator.services.mozilla.com/D107801
2021-03-11 07:19:33 +00:00
Masayuki Nakano 46441fc0a5 Bug 1677566 - part 2: Make HTMLEditUtils treat a found non-editable element as a leaf node even if it has children r=m_kato
Blink treats each non-editable node as an atomic object.  E.g., deleting or
forward-deleting from next to a non-editable element, it deletes only one
non-editable element.

Unfortunately, our layout treat adjacent non-editable nodes as a node.
Therefore, the adding WPTs do not work, but they are not new regression of
this patch.

Differential Revision: https://phabricator.services.mozilla.com/D107587
2021-03-09 23:57:54 +00:00
Daniel Holbert 498d193041 Bug 1685231: Fix the typo "ot" in various code-comments (to "to", "of", or "not"). r=mccr8
DONTBUILD because this is a comment-only change and hence doesn't affect
behavior at all.

I ran across this typo in nsPageFrame.cpp, and figured I might as well grep for
it and fix it more comprehensively. And while I'm at it, I also fixed some
neighboring instances of a duplicated word around a linebreak, in
nsXMLContentSerializer.h.

Differential Revision: https://phabricator.services.mozilla.com/D100852
2021-01-06 04:54:51 +00:00
Simon Giesecke ab6f0a7137 Bug 1650145 - Replace all value uses of Empty[C]String by 0-length _ns literals. r=froydnj,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D82325
2020-09-23 15:17:15 +00:00
Masayuki Nakano 622e0d1a98 Bug 1660378 - part 9: Avoid QI for getting nsStyledElement pointer r=smaug
The editor modules does QI too many times when it sets or removes some style
with `execCommand` or XPCOM API.  Therefore, there should be an API to
retrieve `nsStyledElement` pointer from `nsINode*`.

Differential Revision: https://phabricator.services.mozilla.com/D87990
2020-08-26 05:29:06 +00:00
Masayuki Nakano 2776abb8c6 Bug 1660378 - part 8: Make HTMLEditor::IsSimpleModifiableNode() take Element& instead of nsIContent* r=m_kato
Although it starts to return error if it causes destroying the editor, but
it should not occur because it modifies new and orphan node and it shouldn't
kick any mutation event listeners.  Therefore, this patch makes the callers
handle error as-is rather than ignoring errors except
`NS_ERROR_EDITOR_DESTROYED`.

Differential Revision: https://phabricator.services.mozilla.com/D87989
2020-08-26 04:48:36 +00:00
Masayuki Nakano 8abb67b878 Bug 1660378 - part 7: Make CSSEditUtils::SetCSSEquivalentToHTMLStyle() take nsStyledElement& instead of Element* r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D87988
2020-08-26 04:48:32 +00:00
Masayuki Nakano e6bcbb653d Bug 1660378 - part 4: Make CSSEditUtils::DoElementsHaveSameStyle() take nsStyledElement& instead of Element& r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D87985
2020-08-26 04:48:22 +00:00
Masayuki Nakano f91231b39f Bug 1660378 - part 3: Make CSSEditUtils::RemoveCSSEquivalentToHTMLStyle() take nsStyledElement& instead of Element* r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D87984
2020-08-26 04:48:19 +00:00
Masayuki Nakano cda4f82a28 Bug 1660378 - part 2: Make CSSEditUtils::RemoveCSSPoperty() take nsStyledElement& instead of Element& r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D87983
2020-08-26 04:48:16 +00:00
Masayuki Nakano c9e542c37f Bug 1659276 - Make AutoPlaceholderBatch choose whether do or do not ScrollSelectionIntoView r=m_kato
The root cause of this bug is a bug of async `ScrollSelectionIntoView` that
is what it won't be canceled even if web app changes scroll position with
any API.  Fixing it is really risky and this bug affects an existing website.
Therefore, this patch makes the constructors of `AutoPlaceholderBatch` take
whether do or do not `ScrollSelectionIntoView` when it's destructed.  And
makes `HTMLEditor::SetInlinePropertyAsAction()` not request
`ScrollSelectionIntoView` for taking back the traditional behavior.

Note that this patch does not make it an optional argument because it's hard to
guess that it'll run `ScrollSelectionIntoView` automatically.

Differential Revision: https://phabricator.services.mozilla.com/D87819
2020-08-24 06:39:50 +00:00
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