Commit Graph

364 Commits

Author SHA1 Message Date
criss
c1b045ddda Backed out 9 changesets (bug 1772006) causing build bustages on nsTString.cpp. CLOSED TREE
Backed out changeset f17c7565707b (bug 1772006)
Backed out changeset c725fe1f5882 (bug 1772006)
Backed out changeset d19663161261 (bug 1772006)
Backed out changeset b6611ab002d9 (bug 1772006)
Backed out changeset 790f42b64af9 (bug 1772006)
Backed out changeset 79a734b4e4d9 (bug 1772006)
Backed out changeset 42730aae16ea (bug 1772006)
Backed out changeset b2542aef3054 (bug 1772006)
Backed out changeset 962bfea4a309 (bug 1772006)
2022-06-11 01:13:42 +03:00
Nika Layzell
c1e4a1e52c Bug 1772006 - Part 6: Simplify and move the string searching APIs from ns[T]StringObsolete, r=xpcom-reviewers,necko-reviewers,eeejay,dragana,barret
The biggest set of APIs from ns[T]StringObsolete which are still heavily used
are the string searching APIs. It appears the intention was for these to be
replaced by the `FindInReadable` APIs, however that doesn't appear to have
happened.

In addition, the APIs have some quirks around their handling of mixed character
widths. These APIs generally supported both narrow strings and the native
string type, probably because char16_t string literals weren't available until
c++11. Finally they also used easy-to-confuse unlabeled boolean and integer
optional arguments to control behaviour.

These patches do the following major changes to the searching APIs:

1. The ASCII case-insensitive search method was split out as
   LowerCaseFindASCII, rather than using a boolean. This should be less
   error-prone and more explicit, and allows the method to continue to use
   narrow string literals for all string types (as only ASCII is supported).
2. The other [R]Find methods were restricted to only support arguments with
   matching character types. I considered adding a FindASCII method which would
   use narrow string literals for both wide and narrow strings but it would've
   been the same amount of work as changing all of the literals to unicode
   literals.
   This ends up being the bulk of the changes in the patch.
3. All find methods were re-implemented using std::basic_string_view's find
   algorithm or stl algorithms to reduce code complexity, and avoid the need to
   carry around the logic from nsStringObsolete.cpp.
4. The implementations were moved to nsTStringRepr.cpp.
5. An overload of Find was added to try to catch callers which previously
   called `Find(..., false)` or `Find(..., true)` to set case-sensitivity, due
   to booleans normally implicitly coercing to `index_type`. This should
   probably be removed at some point, but may be useful during the transition.

Differential Revision: https://phabricator.services.mozilla.com/D148300
2022-06-10 21:12:08 +00:00
Masayuki Nakano
8b7dbfe141 Bug 1772022 - Make EditorBase::DeleteNodeWithTransaction() return NS_ERROR_EDITOR_DESTROYED if so r=m_kato
Its callers check `EditorBase::Destroyed()` with at least adding 4 lines, and
some callers do not check this important state.  So, we should make it check
`Destroyed()` at last and omit the additional error check in the caller sites.

Note that it's a virtual method, but `HTMLEditor` checks whether it's a
removable node or not.  So, we should can merge it into `EditorBase`.  This
patch does it too.

Differential Revision: https://phabricator.services.mozilla.com/D148084
2022-06-03 02:03:47 +00:00
Masayuki Nakano
71411e3fb4 Bug 1771448 - part 4: Rename HTMLEditor::GetActiveEditingHost to ComputeEditingHost r=m_kato
It's currently computes the corresponding editing host from the focus node of
`Selection` with climbing up the DOM tree.  So, it does not just return a stored
element.  Therefore, some callers use it multiple times.  For avoiding it, we
should rename it to explain that it computes the editing host.

Note that I think that we should make it takes a node to compute editing host
without `Selection` for solving the case of no selection ranges.  Therefore,
I don't like to include more information into the name.

Differential Revision: https://phabricator.services.mozilla.com/D147504
2022-05-31 03:41:01 +00:00
John Bieling
06996f933a Bug 1768057 - Make nsIEditorMailSupport::insertTextWithQuotations available to JS callers. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D145646
2022-05-11 14:49:29 +00:00
Masayuki Nakano
fdbdb18b03 Bug 1762115 - part 15: Make HTMLEditor::InsertNodeIntoProperAncestorWithTransaction() stop touching Selection directly r=m_kato
This patch also makes that `HTMLWithContextInserter::InsertContents`
collect moving children first.  Then, move each one with a transaction.
This is standard manner in these days to avoid infinite loop caused by
moving the removed child back by a mutation event listener.

Differential Revision: https://phabricator.services.mozilla.com/D144658
2022-05-03 01:38:57 +00:00
Masayuki Nakano
ed197035df Bug 1762115 - part 13: Make EditorBase::InsertNodeWithTransaction stop touching Selection directly r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D144656
2022-05-03 01:21:51 +00:00
Masayuki Nakano
e67e2e79b6 Bug 1762115 - part 7: Make HTMLEditor::SplitNodeDeepWithTransaction stop touching Selection r=m_kato
Now, it does not require to update selection, and its result may have a point
to put caret it is used to doing.  This patch makes it stop collapsing selection
after each split, and instead, makes all callers of it collapse selection if
it's (probably) necessary.

Note that the method may not split any nodes but return it as "handled".
Therefore, the callers do not check whether a splitting node occurred **but**
suggesting point to put caret is invalid or the other cases.  Therefore, in
strictly speaking, this patch changes the existing behavior, but it should not
affects web apps in the wild because of the low usage of the legacy mutation
event listeners.

Differential Revision: https://phabricator.services.mozilla.com/D144650
2022-05-03 00:19:16 +00:00
Masayuki Nakano
adea39d1ad Bug 1762115 - part 5: Make SplitNodeResult store and suggest new caret position r=m_kato
This patch allows methods which split some nodes to return new candidate
caret position and makes callers of them consider whether applying it to
the selection immediately or not.

Differential Revision: https://phabricator.services.mozilla.com/D144648
2022-05-03 00:06:16 +00:00
Masayuki Nakano
54bb966fad Bug 1765018 - part 7: Make some methods which return an instance (not reference) of EditorDOMPointBase be template methods r=m_kato
For avoiding to use `To<EditorDOMPoint>()` etc from temporary object, such
methods should be templated.

Differential Revision: https://phabricator.services.mozilla.com/D143884
2022-04-20 23:58:04 +00:00
Masayuki Nakano
083c6837d0 Bug 1765018 - part 2: Make EditorBase::Get(Start|End)Point return EditorDOMPoint or EditorRawDOMPoint r=m_kato
This avoids unnecessary conversion at the callers' side, although they should be
omitted by the complier.

Differential Revision: https://phabricator.services.mozilla.com/D143879
2022-04-20 23:35:18 +00:00
Masayuki Nakano
a8350c4163 Bug 1764684 - part 3: Fix and improve warnings of the result of EditorBase::CollapseSelectionTo* r=m_kato
Some of them were `HTMLEditor` so that we need to fix it to `EditorBase`, and
also this patch fixes `NS_ERROR_EDITOR_DESTROYED` handling around them.

Differential Revision: https://phabricator.services.mozilla.com/D143815
2022-04-20 14:36:53 +00:00
Masayuki Nakano
9b8ab5eee6 Bug 1759370 - The lambda in HTMLEditor::InsertAsPlaintextQuotation should not refer inserting new <span> element's parent r=m_kato
It's not been inserted into the DOM tree yet.  Therefore, it should refer the
insertion point instead.

Differential Revision: https://phabricator.services.mozilla.com/D141449
2022-03-18 08:34:44 +00:00
Masayuki Nakano
832b142dc3 Bug 1759885 - Make initializers of new element in HTMLEditor stop capturing everything r=m_kato
Capturing everything causes increasing the binary size especially of debug
build so that we should add more arguments to the callback and make some
lambda methods capture individual variables when they are necessary.

Note that nobody uses the 3rd argument, `aPointToInsert`, it'll be used to
fix bug 1759370 and makes the change smaller.

This decreases the size of xul.dll of debug build on Windows 123MB from 323MB.

I tried to delete all captures from the lambdas, but it does not affect to the
binary size and it makes the code harder to read, killing static analysis.
Therefore, we should not do it.

Depends on D141196

Differential Revision: https://phabricator.services.mozilla.com/D141447
2022-03-18 07:20:52 +00:00
Masayuki Nakano
16c8061d35 Bug 1742933 - part 11: Create a pref to get back the traditional behavior r=m_kato
For avoiding simple back-out of the patches when we get serious regression
reports, we should have a pref to disable the new pref.

Differential Revision: https://phabricator.services.mozilla.com/D140475
2022-03-11 09:21:36 +00:00
Masayuki Nakano
846510e59b Bug 1742933 - part 10: Make HTMLEditor::InsertAsCitedQuotationInternal() set attributes of <blockquote> before connecting it to the DOM tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D140474
2022-03-11 09:21:36 +00:00
Masayuki Nakano
5fba23c229 Bug 1742933 - part 9: Make HTMLEditor::InsertAsPlaintextQuotation() set attributes of <span> before connecting to the DOM tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D140473
2022-03-11 09:14:37 +00:00
Masayuki Nakano
e407a64697 Bug 1742933 - part 8: Make HTMLEditor::PasteAsQuotationAsAction() set "type" attribute of new blockquote element before connecting it to the DOM tree r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D140472
2022-03-11 09:14:36 +00:00
Masayuki Nakano
22aa786ab3 Bug 1753508 - Add logger of selection batch r=smaug
This was required for debugging the bug.

Differential Revision: https://phabricator.services.mozilla.com/D139350
2022-03-11 02:24:24 +00:00
Norisz Fay
1b38335ea5 Backed out changeset 00f6bd7aa727 (bug 1755481) for causing multiple clipboard related failures CLOSED TREE 2022-02-16 12:14:58 +02:00
Mirko Brodesser
af3e92b960 Bug 1755481: rename nsIClipboard::getData to nsIClipboard::getSomeData and document it. r=mccr8
Before, it was confusing. One could have assumed that the method gets
the data for all flavors.

Differential Revision: https://phabricator.services.mozilla.com/D138776
2022-02-16 09:03:00 +00:00
Masayuki Nakano
40ca36e870 Bug 787434 - part 2: Make HTMLWithContextInserter::FragmentFromPasteCreator delete incomplete list elements in the inserting fragment r=mbrodesser
With the change of the previous patch, `HTMLEditor` won't delete empty elements
in the inserted HTML content.  However, at bug 1123505, it intentionally tried
to delete empty list elements which have no list item elements since such
list elements won't be editable.  Therefore, the following patch makes some
tests in `test_copypaste.html` fail.
https://searchfox.org/mozilla-central/rev/3de56eb5f266f523340e739ae1b53258e0a95dfe/dom/base/test/copypaste.js#343,360
Unfortunately, the broken behavior is compatible with Chrome (Chrome accept
list elements which have no list item elements), but it does not make sense for
Gecko's builtin editor.  Therefore, I think that we should keep our traditional
behavior with deny-list.

This patch makes `FragmentFromPasteCreator` delete list elements which have no
list item elements and are empty from the inserting document fragment.

Differential Revision: https://phabricator.services.mozilla.com/D136211
2022-02-02 00:44:54 +00:00
Masayuki Nakano
df8490248f Bug 787434 - part 1: Make HTMLEditor stop removing empty elements of inserted content r=m_kato
This is same issue as bug 1747008, but the remover is different method, that is
`HTMLEditor::RemoveEmptyNodesIn` called by
`HTMLEditor::OnEndHandlingTopLevelEditSubActionInternal`.  It should be called
only when the flag which was added by bug 1747008 is **not** set to `false`.

Differential Revision: https://phabricator.services.mozilla.com/D136210
2022-02-02 00:44:53 +00:00
Masayuki Nakano
ef75bd0339 Bug 1747008 - Make HTMLEditor::OnEndHandlingTopLevelEditSubActionInternal stop stripping empty inline elements if they may be inserted intentionally r=m_kato
Starting from bug 1730429, we strip empty inline elements at caret for
compatibility with Blink/WebKit.  However, we should not do it for the elements
which are intentionally inserted (from `inserthtml` command, paste and DnD).

All the cases are handled by `HTMLEditor::HTMLWithContextInserter` so that
it should prevent the new clean up with `TopLevelEditSubActionData`.

Note that `inserthtml` command handling of Blink is really odd.  It inserts
the empty inline elements of the adding testcases into different place so that
Chrome does not pass the new tests.  However, it does not make sense and I
believe that it's out of scope of this bug.

Differential Revision: https://phabricator.services.mozilla.com/D135195
2022-01-07 03:08:41 +00:00
Tom Schuster
e27e43753e Bug 1666582 - Remove NeedsSubjectPrincipal/ from chrome-only DataTransfer APIs. r=annyG,emilio
Differential Revision: https://phabricator.services.mozilla.com/D134932
2022-01-05 12:48:23 +00:00
Masayuki Nakano
8ce63d4397 Bug 1740858 - Improve SplitNodeResult r=m_kato
First, left/right node accessors are not used so that we can get rid of them.
However, we should have similar methods which can retrieve original node and
new node.  Therefore, this adds `GetNewContent()` and `GetOriginalContent()`.

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

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

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

Depends on D131043

Differential Revision: https://phabricator.services.mozilla.com/D131044
2021-11-15 02:29:48 +00:00
Jonathan Kew
47cf14c911 Bug 1734590 - Both the static InternetCiter methods are now infallible, so no need to return/check an nsresult. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D127865
2021-10-11 12:20:42 +00:00
Jonathan Kew
7d787476c9 No bug - fix spelling of internal constant name: s/Carridge/Carriage/. r=masayuki DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D127972
2021-10-11 07:38:27 +00:00
Csoregi Natalia
e601fc3a5e Backed out 4 changesets (bug 1734590) for failures on test_xmlserializer.js. CLOSED TREE
Backed out changeset e492f8fd3d53 (bug 1734590)
Backed out changeset 0af985bb7569 (bug 1734590)
Backed out changeset 3751b93ae994 (bug 1734590)
Backed out changeset 45059121c015 (bug 1734590)
2021-10-08 14:41:06 +03:00
Jonathan Kew
634af58a6d Bug 1734590 - Both the static InternetCiter methods are now infallible, so no need to return/check an nsresult. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D127865
2021-10-08 10:05:52 +00:00
Masayuki Nakano
f75f32cd74 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
5d2f328ac7 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
Neil Deakin
a86bbee056 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
1cba315b69 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
f09046d90e 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
c718ec6267 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
087f285cfa 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
c3500e3f66 Bug 1723125 - Ignore normal selection when updating composition string r=m_kato
Web apps can modify normal selection even during IME composition and no
browsers stop composition by it.  However, our editor tries to delete
non-collapsed selected range before updating composition.  Therefore,
we need additional state at handling inserting text whether selection
should be deleted or ignored.

Depends on D121371

Differential Revision: https://phabricator.services.mozilla.com/D121372
2021-08-02 08:23:50 +00:00
Masayuki Nakano
6a5f4a951d Bug 1722535 - Make HTMLEditor call HTMLEditUtils::GetBetterInsertionPoint() with an editing host which is not limited in the <body> r=m_kato
Previously, `HTMLEditor::GetBetterInsertionPoint()` didn't check whether
given point is in an editing host or not.  However, now
`HTMLEditUtils::GetBetterInsertionPoint()` does it with editing host which
is returned by `HTMLEditor::GetActiveEditingHost(LimitInBodyElement::No)`.
However, the old behavior is exactly same as
`HTMLEditor::GetActiveEditingHost(LimitInBodyElement::Yes)` if editing host
is outside the `<body>` element.

For taking back the original behavior, we should call the method with the
result of the latter.

Differential Revision: https://phabricator.services.mozilla.com/D121370
2021-08-02 08:23:49 +00:00
Masayuki Nakano
08d0eadbfb Bug 1718815 - part 2: Move EditorBase::AutoSelectionRestorer and EditorBase methods called only by it to HTMLEditor r=m_kato
Unfortunately, marking its constructor and destructor as `MOZ_CAN_RUN_SCRIPT`,
`Maybe<AutoSelectionRestorer>::reset()` and
`Maybe<AutoSelectionRestorer>::emplace()` cause bustage.  Therefore, this patch
just mark them as `MOZ_CAN_RUN_SCRIPT_BOUNDARY`.

Note that `EditorBase::SavedSelectionRef()` cannot be moved to `HTMLEditor`
because `mEditActionData` is a private member of `EditorBase`.

Depends on D119001

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

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

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

Differential Revision: https://phabricator.services.mozilla.com/D118933
2021-06-30 07:07:28 +00:00
Masayuki Nakano
247f08b91c Bug 1717178 - part 5: Get rid of nsIHTMLEditor.pasteNoFormatting() because of unused r=m_kato
Depends on D118800

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

Differential Revision: https://phabricator.services.mozilla.com/D118246
2021-06-18 20:35:48 +00:00
Masayuki Nakano
789ec29e0f Bug 1713760 - Make HTMLEditor inherit EditorBase directly r=m_kato
For making it clearer that `TextEditor` has only its specific members.  For
guaranteeing that, we should split `TextEditor` and `HTMLEditor`.

Differential Revision: https://phabricator.services.mozilla.com/D117382
2021-06-11 03:01:09 +00:00
Masayuki Nakano
c8dccdce0c Bug 1714916 - Make HTMLEditor::InsertFromDataTransfer() and GetStringFromDataTransfer() take uint32_t as index of DataTransfer items r=m_kato
`DataTransfer` manages its items with `uint32_t` now, but editor methods still
access with `int32_t`.  Therefore, editor module should use `uint32_t`.

Depends on D117115

Differential Revision: https://phabricator.services.mozilla.com/D117116
2021-06-09 03:47:39 +00:00
Masayuki Nakano
6eca46c4a2 Bug 1540037 - part 45: Move TextEditor::OnDrop() into EditorBase r=m_kato
Depends on D116802

Differential Revision: https://phabricator.services.mozilla.com/D116803
2021-06-07 11:38:18 +00:00
Masayuki Nakano
055949a338 Bug 1540037 - part 43: Move inserting dropped items part on HTMLEditor to HTMLEditor r=m_kato
`TextEditor::OnDrop()` handles both cases, in `TextEditor` and in `HTMLEditor`
because the common part is too complicated to duplicate.  However, most
different part is inserting the dropped items part.  So, let's make them
into a virtual method.

In this patch, creating a method only in `HTMLEditor` and moves the part
into it.

Depends on D116569

Differential Revision: https://phabricator.services.mozilla.com/D116801
2021-06-07 04:18:08 +00:00
Masayuki Nakano
b5172b32d8 Bug 1540037 - part 41: Split TextEditor::PasteAsAction() r=m_kato
It should be a virtual method derived from `EditorBase`, and `TextEditor`
and `HTMLEditor` should override it.  Then, `nsIEditor::Paste()` requires
referring vtable again if we keep implementing it only in `EditorBase`.
Therefore, this patch avoid it with implementing it in both `TextEditor`
and `HTMLEditor`.

Depends on D116567

Differential Revision: https://phabricator.services.mozilla.com/D116568
2021-06-04 05:01:39 +00:00
Masayuki Nakano
20169b9a45 Bug 1540037 - part 40: Move TextEditor::PrepareTransferable() into EditorUtils r=m_kato
It just creates an `nsITransferable` instance and add 2 flavors for storing
plain text.  Therefore, it can be in `EditorUtils` instead.

Depends on D116566

Differential Revision: https://phabricator.services.mozilla.com/D116567
2021-06-04 04:32:28 +00:00