Граф коммитов

9951 Коммитов

Автор SHA1 Сообщение Дата
Masayuki Nakano 94a85cde62 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 c803c1d7be 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 878d787eaa 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 c24a8d4f1f Bug 1540037 - part 1: Move `EditorBase::ReplaceContainerWithTransaction()` and related methods to `HTMLEditor` r=m_kato
They are used only by `HTMLEditor` so that we should hide them from
`TextEditor` for making it clearer that they are not used by `TextEditor`.

Note that there are 2 `DeleteNodeWithTransaction()` in `HTMLEditor` class.
One is `EditorBase`'s method and the other is `HTMLEditor`'s method.
`HTMLEditor`'s one is check whether the removing node is editable or not,
but in some cases, we need to move non-editable nodes.  Therefore, this
patch makes `ReplaceContainerWithTransaction()` call `EditorBase`'s one
for keeping current behavior.

Differential Revision: https://phabricator.services.mozilla.com/D72822
2020-04-30 06:35:38 +00:00
Botond Ballo ffdcf19a50 Bug 1633014 - Fix non-unified build errors in editor/. r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D72470
2020-04-27 03:36:57 +00:00
Masayuki Nakano 0440ea1f97 Bug 1632724 - part 5: Remove out params of `EditorBase::CreateTransactionForDelete*()` r=m_kato
The out params mean the last collapsed selection range's result (although,
the meaning is odd and offset and length are not overwritten when there is
another collapsed range and it causes `DeleteNodeTransaction`).  Additionally,
when and only when `DeleteNodeTransaction` and `DeleteTextTransaction` are
added to the `EditAggregationTransaction` created by
`CreateTransactionForSelection()`.  Therefore, same result can be looked for
from its only caller, `DeleteSelectionWithTransaction()`.

Note that this makes the method slower if there are too many selection ranges,
but such case must be rare because:

1. We can assume that users rarely use multiple selection ranges for removing
multiple ranges of content except table.
2. Multiple selection is supported only by Gecko.  Therefore, web apps must
not use multiple selection for this purpose.

So, it must be okay to use this slower approach for making the methods simpler.
If it'd become damage to some benchmarks, let's create faster access to get
transaction type.

Depends on D72293

Differential Revision: https://phabricator.services.mozilla.com/D72294
2020-04-27 01:36:02 +00:00
Masayuki Nakano f3a31a9bda Bug 1632724 - part 4: Rename `HTMLEditor::DeleteSelectionWithTransaction()` r=m_kato
`HTMLEditor::DeleteSelectionWithTransaction()` calls `EditorBase`'s overridden
method and handles `nsIEditor::eStrip` case.  Therefore, we can rename it with
stop calling the `EditorBase::DeleteSelectionWithTransaction()`, and make it
called by `EditorBase::DeleteSelectionWithTransaction()` only when it's
necessary.

Additionally, we can make all internal method callers of editor classes always
set `nsIEditor::eNoStrip` if the instance is `TextEditor`.  This must make
the code easier to understand.

Depends on D72292

Differential Revision: https://phabricator.services.mozilla.com/D72293
2020-04-27 00:36:10 +00:00
Masayuki Nakano 378eb2888e Bug 1632724 - part 3: Make helper methods of `EditorBase::DeleteSelectionWithTransaction()` take new `enum class` instead of `nsIEditor::EDirection` r=m_kato
The parameter is used only by `EditorBase::CreateTxnForDeleteRange()` to
extend collapsed range, but it accepts only `nsIEditor::eNext` and
`nsIEditor::ePrevious`.  Therefore, using `nsIEditor::EDirection` does not
make sense.  Instead, they should use new `enum class`,
`HowToHandleCollapsedRange`.

Depends on D72291

Differential Revision: https://phabricator.services.mozilla.com/D72292
2020-04-26 15:58:35 +00:00
Masayuki Nakano b67f6a5763 Bug 1632724 - part 2: Move `DeleteSelectionWithTransaction()` from `TextEditor` to `EditorBase` since it's used by `HTMLEditor` too r=m_kato
Depends on D72290

Differential Revision: https://phabricator.services.mozilla.com/D72291
2020-04-24 15:22:42 +00:00
Masayuki Nakano 6cbea10c99 Bug 1632724 - part 1: Move common methods for handling delete selection to `EditorBase` r=m_kato
`DeleteSelection*()` are members of `TextEditor`, but they are also used by
`HTMLEditor`.  Therefore, they and pref cache members for them should be
in `EditorBase` too.

Depends on D71911

Differential Revision: https://phabricator.services.mozilla.com/D72290
2020-04-24 14:55:09 +00:00
sanketh b2456e6ee7 Bug 1320229 - allow user pastes longer than input maxlength r=masayuki
Currently, all input (including user pastes) to an input field is truncated to
`maxlength`. This diff disables truncation for user pastes.

When (1) `GetEditAction` is `ePaste`, `ePasteAsQuotation`, `eDrop`, or
`eReplaceText` (ie we are dealing with a paste) and (2) `GetEditActionPrincipal`
is `nullptr` (ie we are dealing with a user edit and not a JS edit), allow a
paste without truncation. That means that, in this case, we will return
`EditActionIgnored` instead of trying to truncate the string.

This behavior is controlled by a new preference `editor.truncate_user_pastes`
which is `false` by default (set in `StaticPrefList.yaml`).

We also modify `editor/libeditor/tests/test_bug603556.html` which currently
expects the output of a paste longer than maxlength to be truncated.

Testing: Created
`editor/libeditor/tests/test_pasting_text_longer_than_maxlength.html` which
checks if a user can paste a password longer than `maxlength` and if the field
is then marked as `tooLong` (this was the original concern of the reporter of
Bug 1320229), and
`editor/libeditor/tests/test_setting_value_longer_than_maxlength_with_setUserInput.html`
which checks if `eReplaceText` has consistent behavior regardless of whether the
field has an associated editor (this test works by calling `setUserInput()`
before and after the element gets focus.) `./mach test editor/libeditor` tests
pass.

Differential Revision: https://phabricator.services.mozilla.com/D71689
2020-04-27 01:29:43 +00:00
Simon Giesecke 9cc891f41f Bug 1628715 - Part 5: Add MOZ_NONNULL_RETURN to infallible nsTArray::InsertElementsAt. r=xpcom-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D70403
2020-04-24 13:26:13 +00:00
Masayuki Nakano 09160b3e7b Bug 1632021 - part 4: Get rid of IID of `InsertTextTransaction` and `CompositionTransaction` r=m_kato
`EditTransactionBase::GetAs*Transaction()` should be used instead.

Differential Revision: https://phabricator.services.mozilla.com/D71911
2020-04-23 12:28:39 +00:00
Masayuki Nakano 14c56a78ab Bug 1632021 - part 3: Get rid of `nsIAbsorbingTransaction` r=m_kato
It's inherited only by `PlaceholderTransaction` and used only for QI.
Therefore, we can get rid of it.

Additionally, this makes storing `PlaceholderTransaction` and
`CompositionTransaction` in `PlaceholderTransaction` faster and safer with
`WeakPtr`.

Finally, this makes `PlaceholderTransaction` always have non-null name
because it caused a lot of useless warnings in
`EditAggregationTransaction::GetName()` and
`PlaceholderTransaction::GetTxnName()`.

Differential Revision: https://phabricator.services.mozilla.com/D71910
2020-04-23 10:46:55 +00:00
Masayuki Nakano 47acd7e8de Bug 1632021 - part 2: Add `nsITransaction::GetAsEditTransactionBase()` r=m_kato
In a lot of places in libeditor, we do nothing if given transaction is not
our edit transaction classes' instance.  Therefore, it's better to have
casting virtual method in `nsITransaction` for performance because QI cost
may not be cheap.

Differential Revision: https://phabricator.services.mozilla.com/D71908
2020-04-23 07:02:16 +00:00
Masayuki Nakano 3aa3b37a40 Bug 1632021 - part 1: Add `GetAs*Transaction()` methods to every subclasses of `EditTransactionBase` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D71907
2020-04-23 05:46:43 +00:00
Jonathan Kew d0c11aa6d1 Bug 425915 - Add Thai movement-by-word testcases. r=m_kato
Depends on D71206

Differential Revision: https://phabricator.services.mozilla.com/D71621
2020-04-23 14:19:44 +00:00
Mark Banner 91b65009eb Bug 1549945 - Avoid the need for import-globals-from when (x)html files load scripts via /tests/. r=mossop
When loading from /tests/ we can strip off the /tests/ part and find the file with the rest of the path.

Differential Revision: https://phabricator.services.mozilla.com/D71411
2020-04-20 16:15:11 +00:00
Emilio Cobos Álvarez 31821e1fc4 Bug 1449522 - Remove nsIEditorStyleSheets. r=masayuki,m_kato
Users have much better, easier alternatives, like
DOMWindowUtils.{loadSheetUsingURIString,removeSheet}, which we use to
replace the only caller that exists in mozilla-central (the editor
element, which loads EditorOverride.css).

This allows to clean up the style system and editor. There are other
callers in comm-central, but it seems they can switch to DOMWindowUtils
trivially, as the DOMWindowUtils APIs also use the system principal and
thus they can load any URL.

I'll make sure to give them some time with the migration and/or help
out of course.

Differential Revision: https://phabricator.services.mozilla.com/D71263
2020-04-17 22:54:48 +00:00
Masayuki Nakano 9f7fb5bb0f Bug 1630168 - Make `HTMLEditor` stop adding same runnable method into the queue r=m_kato
When `HTMLEditor` is notified of content changes, it may add a runnable method
`HTMLEditor::OnModifyDocument` or `HTMLEditor::NotifyRootChanged` for each
notification. However, their code do not need running twice nor more. This
could cause performance issues on complicated web apps which sets `innerHTML`
at every key press.

Differential Revision: https://phabricator.services.mozilla.com/D71001
2020-04-16 15:15:26 +00:00
Masayuki Nakano 5a3a0d40e7 Bug 1627175 - part 10: Move `HTMLEditor::GetEnclosingTable()` to `HTMLEditUtils` r=m_kato
Depends on D70883

Differential Revision: https://phabricator.services.mozilla.com/D70884
2020-04-16 14:53:54 +00:00
Masayuki Nakano 29b0030c60 Bug 1627175 - part 9: Move `HTMLEditor::GetBlock()` and `HTMLEditor::GetBlockNodeParent()` to `HTMLEditUtils` r=m_kato
This patch also names the former to `GetInclusiveAncestorBlockElement()` and
the latter to `GetAncestorBlockElement()` for consistency with modern DOM
API names.

Depends on D70882

Differential Revision: https://phabricator.services.mozilla.com/D70883
2020-04-16 14:19:18 +00:00
Masayuki Nakano 1ee4f00529 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 5bcef30e8b Bug 1627175 - part 7: Move `EditorBase::IsPaddingBRElementForEmptyLastLine()` to `EditorUtils` r=m_kato
It's also used in `<textarea>` so that it should be in `EditorUtils` rather
than `HTMLEditUtils`.

Depends on D70879

Differential Revision: https://phabricator.services.mozilla.com/D70880
2020-04-16 05:07:13 +00:00
Masayuki Nakano 73992aad12 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

--HG--
extra : moz-landing-system : lando
2020-04-16 04:38:40 +00:00
Masayuki Nakano aeeb323f57 Bug 1627175 - part 5: Get rid of `EditorBase::GetChildOffset()` and `EditorBase::GetNodeLocation()` r=m_kato
Their users should use `EditorDOMPoint` or something instead.

This patch cleans up `EditorBase::DoJoinNodes()` too because of their heavy
user.  It requires only joined nodes because `aParent` is used only for
removing `aContentToJoin`, but we now have `nsINode::Remove()` which does
not require parent node and never fails.

Depends on D70877

Differential Revision: https://phabricator.services.mozilla.com/D70878

--HG--
extra : moz-landing-system : lando
2020-04-16 01:21:17 +00:00
Masayuki Nakano 8b3995f814 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

--HG--
extra : moz-landing-system : lando
2020-04-15 16:05:30 +00:00
Masayuki Nakano 7d9227e497 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

--HG--
extra : moz-landing-system : lando
2020-04-15 15:55:20 +00:00
Masayuki Nakano 4cc133b568 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

--HG--
extra : moz-landing-system : lando
2020-04-15 15:27:38 +00:00
Masayuki Nakano 7ae8033ee1 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

--HG--
extra : moz-landing-system : lando
2020-04-15 13:55:36 +00:00
Cameron McCormack 9e9b510199 Bug 1629474 - Avoid warnings when initializing empty editors. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D70669

--HG--
extra : moz-landing-system : lando
2020-04-13 08:55:41 +00:00
Makoto Kato 67f4ec1ac0 Bug 1628192 - Use more const declarations on editor classes. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D70146

--HG--
extra : moz-landing-system : lando
2020-04-13 01:43:41 +00:00
Masayuki Nakano 39b3ec6675 Bug 1624007 - Don't check `IsSelectionRangeContainerNotContent()` for/in `GetElementOrParentElement*()` r=m_kato
We can relax about `GetElementOrParentElement*()` because they just return
`nullptr` when selection anchor is a `Document` node.

Additionally, this patch renames the internal APIs to the names similar to
modern DOM API.

Finally, this adds automated test for
`nsIHTMLEditor.getElementOrParentByTagName()`.

Differential Revision: https://phabricator.services.mozilla.com/D70152

--HG--
extra : moz-landing-system : lando
2020-04-09 10:10:36 +00:00
Masayuki Nakano 9f10b2a2a0 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

--HG--
extra : moz-landing-system : lando
2020-04-09 10:10:34 +00:00
Masayuki Nakano 32e8f30b27 Bug 1627573 - part 3: Get rid of `CSSEditUtils::GetSpecifiedCSSEquivalentToHTMLInlineStyleSet()` because of unused r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D70150

--HG--
extra : moz-landing-system : lando
2020-04-09 10:08:52 +00:00
Masayuki Nakano ea92dfc783 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

--HG--
extra : moz-landing-system : lando
2020-04-09 10:08:37 +00:00
Masayuki Nakano ac60892e7d Bug 1627573 - part 1: Remove unused `CSSEditUtils::IsCSSEquivalentToHTMLInlineStyleSet()` overload r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D70148

--HG--
extra : moz-landing-system : lando
2020-04-09 10:08:09 +00:00
Bogdan Tara a81dc418ef 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 1142d3105a 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

--HG--
extra : moz-landing-system : lando
2020-04-08 15:51:17 +00:00
Masayuki Nakano 2f8cf1135d Bug 1627573 - part 3: Get rid of `CSSEditUtils::GetSpecifiedCSSEquivalentToHTMLInlineStyleSet()` because of unused r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D70150

--HG--
extra : moz-landing-system : lando
2020-04-08 13:33:12 +00:00
Masayuki Nakano 024ef5568b 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

--HG--
extra : moz-landing-system : lando
2020-04-08 13:32:28 +00:00
Masayuki Nakano b07119c5f5 Bug 1627573 - part 1: Remove unused `CSSEditUtils::IsCSSEquivalentToHTMLInlineStyleSet()` overload r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D70148

--HG--
extra : moz-landing-system : lando
2020-04-08 12:08:02 +00:00
Mike Hommey ac5b6e6cd0 Bug 1628200 - Fix config/tests/test_mozbuild_reading.py. r=rstewart
Since the test goes through all moz.build files disregarding DIRS and
the conditions that may disable directories, in some cases, moz.builds
can fail to be evaluated properly because of missing variables in
config.status. This time (because it's not the first), it's
LLVM_DLLTOOL.

After fixing that, it turns out many of the files/directories pointed to
by Files() directives were removed or moved.

While here, make the test script python3-ready.

Differential Revision: https://phabricator.services.mozilla.com/D70157

--HG--
extra : moz-landing-system : lando
2020-04-09 00:24:29 +00:00
Boris Chiou 3830098b51 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

--HG--
extra : moz-landing-system : lando
2020-04-04 09:29:08 +00:00
Masayuki Nakano 5252248a15 Bug 1496320 - part 1: Make `TypeInState` clear "link style" when it detects caret coming from outside of current link r=m_kato
Only `TypeInState` stores last caret position.  So, only it can detect the
case caret is moved from outside of `<a href>` element and is now at start
or end of it.

Note that this patch does not assume `<a href>` has an empty text node with
another inline element.  If we supported it, the loop would be more complicated
and it's really unrealistic edge case.  Therefore, it's reasonable to ignore
the case.

And also this patch works with `ArrowUp`/`ArrowDown`/`PageUp`/`PageDown`
cases.  However, I have no idea to reject such cases.  But I guess that
it does not so bad behavior for users because caret does not moved in
a text node in `<a href>`.

Depends on D69479

Differential Revision: https://phabricator.services.mozilla.com/D69480

--HG--
extra : moz-landing-system : lando
2020-04-06 03:52:53 +00:00
Masayuki Nakano 6be7ff90be Bug 1496320 - part 0: Add automated test r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D69479

--HG--
extra : moz-landing-system : lando
2020-04-06 01:20:00 +00:00
Masayuki Nakano 8390d2e8bc Bug 1619914 - part 2: Mark transaction class methods and their caller methods as `MOZ_CAN_RUN_SCRIPT r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D69303

--HG--
extra : moz-landing-system : lando
2020-04-03 08:32:01 +00:00
Masayuki Nakano 3f95e60b07 Bug 1619914 - part 1: Make each transaction class grab their members with local variable before touching the DOM tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D69302

--HG--
extra : moz-landing-system : lando
2020-04-03 08:30:37 +00:00
Mihai Alexandru Michis 2f9f34de0e Backed out 2 changesets (bug 1619914) for causing gtest failures regarding TransactionManager.
CLOSED TREE

Backed out changeset d3816f82c0b9 (bug 1619914)
Backed out changeset 876b1031a6ae (bug 1619914)
2020-04-03 07:57:06 +03:00
Masayuki Nakano eb881aff87 Bug 1619914 - part 2: Mark transaction class methods and their caller methods as `MOZ_CAN_RUN_SCRIPT r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D69303

--HG--
extra : moz-landing-system : lando
2020-04-03 01:39:36 +00:00
Masayuki Nakano 5fb2cba97c Bug 1619914 - part 1: Make each transaction class grab their members with local variable before touching the DOM tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D69302

--HG--
extra : moz-landing-system : lando
2020-04-03 01:38:22 +00:00
Masayuki Nakano 54d761893e Bug 1625531 - Make `HTMLEditor::GetParagraphState()` not check selection r=m_kato
The selection validation should be checked in the constructor of
`ParagraphStateAtSelection` because
`EditorBase::IsSelectionRangeContainerNotContent()` needs edit action data.

Additionally, this patch adds a test for `nsIHTMLEditor.getParagraphState()`.

Differential Revision: https://phabricator.services.mozilla.com/D69316

--HG--
extra : moz-landing-system : lando
2020-04-03 00:49:43 +00:00
Masayuki Nakano 80c22749bc Bug 1625755 - Make `HTMLEditor::DoInsertHTMLWithContext()` check whether inserted content stays at expected point before modifying next insertion point r=m_kato
I'm still not sure how the crash occurs especially on Thunderbird.  However,
it could be possible if `pointToInsert` is modified with an orphan node (i.e.,
when `pointToInsert.GetContainer()` returns `nullptr`).  Therefore, this patch
makes it check whether the inserted node stays at expected position or not,
and if it's not, make it keep inserting next content nodes to previous position
because it must look like odd that inserting to different position.

Differential Revision: https://phabricator.services.mozilla.com/D69154

--HG--
extra : moz-landing-system : lando
2020-04-02 14:03:14 +00:00
Chris Peterson 589528cb8d Bug 1625834 - Replace MOZ_MUST_USE with [[nodiscard]] in editor. r=masayuki
Also move MOZ_MUST_USE before function declarations' specifiers and return type. While clang and gcc's __attribute__((warn_unused_result)) can appear before, between, or after function specifiers and return types, the [[nodiscard]] attribute must precede the function specifiers.

Differential Revision: https://phabricator.services.mozilla.com/D69315

--HG--
extra : moz-landing-system : lando
2020-04-02 05:43:31 +00:00
Masayuki Nakano 72cf6dc13d Bug 1624011 - Make constructor of `AlignStateAtSelection` not assert when there is no selection ranges r=m_kato
`AlignStateAtSelection` class is instantiated outside of editor class so that
we shouldn't make each user guarantee that there is selection range
(fortunately, the putting off cost is really low).

And as far as I tested, Blink and WebKit does not throw exception when
`Document.qeuryCommand*("justify*")` is called without selection ranges.
So, this patch also prevents exception in this situation.

Differential Revision: https://phabricator.services.mozilla.com/D68755

--HG--
extra : moz-landing-system : lando
2020-04-01 06:38:16 +00:00
Masayuki Nakano 37f3ac6663 Bug 1625633 - part 4: Move `WSType` into `WSRunScanner` to hide it from `HTMLEditor` r=m_kato
Now, `WSType` is used only by `WSRunScanner`, `WSRunObject` and `WSScanResult`.
We should hide this mysterious `enum` from other classes for making other
developers easier to understand.  Therefore, this patch moves `WSType` into
`WSScanResult` and share it with `WSRunScanner` with making them friends.

Depends on D68675

Differential Revision: https://phabricator.services.mozilla.com/D68676

--HG--
extra : moz-landing-system : lando
2020-03-31 15:46:56 +00:00
Masayuki Nakano 85e5b5f208 Bug 1625633 - part 3: Get rid of `WSFragment::mType` r=m_kato
Surprisingly, each value meaning of `WSFragment::mType` is different from
`WSFragment::mRightType` and `WSFragment::mLeftType`.  It uses only 3 bits,
`WSType::normalWS`, `WSType::leadingWS` and `WSType::trailingWS`.
According to the second `if` block of `WSRunScanner::GetRuns()`, the latter
2 values mean whether the fragment starts from and/or ends by a hard line.
And also, according to there, `normalWS` means the run is visible or not.
(However, according to the first `if` block, `Visible::Yes` might be set to
for empty fragment too, but I have no better idea of its name.)

Therefore, `mType & WSType::leadningWS` can call "is start of hard line",
`mType & WSType::trailingWS` can call "is end of hard line",
`mType == WSType::normalWS` can call "is visible and not edges of hard line"
and `mType & WSType::normalWS` can call "is not edges of hard line".

So, 3 `bool` members can represent all of their status.  Therefore, we should
get rid of this odd use case of `WSType`.

Depends on D68674

Differential Revision: https://phabricator.services.mozilla.com/D68675

--HG--
extra : moz-landing-system : lando
2020-03-31 12:15:53 +00:00
Masayuki Nakano d7856a0043 Bug 1625633 - part 2: Encapsulate `WSFragment::mLeftType` r=m_kato
Similarly, it indicates the previous content type of the fragment.

Depends on D68673

Differential Revision: https://phabricator.services.mozilla.com/D68674

--HG--
extra : moz-landing-system : lando
2020-03-30 09:22:21 +00:00
Masayuki Nakano 2135d8a449 Bug 1625633 - part 1: Encapsulate `WSFragment::mRightType` r=m_kato
It means why the `WSFragment` ends by.  I.e., it tells next content type of
the fragment.

Differential Revision: https://phabricator.services.mozilla.com/D68673

--HG--
extra : moz-landing-system : lando
2020-03-30 09:13:49 +00:00
Arthur Iakab 7e869be20c Backed out changeset 5e89020502f7 (bug 1625834) for causing build bustages
CLOSED TREE
2020-04-01 04:32:11 +03:00
Chris Peterson b469a9d9db Bug 1625834 - Replace MOZ_MUST_USE with [[nodiscard]] in editor. r=masayuki
Also move MOZ_MUST_USE before function declarations' specifiers and return type. While clang and gcc's __attribute__((warn_unused_result)) can appear before, between, or after function specifiers and return types, the [[nodiscard]] attribute must precede the function specifiers.

Differential Revision: https://phabricator.services.mozilla.com/D68747

--HG--
extra : moz-landing-system : lando
2020-03-30 06:45:40 +00:00
Emilio Cobos Álvarez bf84528d4f Bug 1098151 - Make empty editable blocks at least one line-height tall. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D68586

--HG--
extra : moz-landing-system : lando
2020-03-30 17:20:06 +00:00
Cosmin Sabou 0f415974f2 Backed out 2 changesets (bug 1098151) for refrest failures on overflow.html. CLOSED TREE
Backed out changeset 1893ec9ff2de (bug 1098151)
Backed out changeset 66e5251cc1e2 (bug 1098151)
2020-03-30 19:10:13 +03:00
Emilio Cobos Álvarez 0bd5a5bb55 Bug 1098151 - Make the test a bit more forgiving to pass on Mac, like the following test.
MANUAL PUSH: Fix orange.

CLOSED TREE
2020-03-30 18:03:10 +02:00
Emilio Cobos Álvarez f846b9b159 Bug 1098151 - Make empty editable blocks at least one line-height tall. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D68586

--HG--
extra : moz-landing-system : lando
2020-03-30 13:50:04 +00:00
Masayuki Nakano fc75118988 Bug 1618091 - Make editor dispatch `beforeinput` event when `Document.execCommand()` is called by addon r=smaug
Discussion in
* https://github.com/w3c/input-events/issues/91
* https://github.com/w3c/editing/issues/200

Web developers must want to handle `beforeinput` events which are caused by
addons because addon's behavior is exactly same as default action of browser
from point of view of web apps.

Differential Revision: https://phabricator.services.mozilla.com/D68528

--HG--
extra : moz-landing-system : lando
2020-03-30 01:47:53 +00:00
Simon Giesecke d3deabac64 Bug 1613363 - Maybe<T> should preserve trivial copy-constructability and destructability of T. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D68173

--HG--
extra : moz-landing-system : lando
2020-03-27 14:22:51 +00:00
Masayuki Nakano 46be890959 Bug 1623913 - Make `WSRunObject::PrepareToDeleteRangePriv()` invalidate child of `mScanStartPoint` before reusing it r=m_kato
I give up to write a clean patch for this bug with current design.  The trigger
is indeed bug 1618089, but this is a hidden regression of bug 1530649.

Starting from bug 1530649, `WSRunObject` started to use `EditorDOMPoint` for
storing the specified point.  And it may store (or only store) child node.
Therefore, if it points a text node and it's removed by
`WSRunObject::DeleteRange()`, the point becomes invalid even if its offset
is still valid.  Therefore, we should make `mStartScanPoint` and `mEndScanPoint`
forget their child before DOM tree change ideally, but it means that we need
to compute offset of the child every time before changing the DOM tree.  We
cannot accept this safest approach due to performance reason.

Therefore, this patch just invalidates `mStartScanPoint`'s child node only when
it's reused after the DOM tree is modified.

Differential Revision: https://phabricator.services.mozilla.com/D68048

--HG--
extra : moz-landing-system : lando
2020-03-26 05:53:22 +00:00
Masayuki Nakano 0ccabd567d Bug 1620504 - part 23: Fix some inconsistent coding style in editor r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D67132

--HG--
extra : moz-landing-system : lando
2020-03-22 10:46:39 +00:00
Masayuki Nakano 0fdd700a75 Bug 1620504 - part 22-9: Clean up warnings in HTMLTableEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D67131

--HG--
extra : moz-landing-system : lando
2020-03-22 09:17:31 +00:00
Dan Glastonbury 04870fc980 Bug 1623562 - Refactor allowPlugins to use BrowsingContext. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D67428

--HG--
extra : moz-landing-system : lando
2020-03-20 04:53:43 +00:00
Narcis Beleuzu 66477aeb36 Backed out changeset 20f1bb2d5bd2 (bug 1623562) for bc failures. CLOSED TREE 2020-03-20 05:42:41 +02:00
Masayuki Nakano 74a2dd84e9 Bug 1620504 - part 22-8: Clean up warnings in HTMLStyleEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D67130

--HG--
extra : moz-landing-system : lando
2020-03-19 12:48:42 +00:00
Dan Glastonbury d15761b621 Bug 1623562 - Refactor allowPlugins to use BrowsingContext. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D67428

--HG--
extra : moz-landing-system : lando
2020-03-20 02:16:12 +00:00
Masayuki Nakano 5c3bb8caf1 Bug 1620504 - part 22-7: Clean up warnings in HTMLInlineTableEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66986

--HG--
extra : moz-landing-system : lando
2020-03-19 12:29:51 +00:00
Emilio Cobos Álvarez 04828e3a4a Bug 253870 - Make disabled form controls selectable. r=masayuki,MarcoZ
This rejiggers a bit the way selection focus is handled so that focusing a
disabled form control with the mouse handles selection properly, and hides the
document selection and so on.

This matches the behavior of other browsers as far as I can tell.

Given now readonly and disabled editors behave the same, we can simplify a bit
the surrounding editor code.

Differential Revision: https://phabricator.services.mozilla.com/D66464

--HG--
extra : moz-landing-system : lando
2020-03-19 13:18:16 +00:00
Masayuki Nakano 5de3c1b41d Bug 1620504 - part 22-6: Clean up warnings in HTMLEditorObjectResizer.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66985

--HG--
extra : moz-landing-system : lando
2020-03-19 11:38:42 +00:00
Mirko Brodesser c602e0e0d7 Bug 1623333: part 4) Assert Selection's type is `eNormal` in relevant methods accessing `mFrameSelection`. r=smaug
Helps to determine which methods of `nsFrameSelection` are intended to
be called only for the `eNormal` Selection.

Driven by the idea that state of `nsFrameSelection` relevant only for
the `eNormal` Selection should later move to a `NormalSelection` class.

Differential Revision: https://phabricator.services.mozilla.com/D67445

--HG--
extra : moz-landing-system : lando
2020-03-19 11:08:58 +00:00
Mirko Brodesser 1c4dcdbce9 Bug 1623333: part 3) Assert `EditorBase::SelectionRefPtr` has type `eNormal`. r=masayuki
Simplifies reasoning about it.

Differential Revision: https://phabricator.services.mozilla.com/D67444

--HG--
extra : moz-landing-system : lando
2020-03-19 10:40:10 +00:00
Masayuki Nakano 1f9bbb50d0 Bug 1620504 - part 22-5: Clean up warnings in HTMLEditorDataTransfer.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66984

--HG--
extra : moz-landing-system : lando
2020-03-19 07:38:19 +00:00
Masayuki Nakano d7d4de3f48 Bug 1620504 - part 22-4: Clean up warnings in HTMLEditSubActionHandler.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66983

--HG--
extra : moz-landing-system : lando
2020-03-19 04:23:31 +00:00
Kagami Sascha Rosylight 90a7b434c7 Bug 1542521 - Join blocks with empty elements in between r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D67076

--HG--
extra : moz-landing-system : lando
2020-03-18 15:42:05 +00:00
Masayuki Nakano 6de9c5bcef Bug 1620504 - part 22-3: Clean up warnings in HTMLAnonymousNodeEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66981

--HG--
extra : moz-landing-system : lando
2020-03-18 12:43:40 +00:00
Masayuki Nakano ba0909ed8b Bug 1620504 - part 22-2: Clean up warnings in HTMLAbsPositionEditor.cpp r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66980

--HG--
extra : moz-landing-system : lando
2020-03-18 06:06:22 +00:00
Emilio Cobos Álvarez 664a546418 Bug 1618260 - Fix number input so that it honors overflow-clip-box-block. r=mats
This never worked, but it's more visible with the new form controls which have
more padding.

Make the anonymous div and co a pseudo-element, so that they inherit from the
<input> properly in all cases. This works for non-number inputs because the
editor root is a direct child of the <input>, but it doesn't for number inputs
because there's a flex wrapper in between.

This way overflow-clip-box: inherit does what we want. Reset the padding in the
inline direction, as the padding for <input type=number> applies to the arrow
boxes as well, and thus we'd double-apply it.

Differential Revision: https://phabricator.services.mozilla.com/D65271

--HG--
extra : moz-landing-system : lando
2020-03-18 09:21:44 +00:00
Masayuki Nakano 87dc9fcfe5 Bug 1620504 - part 22-1: Clean up warnings in `HTMLEditor.cpp` and `HTMLEditor.h` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66979

--HG--
extra : moz-landing-system : lando
2020-03-18 02:02:17 +00:00
Masayuki Nakano 9c977f38b7 Bug 1620504 - part 21: Clean up warnings in TextEditor r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66852

--HG--
extra : moz-landing-system : lando
2020-03-18 01:14:42 +00:00
Sean Feng 8af0b53201 Bug 1377999 - Make DocumentFragment to adapt the DOMArena changes r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D57707

--HG--
extra : moz-landing-system : lando
2020-03-17 14:53:46 +00:00
Makoto Kato 3399b1e3a5 Bug 1621827 - Skip spellchecker reftests on Android. r=masayuki
Actually GeckoView turns off spellchekcer, so it is unnecessary to run reftests
for spellchecker on GeckoView.

Differential Revision: https://phabricator.services.mozilla.com/D66540

--HG--
extra : moz-landing-system : lando
2020-03-12 09:37:25 +00:00
Masayuki Nakano 0913d9141d Bug 1620504 - part 20: Clean up warnings in SelectionState and related classes r=m_kato
This changes a lot of arguments from pointer to reference.

Differential Revision: https://phabricator.services.mozilla.com/D66851

--HG--
extra : moz-landing-system : lando
2020-03-16 09:57:58 +00:00
Mihai Alexandru Michis 58bc354025 Backed out changeset 9eeee9ec66d9 (bug 253870) for causing failures in browser_bug1261299.js
CLOSED TREE
2020-03-16 22:32:41 +02:00
Emilio Cobos Álvarez 9f28f89085 Bug 253870 - Make disabled form controls selectable. r=masayuki,MarcoZ
This rejiggers a bit the way selection focus is handled so that focusing a
disabled form control with the mouse handles selection properly, and hides the
document selection and so on.

This matches the behavior of other browsers as far as I can tell.

Given now readonly and disabled editors behave the same, we can simplify a bit
the surrounding editor code.

Differential Revision: https://phabricator.services.mozilla.com/D66464

--HG--
extra : moz-landing-system : lando
2020-03-16 17:41:07 +00:00
Emilio Cobos Álvarez a490bfb50c Bug 1620778 - Fix interaction of up/down keys with autocomplete and <input type=number>. r=masayuki,smaug
Differential Revision: https://phabricator.services.mozilla.com/D66011

--HG--
extra : moz-landing-system : lando
2020-03-16 15:50:31 +00:00
Ciure Andrei 032b6f7c89 Backed out 2 changesets (bug 1620778) for causing test_autocomplete_mac_caret.xhtml failures
Backed out changeset 66f97d1cf94a (bug 1620778)
Backed out changeset eda75d901f4c (bug 1620778)
2020-03-15 16:04:36 +02:00
Emilio Cobos Álvarez 749ef068e9 Bug 1620778 - Fix interaction of up/down keys with autocomplete and <input type=number>. r=masayuki,smaug
Differential Revision: https://phabricator.services.mozilla.com/D66011

--HG--
extra : moz-landing-system : lando
2020-03-15 12:11:09 +00:00
Masayuki Nakano 53e6bfdbf2 Bug 1620504 - part 19: Clean up warnings in WSRunScanner and WSRunObject r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66227

--HG--
extra : moz-landing-system : lando
2020-03-14 00:03:31 +00:00
Mirko Brodesser ec9cb4d8ef Bug 1622199: annotate `Selection::AddRangeAndSelectFramesAndNotifyListeners` with `MOZ_CAN_RUN_SCRIPT`. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D66759

--HG--
extra : moz-landing-system : lando
2020-03-13 15:46:13 +00:00
Masayuki Nakano 03baeb9f3d Bug 1620504 - part 18: Clean up warnings in SplitNodeTransaction r=m_kato
Depends on D66179

Differential Revision: https://phabricator.services.mozilla.com/D66226

--HG--
extra : moz-landing-system : lando
2020-03-11 06:13:26 +00:00
Masayuki Nakano 476081f03e Bug 1620504 - part 17: Clean up warnings in PlaceholderTransaction r=m_kato
Additionally, this makes some `nsIAbsorbingTransaction` methods infallible for
reducing unnecessary warnings.

Differential Revision: https://phabricator.services.mozilla.com/D66179

--HG--
extra : moz-landing-system : lando
2020-03-11 02:11:52 +00:00
Masayuki Nakano 5343ffcff8 Bug 1620504 - part 16: Clean up warnings in JoinNodeTransaction r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66178

--HG--
extra : moz-landing-system : lando
2020-03-10 14:20:22 +00:00
Masayuki Nakano b4e1588a17 Bug 1620504 - part 15: Clean up warnings in InsertTextTransaction r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66177

--HG--
extra : moz-landing-system : lando
2020-03-10 14:23:48 +00:00
Masayuki Nakano 605bafef7b Bug 1620504 - part 14: Clean up warnings in InsertNodeTransaction r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66176

--HG--
extra : moz-landing-system : lando
2020-03-10 14:17:53 +00:00
Masayuki Nakano 8371d74f49 Bug 1620504 - part 13: Clean up warnings in editor/txmgr r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D66175

--HG--
extra : moz-landing-system : lando
2020-03-10 13:59:36 +00:00
Masayuki Nakano 9c836ea324 Bug 1620504 - part 12: Clean up warnings in EditorEventListener r=m_kato
Depends on D65877

Differential Revision: https://phabricator.services.mozilla.com/D66174

--HG--
extra : moz-landing-system : lando
2020-03-10 07:54:29 +00:00
Ehsan Akhgari a96ff3afcf Bug 848644 - Add a crashtest based on the test case for the bug
Differential Revision: https://phabricator.services.mozilla.com/D66256

--HG--
extra : moz-landing-system : lando
2020-03-10 16:43:26 +00:00
Ehsan Akhgari e23c47bb28 Bug 745494 - Add a crashtest based on the test case for the bug
Differential Revision: https://phabricator.services.mozilla.com/D66254

--HG--
extra : moz-landing-system : lando
2020-03-10 16:28:57 +00:00
Masayuki Nakano 96f81476ca Bug 1620504 - part 11: Clean up warnings in editor command classes r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D65877

--HG--
extra : moz-landing-system : lando
2020-03-10 04:34:15 +00:00
Masayuki Nakano 0e68df00a5 Bug 1620504 - part 10: Clean up warnings in EditorBase r=m_kato
Depends on D65875

Differential Revision: https://phabricator.services.mozilla.com/D65876

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:24 +00:00
Masayuki Nakano be4d995f31 Bug 1620504 - part 9: Clean up warnings in EditAggregateTransaction r=m_kato
This also changes `mChildren` to array of `OwningNonNull` for removing
unnecessary `nullptr` checks.

Depends on D65874

Differential Revision: https://phabricator.services.mozilla.com/D65875

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:24 +00:00
Bogdan Tara db31d5b274 Backed out changeset 00ab51ea2723 (bug 1620778) for test_autocomplete_mac_caret.xhtml failures CLOSED TREE 2020-03-10 12:24:48 +02:00
Emilio Cobos Álvarez 49598c22ee Bug 1620778 - Fix interaction of up/down keys with autocomplete and <input type=number>. r=masayuki,smaug
Differential Revision: https://phabricator.services.mozilla.com/D66011

--HG--
extra : moz-landing-system : lando
2020-03-10 02:44:44 +00:00
Masayuki Nakano 9af3340409 Bug 1620504 - part 8: Clean up warnings in DeleteTextTransaction r=m_kato
Depends on D65873

Differential Revision: https://phabricator.services.mozilla.com/D65874

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:24 +00:00
Masayuki Nakano 994ae78613 Bug 1620504 - part 7: Clean up warnings in DeleteRangeTransaction r=m_kato
Depends on D65872

Differential Revision: https://phabricator.services.mozilla.com/D65873

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:23 +00:00
Masayuki Nakano 32ad653b14 Bug 1620504 - part 6: Clean up warnings in DeleteNodeTransaction r=m_kato
Depends on D65871

Differential Revision: https://phabricator.services.mozilla.com/D65872

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:23 +00:00
Masayuki Nakano 09bb52cb18 Bug 1620504 - part 5: Clean up warnings in ChangeAttributeTransaction r=m_kato
Depends on D65870

Differential Revision: https://phabricator.services.mozilla.com/D65871

--HG--
extra : moz-landing-system : lando
2020-03-09 14:57:23 +00:00
Masayuki Nakano 20296adfc3 Bug 1620504 - part 4: Clean up warnings in CreateElementTransaction r=m_kato
Depends on D65869

Differential Revision: https://phabricator.services.mozilla.com/D65870

--HG--
extra : moz-landing-system : lando
2020-03-09 04:53:55 +00:00
Masayuki Nakano c1fc16a11b Bug 1620504 - part 3: Clean up warnings in CompositionTransaction r=m_kato
Depends on D65867

Differential Revision: https://phabricator.services.mozilla.com/D65869

--HG--
extra : moz-landing-system : lando
2020-03-09 07:14:19 +00:00
Masayuki Nakano c6ab66e5b6 Bug 1620504 - part 2: Clean up warnings in ChangeStyleTransaction r=m_kato
Depends on D65866

Differential Revision: https://phabricator.services.mozilla.com/D65867

--HG--
extra : moz-landing-system : lando
2020-03-09 03:15:02 +00:00
Masayuki Nakano 9748db36aa Bug 1620504 - part 1: Clean up warnings in CSSEditUtils r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D65866

--HG--
extra : moz-landing-system : lando
2020-03-09 01:58:24 +00:00
Masayuki Nakano 7bd48e79b8 Bug 1618906 - Make `HTMLEditor` stop handling anything if container of a range in `Selection` is not a content node r=m_kato
It's valid thing that a container of a `Range` of `Selection` is not a content
node.  Actually, it can be a `Document` node.  But it's illegal case for
editor.  So, if `HTMLEditor` meets such case, it does not need to do anything.

This patch makes that if `HTMLEditor` meets the situation at very first time
of public edit action method, it returns "OK" for avoiding new exception case.
Otherwise, i.e., it's an XPCOM API or meeting such situation after a DOM
mutation, returns error.

Differential Revision: https://phabricator.services.mozilla.com/D65278

--HG--
extra : moz-landing-system : lando
2020-03-05 04:39:35 +00:00
Mark Banner 15cfe23b88 Bug 1620542 - Automatically fix ESLint errors in .eslintrc.js files. r=mossop
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D65703

--HG--
extra : moz-landing-system : lando
2020-03-07 10:09:44 +00:00
Boris Zbarsky c6c4a83796 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

--HG--
extra : moz-landing-system : lando
2020-03-06 09:57:45 +00:00
Masayuki Nakano 85a0bd9a61 Bug 1620135 - Clean up trivial constructor and destructor under libeditor r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D65448

--HG--
extra : moz-landing-system : lando
2020-03-06 04:38:25 +00:00
Mirko Brodesser 4be580237d Bug 1619617: part 1) Annotate `RemoveRangeAndUnselectFramesAndNotifyListeners` with `MOZ_CAN_RUN_SCRIPT`. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D65511

--HG--
extra : moz-landing-system : lando
2020-03-06 12:03:23 +00:00
Coroiu Cristina e3e3fb9577 Backed out changeset 97a8f04641de (bug 1618906) on request by masayuki 2020-03-05 06:36:44 +02:00
Masayuki Nakano ed016cbd72 Bug 1618906 - Make `HTMLEditor` stop handling anything if container of a range in `Selection` is not a content node r=m_kato
It's valid thing that a container of a `Range` of `Selection` is not a content
node.  Actually, it can be a `Document` node.  But it's illegal case for
editor.  So, if `HTMLEditor` meets such case, it does not need to do anything.

This patch makes that if `HTMLEditor` meets the situation at very first time
of public edit action method, it returns "OK" for avoiding new exception case.
Otherwise, i.e., it's an XPCOM API or meeting such situation after a DOM
mutation, returns error.

Differential Revision: https://phabricator.services.mozilla.com/D65278

--HG--
extra : moz-landing-system : lando
2020-03-04 09:14:44 +00:00
Simon Giesecke dd65843b46 Bug 1613985 - Use default for equivalent-to-default constructors/destructors in editor. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D65287

--HG--
extra : moz-landing-system : lando
2020-03-04 09:10:03 +00:00
Masayuki Nakano 9a2dc9a516 Bug 1619647 - Make `WSRunObject::ReplacePreviousNBSPIfUnnecessary()` check `IsEndOfContainer()` before calling `IsCharNBSP()` r=m_kato
I forgot to add this check only here. (I also checked again for all similar
methods' callers.)  So, if the point is end of a text node (i.e., offset equals
its length), `IsCharNBSP()` refers wrong address.

I cannot find a way to reproduce this crash, therefore, this patch does not
have new crashtest.

(Additionally, this corrects the misspell in the method name.)

Differential Revision: https://phabricator.services.mozilla.com/D65279

--HG--
extra : moz-landing-system : lando
2020-03-04 08:15:15 +00:00
Masayuki Nakano 8bdbe3afd6 Bug 1619852 - Fix the mistake in `HTMLEditor::HandleDeleteCollapsedSelectionAtTextNode()` r=m_kato
The check was written with `NS_ASSERTION`, but I realized that it's possible
case with mutation event listeners.  Therefore, I changed it to `if` and
`return`, but I forgot to revert the sign of inequality.

Differential Revision: https://phabricator.services.mozilla.com/D65280

--HG--
extra : moz-landing-system : lando
2020-03-04 06:22:23 +00:00
Masayuki Nakano dace885161 Bug 1449831 - part 4: Add automated tests for `InputEvent.getTargetRanges()` r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D64731

--HG--
extra : moz-landing-system : lando
2020-03-03 03:41:16 +00:00
Masayuki Nakano f5af8613ec Bug 1449831 - part 3: Make editor set target ranges of `beforeinput` event if the editor instance is an `HTMLEditor` r=smaug
In most cases, `InputEvent.getTargetRange()` of `beforeinput` event should
return `Selection` ranges at dispatching the event.

This patch also handles special cases.
* composition change - target range should be the previous composition string
  which will be replaced with new composition string.
* replace text - target range should be the replace range.  This is used by
  spellchecker.
* drop - target range should be the drop point.

However, the other exception is not handled by this patch.  That is, deletions.
The target range(s) should be the range(s) which will be removed.  In most
cases, they also matches selection ranges, but may be extended to:
* surrogate pair boundary
* grapheme cluster boundary like complex emoji
* word/line deletion deletion
* `Backspace` or `Delete` from collapsed selection
* to end of unnecessary whitespaces

For supporting these cases, we need to separate
`HTMLEditor::HandleDeleteSelection()` and its helper methods and helper class
to range computation part and modifying the DOM tree part.  Of course, it
requires big changes and `InputEvent.getTargetRanges()` may be important for
feature detection of `beforeinput` event so that we should put off the big
changes to bug 1618457.

Differential Revision: https://phabricator.services.mozilla.com/D64730

--HG--
extra : moz-landing-system : lando
2020-03-03 03:39:26 +00:00
Masayuki Nakano 0af4f88f9d Bug 1449831 - part 2: Make `InputEventOptions` be able to take target ranges r=smaug
`InputEventOptions` should be able to take target ranges for `beforeinput`
event.  However, it requires to include `StaticRange.h` from `nsContentUtils.h`
even though most `nsContentUtils.h` users don't need it.  Therefore, this patch
moves it from `nsContentUtils.h` to new header file.

And makes `nsContentUtils::DispatchInputEvent()` moves the target ranges
from `InputEventOptions` to `InternalEditorInputEvent`.

Differential Revision: https://phabricator.services.mozilla.com/D64729

--HG--
extra : moz-landing-system : lando
2020-03-03 03:38:43 +00:00
Masayuki Nakano 3406e1e208 Bug 1618089 - part 8: Make `WSRunObject::PrepareToDeleteRange()` take 2 pointers of `EditorDOMPoint` r=m_kato
Note that the input can be `EditorDOMPointInText`, but modified range may start
and/or end with different container.  Therefore, it needs to take
`EditorDOMPoint` rather than `EditorDOMPointInText`.

Differential Revision: https://phabricator.services.mozilla.com/D64339

--HG--
extra : moz-landing-system : lando
2020-03-03 04:35:26 +00:00
Masayuki Nakano c5eeb32fe1 Bug 1618089 - part 7: Make some related methods use `EditorDOMPointInText` for arguments or result r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D64338

--HG--
extra : moz-landing-system : lando
2020-03-03 01:15:38 +00:00
Masayuki Nakano 8ca8aa8311 Bug 1618089 - part 6: Get rid of `WSRunScanner::WSPoint` r=m_kato
With adding new type, `EditorDOMPointInText` whose container is
`RefPtr<dom::Text>`, we can replace `WSRunScanner::WSPoint` and make
`WSRunScanner` and `WSRunObject` can use its various API.  Then, this
patch adds a lot of `NS_ASSERTION`s which can detect existing bugs.

Note that it may look like redundant that `EditorDOMPointInText::IsChar*()`
requires `EditorDOMPointInText::IsEndOfContainer()` check before that.
However, this makes what the callers check clearer.

Differential Revision: https://phabricator.services.mozilla.com/D64336

--HG--
extra : moz-landing-system : lando
2020-03-02 10:08:59 +00:00
Masayuki Nakano 2d12d4abab Bug 1618089 - part 5: Make `WSRunObject::GetASCIIShitespacesBounds()` return 2 `EditorDOMPoint`s r=m_kato
Before changing `WSPoint` to `EditorDOMPointBase`, we need to change some
methods which are helped by the methods returning `WSPoint`.

Differential Revision: https://phabricator.services.mozilla.com/D64335

--HG--
extra : moz-landing-system : lando
2020-03-02 07:35:49 +00:00
Masayuki Nakano 3b631553d3 Bug 1618089 - part 4: Make `WSRunObject` instantiators guarantee `WSRunObject::mHTMLEditor` lifetime r=m_kato
Some script run methods of `WSRunObject` guarantee the lifetime of its
`mHTMLEditor`.  However, they should be guaranteed by the instantiators
(all of them are `HTMLEditor`).

Differential Revision: https://phabricator.services.mozilla.com/D64334

--HG--
extra : moz-landing-system : lando
2020-03-02 07:35:37 +00:00
Masayuki Nakano febc3dd7e5 Bug 1618089 - part 3: Rename `WSRunScanner::Get(Previous|Next)CharPoint(const WSPoint&)` to `WSRunScanner::Get(Previous|Next)CharPointFromPointInText()` r=m_kato
For making it easier to review the following patches, rename the overloads
of `WSRunScanner::Get(Previous|Next)CharPoint()` which take `WSPoint`.

Differential Revision: https://phabricator.services.mozilla.com/D64333

--HG--
extra : moz-landing-system : lando
2020-03-02 07:35:34 +00:00
Masayuki Nakano abaebf7909 Bug 1618089 - part 2: Rename `WSRunScanner::Get(Next|Previous)CharPointInternal()` to `WSRunScanner::LookFor(Next|Previous)CharPointWithinAllTextNodes()` r=m_kato
They are fallback methods when the container of given point is not a text node
in `WSRunScanner::mNodeArray`, and then, looks for a text node for the given
point.

Differential Revision: https://phabricator.services.mozilla.com/D64332

--HG--
extra : moz-landing-system : lando
2020-03-02 07:33:56 +00:00
Masayuki Nakano b93a2782a0 Bug 1618089 - part 1: Redsign `EditorDOMPointBase` with template methods r=m_kato
Some methods of `EditorDOMPointBase` assumes the container node type is
`nsINode`.  However, it's not good for reuse.  Therefore, this patch makes
most methods of them be template methods.

Differential Revision: https://phabricator.services.mozilla.com/D64331

--HG--
extra : moz-landing-system : lando
2020-03-02 07:33:23 +00:00
Masayuki Nakano 38171fabc5 Bug 1616257 - part 5: Make `WSRunObject` stop keeping `HTMLEditor` as a friend class r=m_kato
With the preceding patches, `HTMLEditor` mostly does not need to be a friend of
`WSRunObject`.

This patch stops it, and adding some self-documented methods for checking
`mStartReason` and `mEndReason`, and also adding self-documented alternative
methods of `GetStartReasonContent()` and `GetEndReasonContent()`.

Differential Revision: https://phabricator.services.mozilla.com/D63616

--HG--
extra : moz-landing-system : lando
2020-02-25 23:19:45 +00:00
Masayuki Nakano 4ef76b0f91 Bug 1616257 - part 4: Use content of `WSScanResult` instead of reason content of `WSRunScanner` if they are same r=m_kato
When `WSScanResult::ReachedCurrentBlockBoundary()` returns true, reached content
of backward scan result is same as the scanner's `GetStartReasonContent()` and
reached content of forward scan result is same as the scanner's
`GetEndReasonContent()`.  For making code in the blocks of
`if (foo.ReachedCurrentBlockBoundary())` easier to understand, we should use
the result's content.

Differential Revision: https://phabricator.services.mozilla.com/D63615

--HG--
extra : moz-landing-system : lando
2020-02-25 12:12:30 +00:00
Masayuki Nakano f5407e4219 Bug 1616257 - part 3: Make `WSRunScanner::NextVisibleNode()` and `WSRunScanner::PriorVisibleNode()` return stack only class instance which storing the visible node as `nsIContent` r=m_kato
They are really messy because they take a lot of out parameters, and these
out parameter meaning is really unclear.  Therefore, they should return
a stack only class instance which explain the meaning with getter methods.
And also it should store the result node as `nsIContent`.

And also this patch adds static methods for them for their users which don't
need `WSRunScanner` instance.

Differential Revision: https://phabricator.services.mozilla.com/D63613

--HG--
extra : moz-landing-system : lando
2020-02-25 12:10:04 +00:00
Masayuki Nakano 6382dae45f Bug 1616257 - part 2: Change `mStartReasonNode` and `mEndReasonNode` to `nsIContent` r=m_kato
Now, all setter guarantee that they are subclass instances of `nsIContent`.

Differential Revision: https://phabricator.services.mozilla.com/D63612

--HG--
extra : moz-landing-system : lando
2020-02-25 09:31:18 +00:00
Masayuki Nakano ca9705cc2b Bug 1616257 - part 1: Redesign `WSRunScanner::GetWSBoundingParent()` r=m_kato
Its result has 4 meanings:

1. an editable block element for container of `mScanStartPoint`.
2. a topmost inline editable content for container of `mScanStartPoint` if there
is no editable block parent.
3. container of `mScanStartPoint` if it's a block (either editable or
non-editable).
4. container of `mScanStartPoint` if its parent is not editable and a inline
content.

#1, #2 and editable case of #3 make sense because the results are topmost
editable content in current context.  On the other hand, non-editable case
of #3 and #4 are caused by unexpected wrong fallback code.

So, let's make it always returns the content in the former meaning and if
the caller needs the latter one, they should use the container by themselves.
Therefore, for making what's the start of the search, this patch also makes
new method take start content instead of hiding `mScanStartPoint` from the
callers.

Differential Revision: https://phabricator.services.mozilla.com/D63610

--HG--
extra : moz-landing-system : lando
2020-02-25 08:58:43 +00:00
Kris Maglione c31aa68fb4 Bug 1535617: Part 2 - Clear weak references for most cycle collected objects on unlink. r=mccr8
This covers most cycle collected objects which support weak references, but
not the ones which inherit from a cycle collected class and don't do any cycle
collection on their own.

Differential Revision: https://phabricator.services.mozilla.com/D63962

--HG--
extra : moz-landing-system : lando
2020-02-25 19:44:39 +00:00
Masayuki Nakano 5f656bfdd1 Bug 1616539 - Make `TextEditor::OnDrop()` compare newly focused element with active editing host r=m_kato
Currently, it checks whether proper element gets focus as expected with
`nsFocusManager::GetFocusedElement()`, but it returns globally focused element.
I.e., it may return different document's element or `nullptr` if application
itself is inactive.

The purpose of the focus check is, `HTMLEditor` can modify contents only in
active editing host.  Therefore, comparing with
`HTMLEditor::GetActiveEditingHost()` is better and simpler for here.

Differential Revision: https://phabricator.services.mozilla.com/D63581

--HG--
extra : moz-landing-system : lando
2020-02-25 01:28:01 +00:00
Sylvestre Ledru ca6530131a Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan,kvark
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D63787

--HG--
extra : moz-landing-system : lando
2020-02-24 15:33:38 +00:00
Masayuki Nakano 1110bedb45 Bug 1613830 - Add `nsINode::GetAsElementOrParentElement()` r=smaug
This patch assumes that only element node can have content node.  I.e., we
won't hit the following `MOZ_ASSERT`:

```
Element* element = nullptr;
nsIContent* content = aContent;
while (content) {
  if (content->IsElement()) {
    element = content->AsElement();
    break;
  }
  content = content->GetParent();
}
MOZ_ASSERT(!content || content == element || content->GetParent() == element);
```

Differential Revision: https://phabricator.services.mozilla.com/D63308

--HG--
extra : moz-landing-system : lando
2020-02-21 02:47:05 +00:00
Simon Giesecke 9350e6b741 Bug 1613985 - Use MOZ_COUNTED_DEFAULT_CTOR_*/MOZ_COUNTED_DTOR_* macros. r=froydnj
This removes the need for explicit #ifdef NS_BUILD_REFCNT_LOGGING without
introducing user-defined destructors when it is not defined.

Also, some uses of virtual for declaring destructors are replaced by the
appropriate override declaration through these changes.

Differential Revision: https://phabricator.services.mozilla.com/D62604

--HG--
extra : moz-landing-system : lando
2020-02-20 11:40:14 +00:00