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

9907 Коммитов

Автор SHA1 Сообщение Дата
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
Dorel Luca d5f9df8ee1 Backed out 2 changesets (bug 1613985) for Build bustage on Windows2012. CLOSED TREE
Backed out changeset fd177b40b561 (bug 1613985)
Backed out changeset fb6d62b7f28d (bug 1613985)
2020-02-19 22:22:41 +02:00
Simon Giesecke 59b23375c0 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-19 18:05:38 +00:00
Makoto Kato 1aadd31886 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

--HG--
extra : moz-landing-system : lando
2020-02-19 05:37:13 +00:00
Mirko Brodesser f170973369 Bug 1615581: part 1) Rename `TableSelection` to `TableSelectionMode`. r=jfkthame
See part 2) why this is necessary.

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

--HG--
extra : moz-landing-system : lando
2020-02-18 12:28:45 +00:00
Masayuki Nakano a5deb4a2c5 Bug 1611374 - Disallow nested `Document.execCommand()` calls in Nightly and early Beta r=smaug
Chrome does not allow nested `Document.execCommand()` calls:
https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/editing/commands/document_exec_command.cc;l=75;drc=301e5d079a1b4c29c5b17574d0470e6db7370acc

On the other hand, Safari (and Firefox) allows it.  However, it's worthwhile to
follow Chrome's behavior.

This patch makes `Document::ExecCommand()` return `false` when it's called
while running another `Document::ExecCommand()` call on Nightly and early Beta.
This is exactly same behavior, and we should watch broken web apps reports
for a while before riding this on the train.

And this patch sets the pref to `true` when all crash tests under
`editor/libeditor/crashtests` which depend on nested calls of `execCommand` run
since same things may be reproducible with other DOM APIs.

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

--HG--
extra : moz-landing-system : lando
2020-02-15 19:17:00 +00:00
Masayuki Nakano fe30c6ad87 Bug 1601532 - Make `test_bug1332876.html` synthesizes on `<span>` element in the `<iframe>` rather than on the `<iframe>` r=smaug
The timeout is caused by that `iframe.contentWindow` may not receive `click`
event (as far as I've tested, neither `mousedown` nor `mouseup` is fired in
that case) when synthesizing a mouse click over the `<iframe>` element with
parent window.  However, if it synthesizes mouse click with `<span>` element
in the `<iframe>` and `iframe.contentWindow`, `click` event is always fired.

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

--HG--
extra : moz-landing-system : lando
2020-02-16 14:54:11 +00:00
Masayuki Nakano 58a034fe7d Bug 1588688 - part 8: Make `HTMLEditor::DoInsertHTMLWithContext()` and its helper methods use array of `nsIContent` rather than `nsINode` r=m_kato
Finally, this patch makes `HTMLEditor::DoInsertHTMLWithContext()` stop using
array of `nsINode`.

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

--HG--
extra : moz-landing-system : lando
2020-02-14 07:16:27 +00:00
Masayuki Nakano 839d86eece Bug 1588688 - part 7-10: Make `ReplaceOrphanedStructure()` call `CollectListAndTableRelatedElementsAt()` by itself r=m_kato
For guaranteeing the meaning of `aArrayOfListAndTableRelatedElements`,
`ReplaceOrphanedStructure()` should call
`CollectListAndTableRelatedElementsAt()` by itself rather than taking as
a parameter.

Then, what it does becomes a little bit clearer.  Therefore, this patch renames
`ReplaceOrphanedStructure()` to `EnsureBeginsOrEndsWithValidContent()` and
`DiscoverPartialListsAndTables()` to `GetMostAncestorListOrTableElement()`,
and adds a lot of comments.

As far as I've tested by my hand, the behavior is not changed even though
it's really buggy in some cases.  We should fix them after writing automated
tests in another bug.

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

--HG--
extra : moz-landing-system : lando
2020-02-14 05:40:37 +00:00
Masayuki Nakano d389b66f9c Bug 1588688 - part 7-9: Make `ReplaceOrphanedStructure()` call `DiscoverPartialListsAndTables()` by itself r=m_kato
For guaranteeing the meaning of list or `<table>` element in
`ReplaceOrphanedStructure()`, it should call `DiscoverPartialListsAndTables()`.
Then, their meaning becomes clearer than coming from its parameter.

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

--HG--
extra : moz-landing-system : lando
2020-02-14 03:27:16 +00:00
Masayuki Nakano 7656ed2a64 Bug 1588688 - part 7-8: Encapsulate the first and last node fixer into a stack only class r=m_kato
In these patches, we know that there are a lot of helper methods to fix node
list which is created by `SubtreeContentIterator` and will be inserted into
the editor's DOM tree, and they are not used by other places.  So, we can
encapsulate them into a stack only class for making their usage clearer.

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

--HG--
extra : moz-landing-system : lando
2020-02-14 02:59:32 +00:00
Masayuki Nakano 6725ec2b0e Bug 1601585 - Add a WPT to test selection in a `contenteditable` element with changing `designMode` r=smaug
We should port `editor/libeditor/tests/test_bug622371.html` to WPT.  It was
written for compatibility issue with CKEditor 9 years ago and Gecko and
Blink behave as exactly same.  Only Safari normalize the selection into the
end of the text node, but Safari also does not change selection at turning
on/off `designMode` too.  Therefore, all browser engines have implicit
agreement at least that selection shouldn't be changed at changing
`designMode`.

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

--HG--
extra : moz-landing-system : lando
2020-02-15 08:18:20 +00:00
Masayuki Nakano 55963fc5b9 Bug 1588688 - part 7-7: Clean up `HTMLEditor::ReplaceOrphanedStructure()` r=m_kato
Unfortunately, even with this cleaning up, I don't understand what it does
because existing comment and what actually it does seem different.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 09:06:44 +00:00
Masayuki Nakano 784573927c Bug 1588688 - part 7-6: Clean up `HTMLEditor::DiscoverPartialListsAndTables()` r=m_kato
`HTMLEditor::DiscoverPartialListsAndTables()` can be static and we can make
its definition simpler.  However, due to the odd logic, I'm still not sure
what it does.  I'll update it after cleaning up its result user,
`HTMLEditor::ReplaceOrphanedStructure()`.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 08:42:22 +00:00
Masayuki Nakano 817ac3e98e Bug 1588688 - part 7-5: Clean up `HTMLEditor::CreateListOfNodesToPaste()` r=m_kato
`HTMLEditor::CreateListOfNodesToPaste()` can be static and it does not need to
take `DocumentFragment` as an argument if the range is always specified.
For avoiding 2 input path to specify a range, we should make it take only
range boundaries and array of nodes to return the collected nodes.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 04:49:43 +00:00
Masayuki Nakano 3887f29cbc Bug 1588688 - part 7-4: Clean up `HTMLEditor::GetListAndTableParents()` r=m_kato
It can be a static method and does not make sense taking array of nodes as
input argument because it refers only first or last node of the array.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 02:56:25 +00:00
Masayuki Nakano 58164b1ddf Bug 1588688 - part 7-3: Clean up `HTMLEditor::ScanForTableStructure()` r=m_kato
The name does not explain what it does.  Additionally, it should be same style
as `HTMLEditor::IsReplaceableListElement()` for making it easier to understand.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 02:55:53 +00:00
Masayuki Nakano 12ce2b955c Bug 1588688 - part 7-2: Pick list element handling part of `HTMLEditor::ScanForListAndTableStructure()` up r=m_kato
`HTMLEditor::ScanForListAndTableStructure()` is complicated because it has
2 modes, one is for handling list element, the other is for handling table
element.  This patch splits them as 2 methods.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 02:55:20 +00:00
Masayuki Nakano 382f61920c Bug 1588688 - part 7-1: Sort out `HTMLEditor::ScanForListAndTableStructure()` r=m_kato
Helper methods of `HTMLEditor::DoInsertHTMLWithContext()` which uses array of
`nsINode` is really messy and we can make them simpler.  This is first
preparation of a series of refactoring patches of them.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 02:54:47 +00:00
Simon Giesecke b50347f917 Bug 1611415 - Prefer using std::move over forget. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D60980

--HG--
extra : moz-landing-system : lando
2020-02-13 14:38:48 +00:00
Masayuki Nakano ed10bfc397 Bug 1588688 - part 6: Make `HTMLEditor::CollapseAdjacentTextNodes()` use array of `dom::Text` rather than `nsINode` r=m_kato
`HTMLEditor::CollapseAdjacentTextNodes()` collects editable text nodes first so
that the array can be array of `dom::Text`.  Additionally, using
`DOMSubtreeIterator` instead of `ContentSubtreeIterator` makes the code easier
to understand.

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

--HG--
extra : moz-landing-system : lando
2020-02-13 02:54:45 +00:00
Masayuki Nakano a25e33d6f2 Bug 1588688 - part 5: Make `HTMLEditor::HandleDeleteNonCollapsedSelection()` use array of `nsIContent` instead of `nsINode` r=m_kato
Same as the previous patch, the content iterator won't return non-`nsIContent`
node.  Therefore, `HTMLEditor::HandleDeleteNonCollapsedSelection()` can treat
it with array of `nsIContent`.

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

--HG--
extra : moz-landing-system : lando
2020-02-12 05:56:32 +00:00
Masayuki Nakano 1fb4eedd2a Bug 1588688 - part 4: Make `HTMLEditor::RemoveEmptyNodesIn()` use array of `nsIContent` rather than `nsINode` r=m_kato
The content iterators always return `nsIContent` even though the result of
`GetCurrentNode()` is `nsINode*`.  Therefore, we can make
`HTMLEditor::RemoveEmptyNodesIn()` use array of `nsIContent` instead of
array of `nsINode`.

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

--HG--
extra : moz-landing-system : lando
2020-02-12 05:53:34 +00:00
Masayuki Nakano 20807215a4 Bug 1588688 - part 3: Make `HTMLEditor::CollectEditTargetNodes()` and its users use array of `nsIContent` rather than `nsINode` r=m_kato
Unless editor needs to treat document node, all nodes are sub-class of
`nsIContent`.  Therefore, we can make `HTMLEditor::CollectEditTargetNodes()`
return array of `nsIContent` instead of array of `nsINode`.

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

--HG--
extra : moz-landing-system : lando
2020-02-12 05:52:30 +00:00
shindli 91aa0518dd 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 f604a47fa5 Bug 1611415 - Applied FixItHints from mozilla-non-std-move. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D60980

--HG--
extra : moz-landing-system : lando
2020-02-12 17:24:41 +00:00
Masayuki Nakano 4ac984054a Bug 1588688 - part 2: Remove `UniqueFunctor` and `EmptyEditableFunctor` r=m_kato
This patch creates `DOMIterator::AppendNodesToArray()` which takes pointer to
a functor and removes `DOMIterator::AppendList()`.  This allows callers to use
lambda rather than the remaining functors, `UniqueFunctor` and
`EmptyEditableFunctor`, which are used only once.  Therefore, writing them as
lambda makes the callers easier to understand.  Finally, we can remove those
functor classes' base class, `BoolDomIterFunctor` too.

Note that this patch avoids using `std::function` even though if we'd use it
as functor, we could make each lambda can capture variables and each lambda
does not need to convert to point of a function with `+` operator explicitly.
The reason is, `std::function` is too slow if `AppendNodesToArray()` is called
in a hot path.

Depends on D61968

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

--HG--
extra : moz-landing-system : lando
2020-02-11 23:29:59 +00:00
Masayuki Nakano fc9618eabb Bug 1588688 - part 1: Remove `TrivialFunctor` and `BRNodeFunctor` for `DOMIterator` r=m_kato
`TrivialFunctor` returns always true for `DOMIterator::AppendList()`.  That
means that `DOMIterator` appends all nodes which are listed up by
`ContentIterator`.  So, it's reasonable to make `DOMIterator` have
`AppendAllNodesToArray()` because it's more self-documented and faster.

Additionally, `BRNodeFunctor` always returns true when nodes with which
`HTMLBRElement::FromNode()` returns non-nullptr.  So, we can make
`AppendAllNodesToArray()` a template class which just checks whether
every nodes are specific node type.

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

--HG--
extra : moz-landing-system : lando
2020-02-11 06:52:32 +00:00
Masayuki Nakano e388597a7d Bug 1611360 - part 2: Change `test_bug1151186.html` to mochitest-plain r=smaug
Now, we have `SpecialPowers` to use `DOMWindowUtils`.  Therefore,
`test_bug1151186.html` can be a mochitest-plain and it's better since the
test checks behavior on web apps.

Depends on D62396

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

--HG--
rename : widget/tests/test_bug1151186.html => editor/libeditor/tests/test_bug1151186.html
extra : moz-landing-system : lando
2020-02-11 11:47:03 +00:00
Emilio Cobos Álvarez e5463ecf7f Bug 1614718 - Add two missing includes to unbust thunderbird.
Differential Revision: https://phabricator.services.mozilla.com/D62474

--HG--
extra : moz-landing-system : lando
2020-02-11 19:18:45 +00:00
Masayuki Nakano 6bdd4b260e Bug 1612477 - part 2: Remove `nsIDocumentStateListener.NotifyDocumentCreated()` r=m_kato
There is no meaningful listener of this so that we can get rid of it.

Depends on D61357

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

--HG--
extra : moz-landing-system : lando
2020-02-04 06:19:55 +00:00
Masayuki Nakano cc2af30635 Bug 1612477 - part 1: Make `ComposerCommandsUpdater` not inherit `nsIDocumentStateListener` r=m_kato
This patch makes `EditorBase::NotifyDocumentListeners()` notify
`ComposerCommandsUpdater` via `HTMLEditor::mComposerCommandsUpdater` directly.
Therefore, `ComposerCommandsUpdater` can stop inheriting
`nsIDocumentStateListener`.

Note that this patch also makes `ComposerCommandsUpdater::UpdateCommandGroup()`
not take `nsAString` as its parameter because inlinning the
`nsIDocumentStateListener` requires `ComposerCommandsUpdater.h` to include
`nsAString.h`, but it's redundant and `UpdateCommandGroup()` just compares
it with literal strings.  Therefore, using `enum class` for specifying command
group is faster.

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

--HG--
extra : moz-landing-system : lando
2020-02-03 07:35:44 +00:00
Emilio Cobos Álvarez 873a349556 Bug 1611701 - Tweak NODE_IS_EDITABLE flag handling for NAC so that it works consistently for <input type=number>. r=bzbarsky,masayuki,whimboo
I thought this would fix <input type=number style="user-select: none">, but
turns out it doesn't.

<input type=number> doesn't have the editor root as a root of the anonymous
subtree, so the current hack wouldn't work, as the anon root wouldn't have the
editable flag. So tweak the code a bit to handle stuff in a simpler way than
setting the flags after the fact, and set the NAC-root flag earlier to avoid
the mOuterWrapper->AppendChildTo(root) call forgetting about root's flags.

I had to tweak one AccessibleCaret test, but that's because it uses <textarea>
with user-select: none, and our behavior there is not particularly sane. It just
happened to work because that test-case also had a bunch of contenteditable
elements, and we stop matching this rule:

  https://searchfox.org/mozilla-central/rev/220a3bd6063fcbe5ca50e88dcabdc7dee0aca448/layout/style/contenteditable.css#22

Because the anonymous div now properly matches :-moz-read-write, which made the
rule apply and the test work. See comment 4 of this bug.

I'll fix this stuff up and add some tests for our behavior here in bug 1611699.

I refactored the dragdrop tests to cover more input types, but I ended up not
being able to use them because they're dependent on the content.

Instead I added an extra test and changed the refactor so that it applies to
<input type=search>, as there's layout work going on in bug 558594, and it'd be
unfortunate to regress this there too.

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

--HG--
extra : moz-landing-system : lando
2020-02-06 22:15:19 +00:00
Emilio Cobos Álvarez 69c87f6cb2 Bug 1613349 - Rename nsINode::DeleteProperty to RemoveProperty. r=smaug
And the related methods as well.

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

--HG--
extra : moz-landing-system : lando
2020-02-06 16:06:49 +00:00
Boris Zbarsky c8713bf40a Bug 1612444. Improve some error messages for exceptions in layout. r=emilio
I used ThrowNotSupportedError for the not-implemented case.

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

--HG--
extra : moz-landing-system : lando
2020-02-03 20:35:54 +00:00
Masayuki Nakano 9eca50461b Bug 1540043 - part 3: Remove `nsIPlaintextEditor` interface r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D61350

--HG--
extra : moz-landing-system : lando
2020-02-01 04:38:13 +00:00
Masayuki Nakano 56d2a88c44 Bug 1609860 - Make `AutoStyleCacheArray` cache only applied styles r=m_kato
Currently, `AutoStyleCacheArray` has style information of all 19 styles.
However, its element type, `StyleCache` has `nsString` instance.  Therefore,
the initializing cost is not reasonable since in most cases most of the
`StyleCache` instances are not used actually.

This patch makes `HTMLEditor::GetInlineStyles()` append elements only for
applied styles and `HTMLEditor::ReapplyCachedStyles()` look for current
value from an instance with new `IndexOf()` method.  Therefore, this patch
may make slower if a lot of styles are applied.  However, we can expect that
it's rare case.

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

--HG--
extra : moz-landing-system : lando
2020-01-31 07:14:42 +00:00
Masayuki Nakano 083d7d9809 Bug 1612085 - part 3: Remove dirty hack of `Selection::mCachedRange` r=smaug
Previously, I added `Selection::mCachedRange` to save allocation cost of
`nsRange`.  However, with the previous patch, we don't need the hack anymore
since ranges removed by `Selection::RemoveAllRanges()` are always kept in
the global cache of `nsRange`.  Therefore, we can remove the ugly hack right
now.

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

--HG--
extra : moz-landing-system : lando
2020-01-30 12:44:33 +00:00
Masayuki Nakano 450b71f763 Bug 1612085 - part 1: Hide constructor of `nsRange` r=smaug
`nsRange` instances are allocated a lot in the heap especially by editor and
spellchecker.  The allocation cost is too bad for benchmarks.  Therefore,
we should reuse released instances as far as possible.  For managing it in
static factory methods of `nsRange`, we need to hide `nsRange` constructor.

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

--HG--
extra : moz-landing-system : lando
2020-01-30 13:23:35 +00:00
Masayuki Nakano f506f1f653 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

--HG--
extra : moz-landing-system : lando
2020-01-30 08:50:41 +00:00
Masayuki Nakano ec2a667824 Bug 1611895 - Make `EditorEventListener::DragOverOrDrop()` check whether the result of `DragEvent::GetRangeParentContentAndOffset()` returned `nullptr` or not r=smaug
`DragEvent::GetRangeParentContentAndOffset()` may return `nullptr`.  Previously,
it was checked and returned `NS_ERROR_FAILURE` before landing bug 1610264.

This patch adds the null check which was accidentally removed.

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

--HG--
extra : moz-landing-system : lando
2020-01-29 10:36:32 +00:00
Masayuki Nakano 4101b26261 Bug 1610264 - part 2: Make `synthesizePlainDragAndDrop()` stop dispatching `drop` event if `dragover` event listener sets drop effect to `none` r=smaug
`drop` event shouldn't be fired when drop target does not accept the data
at last `dragover` handling.

This patch makes `synthesizePlainDragAndDrop()` stop dispatching `drop` event
if last `dragover` event's `dataTransfer.dropEffect` is `none`.  In strictly
speaking, it should refer `nsIDragSession::canDrop`.  However, the value is
unstable only on Linux.  The reason must be that only GTK widget manages
`canDrop` state by itself.  Therefore, this patch directly uses the
`dataTransfer.dropEffect` value instead.

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

--HG--
extra : moz-landing-system : lando
2020-01-24 07:43:20 +00:00
Masayuki Nakano 7d3ca06add Bug 1610264 - part 1: Make `EditorEventListener` consume `dragenter`, `dragover` and `drop` events if the drop target is managed by it r=smaug
Currently, editor does not consume `dragenter`, `dragover` nor `drop` event if
`EditorEventListener::CanDrop()` returns false.  Then,
`EventStateManager::PostHandleEvent()` does not modify current drag session
with given drop effect value.  Therefore, it does not make sense that
`EditorEventListener` modifies modify drop effect of `DragEvent::mDataTransfer`
only with calling `Event::StopPropagation()`.

This patch makes `EditorEventListener` consume `eDragEnter`, `eDragOver` and
`eDrop` events unless drop target is not managed by the editor (i.e., when
drop target is non-editable nodes in HTML editor, or the editor is a part of
`<input type="file">`).

Then, `EditorEventListenr::DragOver()` and `EditorEventListener::Drop()`
become really similar.  Therefore, this patch also merges them.  Their
differences are only:

* Only `Drop()` calls `CleanupDragDropCaret()` first.
* The main purpose code (calling `TextEditor::OnDrop()` from `Drop()` and
  modifying drop effect and caret from `DragOver()`)

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

--HG--
extra : moz-landing-system : lando
2020-01-24 20:10:25 +00:00
Emilio Cobos Álvarez a25126cd0d Bug 1611181 - Make direction use an enum class. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D60857

--HG--
extra : moz-landing-system : lando
2020-01-24 11:46:14 +00:00
Masayuki Nakano b1bf7e0db4 Bug 1540043 - part 1: Move all constants and methods of `nsIPlaintextEditor` to `nsIEditor` and make `nsIPlaintextEditor` inherit `nsIEditor` r=m_kato
For preparing to remove `nsIPlaintextEditor` interface, this patch moves
all of them to `nsIEditor`, but for avoiding bustage in comm-central, makes
`nsIPlaintextEditor` inherit `nsIEditor` for now (i.e., even with this patch,
script can access old `nsIPlaintextEditor` members with the interface.

In C++ code, this patch moves `SetWrapColumn()`, `InsertTextAsAction()`,
`InsertTextAsSubAction()` and `InsertLineBreakAsSubAction()` because
they do common things between `TextEditor` and `HTMLEditor`.  On the other
hand, this does not move `TextEditor::GetTextLength()` because it's designed
only for `TextEditor`.

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

--HG--
rename : editor/libeditor/tests/test_nsIPlaintextEditor_insertLineBreak.html => editor/libeditor/tests/test_nsIEditor_insertLineBreak.html
extra : moz-landing-system : lando
2020-01-24 08:33:42 +00:00