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

10699 Коммитов

Автор SHA1 Сообщение Дата
Masayuki Nakano 774d292c7b Bug 1729111 - part 3: Rewrite `HTMLEditUtils::IsVisibleTextNode()` without `WSRunScanner` r=m_kato
`WSRunScanner` is designed for scanning editable nodes, but
`IsVisibleTextNode()` should not check editable state.  Therefore, it should
check it without `WSRunScanner` like `IsVisibleBRElement()`.

Differential Revision: https://phabricator.services.mozilla.com/D124554
2021-09-07 07:24:50 +00:00
Masayuki Nakano b358b03494 Bug 1729111 - part 2: Split scanning following content part of `HTMLEditUtils::IsVisibleBRElement()` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D124553
2021-09-07 07:24:50 +00:00
Masayuki Nakano 4cf5fda5b7 Bug 1729111 - part 1: Make `HTMLEditUtils.h` avoud using `dom::` at using classes in the namespace r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D124552
2021-09-07 07:24:49 +00:00
Masayuki Nakano eb21ae6f7c Bug 1727868 - Make `HTMLEditUtils::IsVisibleBRElement()` stop using `WSRunScanner` r=m_kato
The method may be used for checking a `<br>` element visibility in non-editable
content too.  Therefore, using `WSRunScanner` which is designed for scanning
editable content hits assertions.

The visibility of `<br>` element is considered only with the following
visible thing.  If it's followed only by another or current block boundary,
the `<br>` element is invisible.  But otherwise, it's visible.  So, it needs
to scan following contents to look for first visible thing until reaching
a block boundary.  And it does not need to check its previous content.

Differential Revision: https://phabricator.services.mozilla.com/D123876
2021-09-06 22:31:22 +00:00
Masayuki Nakano de3dc20d9f Bug 1727844 - part 8: Rename `BoundaryData::Preformatted` to `BoundaryData::WhiteSpacePreformatted` r=m_kato
It's should not cross preformatted line break, therefore, the better name
for it is, it means whether the preformatted white-space is found or not.

Differential Revision: https://phabricator.services.mozilla.com/D123875
2021-08-31 17:37:43 +00:00
Masayuki Nakano ed2f2242d1 Bug 1727844 - part 7: Make `HTMLEditor` related classes use constants in `HTMLEditUtils` to use specific character code point r=m_kato
Although we should move it into `EditorUtils`, currently, this is enough.

Differential Revision: https://phabricator.services.mozilla.com/D123874
2021-08-31 17:37:42 +00:00
Masayuki Nakano 62f8f1ee2c Bug 1727844 - part 6: Add "preformatted line break" information to scan result of `WSRunObject.h` r=m_kato
For preparation, this patch just adds new "preformatted line break" information
to the scan result related places.  This will be used for `\n` which is
preformatted by `white-space: pre`, `white-space: nowrap`,
`white-space: pre-wrap`, but not used for `white-space: pre-line`.

Differential Revision: https://phabricator.services.mozilla.com/D123873
2021-08-31 17:37:42 +00:00
Masayuki Nakano 1d96fd2092 Bug 1727844 - part 5: Rename some scan result related members in `WSRunObject.h` r=m_kato
Currently, it uses "normal text" and "normal white-spaces" for naming
`enum class` members and their accessors.  However, this is unclear what
does the normal mean since the word depends on context.

Therefore, this patch replaces the former with "non-collapsible characters" and
the latter is "collapsible white-spaces".

Differential Revision: https://phabricator.services.mozilla.com/D123872
2021-08-31 17:37:41 +00:00
Masayuki Nakano 6cc8d22f48 Bug 1727844 - part 4: Add API to check whether a char is collapsible or not r=m_kato
This patch adds `EditorUtils::IsNewLinePreformatted()` to check whether a
linefeed character is collapsible or not.

Then, a lot of users of `EditorDOMPointBase::Is*CharASCIISpace()` and
`EditorDOMPointBase::Is*CharASCIISpaceOrNBSP()` should check whether the
white-space at the point is collapsible or not.  Therefore, this patch adds
`Is*CharCollapsibleASCIISpace()` and `Is*CharCollapsibleASCIISpaceOrNBSP()`
too.

Then, makes such callers use the new API instead.

Differential Revision: https://phabricator.services.mozilla.com/D123871
2021-08-31 17:37:41 +00:00
Masayuki Nakano 2719427515 Bug 1727844 - part 3: Rename `EditorUtils::IsContentPreformatted()` to `IsWhiteSpacePreformatted()` r=m_kato
The method returns false even if linefeed characters are preformatted.
So, it should be renamed to explain what it does clearer.

And this renames `TextFragmentData::mIsPreformatted` and its accessors too.

Differential Revision: https://phabricator.services.mozilla.com/D123870
2021-08-31 17:37:41 +00:00
Masayuki Nakano c117a4d476 Bug 1727844 - part 1: Stop enabling blink-compat white-space normalizer at running mochitests r=m_kato
It was enabled for working on implementing blink-compat white-space normalizer,
but currently nobody works on it actively.  Therefore, we should disable it
at running mochitests for detecting any regressions in the default settings.

Differential Revision: https://phabricator.services.mozilla.com/D123868
2021-08-31 17:37:40 +00:00
Neil Deakin 4d1d84fe2f Bug 1727176, use the principal to determine the source of the drag, r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D123522
2021-08-31 00:58:35 +00:00
Neil Deakin e99bcbb5f1 Bug 1727176, remove unused source document arguments from html editor, r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D123521
2021-08-31 00:58:35 +00:00
Masayuki Nakano 47132331b8 Bug 1727479 - Make `WhiteSpaceVisibilityKeeper::PrepareToSplitAcrossBlocks()` adjust split point if it's in non-splittable node r=m_kato
`Selection` can be collapsed in a non-splittable element like a void element
and data nodes such as a comment node.  In this case, we should split the
parent block at before the void element (Blink almost does so, except
`<embed>`, `<hr>` and `<wbr>`).

Differential Revision: https://phabricator.services.mozilla.com/D123709
2021-08-27 02:14:15 +00:00
Masayuki Nakano 622c7ee8f0 Bug 1727185 - part 2: Add removable node checks for more callers of `DeleteNodeTransaction::MaybeCreate()` r=m_kato
I just missed some callers of it.  And I also make
`EditorBase::DeleteNodeTransaction()` a virtual method and `HTMLEditor` override
it.  Then, even if it's called by helper classes, the `HTMLEditor` version is
always called.

Differential Revision: https://phabricator.services.mozilla.com/D123578
2021-08-27 00:49:35 +00:00
Masayuki Nakano 229b5deba5 Bug 1727185 - Add `MOZ_DIAGNOSTIC_ASSERT` to the constructors of `DeleteNodeTransaction` and `SplitNodeTransaction` and make their users return error before hitting it r=m_kato
On Thunderbird, we still have a bug to delete `<html>` and `<body>` elements
(bug 1727201).  However, it's hard to know where deletes the unexpected elements
from warning messages in the log.  Additionally, it's really serious bug
because editor and layout code rely on the basic structure of HTML document.
Therefore, we should block the worst scenario before deleting such nodes.

Differential Revision: https://phabricator.services.mozilla.com/D123418
2021-08-25 00:39:41 +00:00
Masayuki Nakano 8af22120f6 Bug 1726532 - part 3: Make `TextServicesDocument` check whether a sibling content is `<br>` or not when checking whether a block or inline r=m_kato
This is a regression of bug 1311934.  The traditional
`TextServicesDocument::IsBlockNode()` was wrong name, the users of the method
intent to check whether a word is not split by the found sibling.  Therefore,
the method returned `true` for `<br>` element.  However, of course,
`HTMLEditUtils::IsBlockElement()` is not so because of an inline element.

For making the callers clearer, this patch adds `<br>` element check into
each place.  Without this patch, the new test fails to replace a misspelled
word immediately after `<br>` element.

Depends on D123283

Differential Revision: https://phabricator.services.mozilla.com/D123284
2021-08-24 03:29:21 +00:00
Masayuki Nakano 922488424d Bug 1726532 - part 1: Make `OffsetEntryArray::WillSetSelection()` use offset in text node when it sets a DOM node point r=m_kato
This is a mistake at replacing the argument value `aOffset` to
`aOffsetInTextInBlock`.
https://searchfox.org/mozilla-central/diff/886c96059ef6408618040356017028621bc574b9/editor/spellchecker/TextServicesDocument.cpp#1662

And also make `mozSpellChecker::Replace()` stop replacing if
`TextServicesDocument` fails to set selection or insert text because if
`TextServicesDocument` succeeded to insert text, but failed to delete text,
the loop becomes an infinite loop.

Differential Revision: https://phabricator.services.mozilla.com/D123282
2021-08-24 03:29:21 +00:00
Masayuki Nakano 984b60a1b6 Bug 1727008 - `HTMLEditor` shouldn't strip `<html>` element nor `<body>` elements r=m_kato
The new editor utility method does not stop scanning editable elements even if
it reaches the document root nor the (primary) `<body>` element.  Of course,
they should stop there if scanning editable block.  And
`ScanEmptyBlockInclusiveAncestor()` shouldn't store the removable empty block
element to them.

Differential Revision: https://phabricator.services.mozilla.com/D123316
2021-08-23 10:05:32 +00:00
Andi-Bogdan Postelnicu 9945b94835 Bug 1519636 - Reformat recent changes to the Google coding style. r=emilio
Updated with clang-format version 12.0.1 (taskcluster-dNZqCRqWRTqa6cZxPKxh7Q)

Differential Revision: https://phabricator.services.mozilla.com/D122814
2021-08-23 09:30:23 +00:00
Masayuki Nakano 0c5d9df685 Bug 1726064 - part 21: Make `HTMLEditor::AdjustCaretPositionAndEnsurePaddingBRElement()` use `HTMLEditUtils::Get(Inclusive)AncestorElement()` r=m_kato
I have no idea how to test this because this method is a clean up method
after handling everything.  This patch just adds same editing host check,
but the others are not changed.

Finally, the legacy APIs are not used anymore.  So, let's remove them!

Differential Revision: https://phabricator.services.mozilla.com/D123075
2021-08-23 06:39:39 +00:00
Masayuki Nakano 7895de5264 Bug 1726064 - part 20: Make `HTMLEditor::RemoveBlockContainerElements()` use `HTMLEditUtils::GetAncestorElement()` r=m_kato
Depends on D123073

Differential Revision: https://phabricator.services.mozilla.com/D123074
2021-08-23 06:27:39 +00:00
Masayuki Nakano 4cca5d2f25 Bug 1726064 - part 19: Make `HTMLEditor::SelectBRElementIfCollapsedInEmptyBlock()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
I have no idea how to write test for this kind of preparation method of
following range computation to do something.

Depends on D123072

Differential Revision: https://phabricator.services.mozilla.com/D123073
2021-08-23 05:50:43 +00:00
Masayuki Nakano c23029f7d5 Bug 1726064 - part 18: Make `HTMLEditor::HandleCSSIndentAtSelectionInternal()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
Depends on D123071

Differential Revision: https://phabricator.services.mozilla.com/D123072
2021-08-23 05:35:12 +00:00
Masayuki Nakano 2ac70cba92 Bug 1726064 - part 17: Make `HTMLEditor::FormatBlockContainerWithTransaction()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
Depends on D123070

Differential Revision: https://phabricator.services.mozilla.com/D123071
2021-08-23 05:08:42 +00:00
Masayuki Nakano 60f1ec0712 Bug 1726064 - part 16: Make `HTMLEditor::InsertParagraphSeparatorAsSubAction()` use `HTMLEditUtils::Get(Inclusive)AncestorElement()` and `HTMLEditUtils::IsSplittableNode()` r=m_kato
Comparing found editable block with editing host does not make sense if
focused editing host has another editing host and selection is in the
child editing host since the child editing host should be compared with the
found block element.  Therefore, this patch makes it use `IsSplittableNode()`
instead of the comparing.

Depends on D123069

Differential Revision: https://phabricator.services.mozilla.com/D123070
2021-08-23 03:11:25 +00:00
Masayuki Nakano d8027365e3 Bug 1726064 - part 15: Make `HTMLEditor::EnsureCaretNotAfterPaddingBRElement()` use `HTMLEditUtils::Get(Inclusive)AncestorElement()` r=m_kato
The method assumes two wrong things:
* The padding `<br>` element flag may not be set (another bug)
* There may be `<br>` element which is created by the web app

But its callers want to put caret at **invisible** `<br>` element if selection
is collapsed after it.  Therefore, this patch fixes the method for passing
the new tests and rename it.

And also this patch changes the expected result of some tests in `inserthtml.js`
because their expected result are based on Gecko, i.e., both Blink/WebKit
fail, but their result is better for keeping the invisible `<br>` element
visibility.
https://wpt.fyi/results/editing/run/inserthtml.html?run_id=5747864689967104&run_id=5201845715730432&run_id=5735315550502912&run_id=5763864667881472

Depends on D123068

Differential Revision: https://phabricator.services.mozilla.com/D123069
2021-08-22 21:38:20 +00:00
Masayuki Nakano d543ed3a3b Bug 1726064 - part 14: Make `AutoDeleteRangesHandler::ExtendRangeToIncludeInvisibleNodes()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
I have no idea how to test this without making unrealistic cases with legacy
mutation event listeners because now, Gecko ignores selection ranges which
crosses editing host boundaries when it tries to delete selection.
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/HTMLEditorDeleteHandler.cpp#1120
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/EditorUtils.cpp#137
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/EditorUtils.cpp#119-125

And invisible white-spaces appear end of a block or start of a block, i.e.,
both block parents in the range boundaries are always editable in normal cases.
So, such range should be ignored first.

Depends on D123067

Differential Revision: https://phabricator.services.mozilla.com/D123068
2021-08-22 21:32:21 +00:00
Andi-Bogdan Postelnicu 75ed803f7c Bug 1725145 - fixes for linking in the hybrid build env. r=valentin
Differential Revision: https://phabricator.services.mozilla.com/D122344
2021-08-22 10:21:56 +00:00
Masayuki Nakano 368e3f0587 Bug 1726064 - part 13: Make `AutoEmptyBlockAncestorDeleter::ScanEmptyBlockInclusiveAncestor()` use `HTMLEditUtils::Get(Inclusive)AncestorElement()` r=m_kato
Additionally, the given content may be in a nested editing host.  Then, this
method may delete a nested-block editing host if it's empty.  Therefore,
this patch get rid of `aEditingHost` and check same thing with
`HTMLEditUtils::IsRemovableFromParentNode()`.

Depends on D123066

Differential Revision: https://phabricator.services.mozilla.com/D123067
2021-08-21 21:28:52 +00:00
Masayuki Nakano 125fa92a05 Bug 1726064 - part 12: Make `HTMLEditor::CanMoveOrDeleteSomethingInHardLine()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
I have no idea how to test this, but I believe that checking non-editable
block element must be correct here because it checks whether the block is
empty or not for merging lines.

Depends on D123029

Differential Revision: https://phabricator.services.mozilla.com/D123066
2021-08-21 21:28:52 +00:00
Masayuki Nakano ebe0fb97bc Bug 1726064 - part 11: Make `AutoBlockElementsJoiner::PrepareToDeleteNonCollapsedRanges()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
I have no idea how to test this without making unrealistic cases with legacy
mutation event listeners because now, Gecko ignores selection ranges which
crosses editing host boundaries when it tries to delete selection.
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/HTMLEditorDeleteHandler.cpp#1120
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/EditorUtils.cpp#137
* https://searchfox.org/mozilla-central/rev/d3683dbb252506400c71256ef3994cdbdfb71ada/editor/libeditor/EditorUtils.cpp#119-125

So, `aRangesToDelete.FirstRangeRef()` shouldn't be in different editing host.

Depends on D122948

Differential Revision: https://phabricator.services.mozilla.com/D123029
2021-08-21 06:55:16 +00:00
Masayuki Nakano b5c52e9e20 Bug 1726064 - part 10: Make the constructor of `AlignStateAtSelection` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
The "state" is not limited by editing host nor editable nodes.  Therefore, it
should keep scanning ancestor block element without checking editable state.

Differential Revision: https://phabricator.services.mozilla.com/D122948
2021-08-20 22:17:02 +00:00
Masayuki Nakano 593b780331 Bug 1726064 - part 9: Make `TextServicesDocument::HasSameBlockNodeParent()` use `HTMLEditUtils::GetAncestorElement()` r=m_kato
For keeping current behavior, the options should be set to
`HTMLEditUtils::ClosestEditableBlockElement`, but it may cause returning
`nullptr` if the text node is in an inline editing host, and also cause
returning true from the method even when the text nodes are in different
inline editing hosts.  Therefore, this patch uses
`HTMLEditUtils::ClosestEditableBlockElementOrInlineEditingHost` instead.

Differential Revision: https://phabricator.services.mozilla.com/D122947
2021-08-20 11:12:08 +00:00
Masayuki Nakano 357aed8e64 Bug 1726064 - part 8: Make `HTMLEditor::HTMLWithContextInserter::InsertContents()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122946
2021-08-20 08:52:28 +00:00
Masayuki Nakano b7b4e78c71 Bug 1726064 - part 7: Make `HTMLEditor::SetCSSBackgroundColorWithTransaction()` use `HTMLEditUtils::Get(Inclusive)AncestorElement()` r=m_kato
This patch fixes a bug of setting background color of block parent.  It should
not work with `contenteditable` in the comm-central applications, but we should
make it modify only editable block parent.

Differential Revision: https://phabricator.services.mozilla.com/D122945
2021-08-20 06:37:14 +00:00
Masayuki Nakano f5c84ad9eb Bug 1726064 - part 6: Make `HTMLEditor::RemoveEmptyInclusiveAncestorInlineElements()` use `HTMLEditUtils::GetAncestorElement()` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122944
2021-08-20 02:20:21 +00:00
Masayuki Nakano f26a93d0a1 Bug 1726064 - part 5: Make `HTMLEditor::GetCSSBackgroundColorState()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
With the new tests, I see the implementation is completely broken.  It tries
to return block level element's background color, but it assumes that inline
elements are never parent of block elements.  Therefore, this patch fixes the
bug too.

Note that this feature (retrieving only block level background color) is
Gecko specific and not available from the web.  Therefore, it tests this change
with XPCOM interfaces directly.

Differential Revision: https://phabricator.services.mozilla.com/D122943
2021-08-19 22:05:18 +00:00
Masayuki Nakano ffacdefc1d Bug 1726064 - part 4: Make `HTMLEditor::HandleKeyPressEvent()` use `HTMLEditUtils::GetInclusiveAncestorElement()` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122942
2021-08-19 12:40:51 +00:00
Gijs Kruitbosch d90c0bb57f Bug 1724718 - skip some XUL-y tests on android, r=emilio,agi
Depends on D122663

Differential Revision: https://phabricator.services.mozilla.com/D122664
2021-08-19 12:13:01 +00:00
Masayuki Nakano 11ff3c8e0d Bug 1726064 - part 3: Make `HTMLEditor::MaybeCollapseSelectionAtFirstEditableNode()` use `HTMLEditUtils::GetAncestorElement()` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122941
2021-08-19 10:39:44 +00:00
Masayuki Nakano 2a6f988711 Bug 1726064 - part 2: Get rid of `HTMLEditUtils::GetInclusiveAncestorBlockElementExceptHRElement` r=m_kato
It does not check whether it meets a non-editable parent or not.  Therefore,
it may cross another editing host boundary when `aContent` is in a nested
editing host.

So, this patch fixes some edge cases when editing hosts are nested and
scanning from inner editing host.

Differential Revision: https://phabricator.services.mozilla.com/D122940
2021-08-19 06:55:13 +00:00
Masayuki Nakano 15cd88ce28 Bug 1726064 - part 1: Redesign `HTMLEditUtils::ClosestEditableBlockElementOrEditingHost()` with `enum class` r=m_kato
There are a lot of ancestor scanners in `HTMLEditUtils`.  This is good thing
for the performance, but it makes us hard to maintain.  Therefore, we should
merge them as far as possible.

Differential Revision: https://phabricator.services.mozilla.com/D122939
2021-08-19 05:39:16 +00:00
Masayuki Nakano 60811c73f8 Bug 1726080 - Make `TextServicesDocument` and `OffsetEntryArray` use raw pointer of `OffsetEntry` instead of reference to `UniquePtr` r=m_kato
If array size grows up, the array data may be reallocated.  Therefore, after
getting a reference of an array item, we shouldn't modify array.

This makes them use raw pointer if they need to modify the array.  Otherwise,
keep using the reference, but adds a stack class to detect the bug only in debug
build.

Differential Revision: https://phabricator.services.mozilla.com/D122920
2021-08-18 11:49:50 +00:00
Masayuki Nakano 6a5aa08b3c Bug 1725930 - Make `TextServicesDocument::HasSameBlockNodeParent` refer 2nd text node as expected r=m_kato
This is just a simple mistake, but I'm not sure how this break the callers.
Therefore, I don't have a testcase for this.

Differential Revision: https://phabricator.services.mozilla.com/D122705
2021-08-17 09:39:13 +00:00
Masayuki Nakano 13e75af6ad Bug 1725291 - part 3: Make `WhiteSpaceVisibilityKeeper::MergeFirstLineOf(Right|Left)BlockElementIntoDescendant(Left|Right)BlockElement()` abort handling it if joining elements become non-editable r=m_kato
They clean up the tail of descendant block first.  At this time, running script
may change one of or both of the left block element and the right block element.
In such situation, they should stop handling to join the blocks because of
unexpected case.

Depends on D122562

Differential Revision: https://phabricator.services.mozilla.com/D122565
2021-08-17 00:45:45 +00:00
Masayuki Nakano 0fb8b7b602 Bug 1725291 - part 2: Make `HTMLEditor::OnEndHandlingTopLevelEditSubActionInternal()` guarantee that `WhiteSpaceVisibilityKeeper::NormalizeVisibleWhiteSpacesAt()` is called with editable point r=m_kato
If the point is not editable, white-spaces around it shouldn't be normalized.

Differential Revision: https://phabricator.services.mozilla.com/D122562
2021-08-17 00:04:16 +00:00
Masayuki Nakano b3793d04e4 Bug 1725291 - part 1: Make `HTMLEditor::AutoDeleteRangesHandler::DeleteUnnecessaryNodesAndCollapseSelection()` try to delete same text node twice r=m_kato
It tries to delete a text node if it's invisible both selection start and
selection end.  However, the selection range may be in a text node.  If it's
an invisible, the node is deleted at first call of
`DeleteNodeIfInvisibleAndEditableTextNode()`, but it keep trying to remove
again with same method.

Differential Revision: https://phabricator.services.mozilla.com/D122561
2021-08-16 13:04:21 +00:00
Masayuki Nakano 2b288fd8d0 Bug 1636541 - Add reported testcase into the tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122548
2021-08-13 12:16:33 +00:00
Masayuki Nakano 8f7d5cd728 Bug 1626002 - Add reported testcase into the tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D122547
2021-08-13 12:16:32 +00:00