Commit Graph

72 Commits

Author SHA1 Message Date
Drew Willcoxon
0ee680e59e Bug 1846291 - Use Pocket favicon when showing Pocket suggestions at 16px. r=dao
Please see the bug for context. For pixel-perfect accuracy, we should just use
the favicon when showing the icon at 16px. We can continue to use the svg when
showing it at the larger best-match size.

Differential Revision: https://phabricator.services.mozilla.com/D185475
2023-08-07 21:33:46 +00:00
Daisuke Akatsuka
633e2a7437 Bug 1846894: Add 'Mozilla Developer Network' bottom text r=adw,fluent-reviewers,flod
Differential Revision: https://phabricator.services.mozilla.com/D185242
2023-08-03 21:36:07 +00:00
Drew Willcoxon
62af15b582 Bug 1846085 - Treat "how to" as one word when matching prefixes for Pocket suggestions. r=daisuke
Differential Revision: https://phabricator.services.mozilla.com/D184867
2023-07-31 23:31:09 +00:00
Daisuke Akatsuka
4dd5caeb6d Bug 1844706: Add and use new MDN icon for MDN Suggestions r=desktop-theme-reviewers,adw,dao
Depends on D184075

Differential Revision: https://phabricator.services.mozilla.com/D184786
2023-07-30 21:07:01 +00:00
Narcis Beleuzu
df9bffe99c Backed out changeset 783d744d047b (bug 1844706) for xpcshell failure on test_quicksuggest_mdn.js 2023-07-28 23:53:57 +03:00
Daisuke Akatsuka
d6301d5833 Bug 1844706: Add and use new MDN icon for MDN Suggestions r=desktop-theme-reviewers,adw,dao
Depends on D184075

Differential Revision: https://phabricator.services.mozilla.com/D184786
2023-07-28 19:56:25 +00:00
Daisuke Akatsuka
1a5f430183 Bug 1844495: Implement base of MDN Suggestions r=adw,dao
Differential Revision: https://phabricator.services.mozilla.com/D184075
2023-07-28 00:15:27 +00:00
Iulian Moraru
d0c6f20550 Backed out changeset 058d7fc0c711 (bug 1844495) for causing bc failures on browser_quicksuggest_mdn.js. CLOSED TREE 2023-07-28 02:05:53 +03:00
Daisuke Akatsuka
623872b9c8 Bug 1844495: Implement base of MDN Suggestions r=adw,dao
Differential Revision: https://phabricator.services.mozilla.com/D184075
2023-07-27 20:33:57 +00:00
Daisuke Akatsuka
6ea5606c5d Bug 1844266: Check enabling the feature after async processing in onRemoteSettingsSync r=adw
Differential Revision: https://phabricator.services.mozilla.com/D183951
2023-07-19 22:27:13 +00:00
Daisuke Akatsuka
2c5a3d58ab Bug 1843186: Append UTM parameter to Pocket suggestions r=dao
Differential Revision: https://phabricator.services.mozilla.com/D183455
2023-07-13 21:20:01 +00:00
Marco Bonardo
ff3c4323fc Bug 1827770 - Remove QueryContext.view and pass the controller to onEngagement() instead. r=daleharvey
Differential Revision: https://phabricator.services.mozilla.com/D182771
2023-07-07 10:01:50 +00:00
Daisuke Akatsuka
519c3272c6 Bug 1841877: Hide 'Show less frequently' for high confidence matches r=adw
Differential Revision: https://phabricator.services.mozilla.com/D182822
2023-07-07 00:31:45 +00:00
Drew Willcoxon
d9b865e27c Bug 1841446 - Update the "Not interested" command to disable Pocket suggestions. r=daisuke,fluent-reviewers,flod
Depends on D182606

Differential Revision: https://phabricator.services.mozilla.com/D182634
2023-07-05 15:47:24 +00:00
Drew Willcoxon
15ceeed7e0 Bug 1837097 - Implement "Show less frequently" behavior for Pocket suggestions. r=daisuke
Same as addon suggestions.

Depends on D182632

Differential Revision: https://phabricator.services.mozilla.com/D182606
2023-07-05 15:47:24 +00:00
Drew Willcoxon
75a6c22fe7 Bug 1841442 - Finish integrating Pocket suggestions with rich suggestions. r=daisuke,fluent-reviewers,flod
* Add the "Pocket - Related to {keyword}" bottom text
* Don't show the description for non-top-picks
* Make sure the URL is always shown

[Reference Figma](https://www.figma.com/file/3m1GVo9lejjorUZrPSn7VW/Pocket-collections-suggestions?type=design&node-id=2616%3A9002&mode=design&t=0BKzoltXIvYTpPi6-1) (see "CD Work area" in the left sidebar, then the "V4 - Final" group)

Depends on D182537

Differential Revision: https://phabricator.services.mozilla.com/D182632
2023-07-05 15:47:24 +00:00
Drew Willcoxon
bf1430c569 Bug 1841408 - Unify rich suggestions, best match, Firefox Suggest sponsored results, and Pocket Suggestions. r=dao,daleharvey
This does a few things:

* Unify the view implementations of rich suggestions, Firefox Suggest sponsored
  results, and best match. I did this by using the best match implementation
  and extending it to rich suggestions and Suggest sponsored.
* Use the unified implementation for Pocket suggestions too.
* Add a bottom-text concept since Pocket suggestions shown as top picks need to
  show both a description and some text below it. (The actual bottom text per
  result is added in D182632 since I didn't want to make this patch bigger than
  necessary)

I have a couple motivations for these changes:

* I'm implementing Pocket suggestions, which need to show some text below the
  suggestion title as well as the URL. I was going to just use the Firefox
  Suggest sponsored approach, where the action text is wrapped below the title,
  but that doesn't work because it can't show both the wrapped action text and
  the URL.
* IMO we should use rich suggestions as the basis for all rows going forward,
  i.e., unify the different row implementations around rich suggestions.

The reason I chose the best match implementation instead of the rich suggestions
implementation is because the grid-based approach of rich suggestions doesn't
work well when the URL also needs to be shown. The URL should be
baseline-aligned with the row title, which isn't easy to do when the URL is
outside the grid. The rich suggestions implementation also doesn't wrap the URL.

Other details:

* The `rich-suggestion=no-icon` attribute value is only used for styling, so we
  can replace it with `@supports -moz-bool-pref()`. That lets us make the
  `rich-suggestion` attribute a simple boolean.
* I kept the `isBestMatch` property for results since
  `searchEngagementTelemetryGroup()` uses it to return "top_pick", and the view
  also uses it to create the "Top pick" row/group label. It still has semantic
  meaning so I think that's OK. It's no longer used by the view to create
  different DOM or styling.
* Move `isRichSuggestion` from the payload to the result itself, since it's no
  longer used for only one type of result. It's like `isBestMatch`, which is
  also on the result.
* Add `richSuggestionIconSize` to the result too. The best match icon size
  is 52. The Pocket best match icon size is 24 (but will have added padding and
  a background color to make it appear 52px). IMO this is better than adding
  rules for each type of suggestion to the CSS. It's cleaner and also indicates
  what the "standard" icon sizes are.

Depends on D182580

Differential Revision: https://phabricator.services.mozilla.com/D182537
2023-07-05 15:47:24 +00:00
Drew Willcoxon
3bbfcdad94 Bug 1841295 - Update PocketSuggestions for the final suggestions schema and implement the desired matching behavior. r=daisuke
Each suggestion has "low" and "high confidence" keywords. When a high confidence
keyword is matched, the suggestion should be shown as a top pick, and otherwise
it should be shown as a normal Suggest result. High confidence keywords must be
matched in full, but low confidence keywords can be matched with prefixes
starting at the first word.

The low confidence matching behavior is the same as addon suggestions, so I
factored out that function into a new helper defined on `SuggestionsMap`.

I added a `full_keyword` property to the suggestions. It's not used yet but
we'll use it when we implement the final UI, which needs to show the full
keyword.

Differential Revision: https://phabricator.services.mozilla.com/D182580
2023-07-04 02:28:21 +00:00
Drew Willcoxon
bd2145522d Bug 1839558 - Allow suggestion scores to be specified in Nimbus. r=daisuke
This adds a `quickSuggestScoreMap` Nimbus variable that lets experiments
override suggestion scores. It maps from telemetry types to score values. For
example:

```
"quickSuggestScoreMap": {
  "amo": 0.25,
  "adm_sponsored": 0.3
}
```

In this example, addon suggestions will always have a score of 0.25, and
sponsored suggestions will always have a score of 0.3. Of course, different
branches within an experiment and different experiments can set different
scores.

While working on this, I saw we have a bug when we try to look up the
`BaseFeature` for a result. To do the lookup, we look up the result's
`telemetryType` in `FEATURE_NAMES_BY_TELEMETRY_TYPE`. That's a problem for `adm`
suggestions because the `telemetryType` will be either `adm_sponsored` or
`adm_nonsponsored`, but neither of those is present in
`FEATURE_NAMES_BY_TELEMETRY_TYPE` -- only `adm` is.

To fix it, I added back the `provider` property to result payloads that I
previously removed, and I added `BaseFeature.merinoProvider` so each feature can
specify its Merino provider. Then, `QuickSuggest` can build a map from Merino
provider names to features, allowing us to look up features without needing to
hardcode something like `FEATURE_NAMES_BY_TELEMETRY_TYPE` or
`FEATURE_NAMES_BY_MERINO_PROVIDER`.

Since I added back the `provider` property, I had to update a lot of tests. (As
a follow up, it would be nice to centralize the creation of expected result
objects in the test helper.)

I also added `BaseFeature.getSuggestionTelemetryType()` to help implement the
score map and to better formalize the idea that telemetry types are an important
property that all quick suggest results should include.

Differential Revision: https://phabricator.services.mozilla.com/D181709
2023-06-22 03:55:40 +00:00
Drew Willcoxon
3fd234d2a0 Bug 1836903 - Implement Pocket suggestions. r=daisuke,desktop-theme-reviewers,dao
This implements most parts of Pocket suggestions. They don't need any special UI
or a dynamic result type because they're only shown as the usual best match rows
or non-best match rows.

Still to do:

* Implement the "Show less frequently" behavior once we decide what the keywords
  will be and how that will work.
* Implement the bottom "Mozilla Pocket" text inside the suggestion row once it's
  finalized. We can use the same technique we use to show the "Sponsored" bottom
  text for adM suggestions.

Other changes this makes:

* Replace the `type=bestmatch` attribute with an `bestmatch` attribute. That
  lets best-match rows have a `type` too, in this case `"pocket"` (actually
  either `"rs_pocket"` or `"merino_pocket"`, since I'm using the telemetry
  result type).
* Improve how UrlbarProviderQuickSuggest delegates to individual features when
  getting result commands, view updates, handling commands, etc., so that we
  don't need to add new `case` statements for each new type of suggestion.

Differential Revision: https://phabricator.services.mozilla.com/D180059
2023-06-07 20:19:44 +00:00
Drew Willcoxon
5299a47663 Bug 1836582 - Update the matching behavior of addon suggestions. r=daisuke
This implements the new required matching behavior, which isn't based on min
keyword length anymore. This is how it works:

* Use the full keywords in remote settings to generate keywords that contain the
  first word plus each possible substring after the first word. For example if a
  full keyword is "video download", then generate these keywords: "video",
  "video ", "video d", "video do", etc. If a full keyword is only one word, then
  use it as is. The keywords never change even when the user clicks "Show less
  frequently". This is implemented in `onRemoteSettingsSync()`, and I modified
  `SuggestionsMap.add()` to make it easy to generate new keywords from the
  strings in `suggestion.keywords`.
* Keep track of the number of times the user clicked "Show less frequently" in
  `showLessFrequentlyCount`.
* When a suggestion is fetched from the suggestions map, filter it out if the
  search string isn't long enough given the `showLessFrequentlyCount`. This is
  done in `makeResult()`.

Other changes:

* I made some of the private properties in `AddonSuggestions` public so that the
  xpcshell test can easily use them. I think it's OK for them to be public.
* Added `show_less_frequently_cap` to the RS config object so that we can
  specify a cap in RS as well as Nimbus.
* mv'ed test_quicksuggest_addResults.js to test_suggestionsMap.js, since I
  modified this file. I should have done that back when I replaced `addResults()`
  with `SuggestionsMap`.
* Fixed a bug in `SuggestionsMap.add()` where the same suggestion could be added
  multiple times to the array stored in the map, if it had duplicate keywords.

Differential Revision: https://phabricator.services.mozilla.com/D179867
2023-06-05 20:49:21 +00:00
Rob Wu
bad812f243 Bug 1836482 - Replace AddonManager.jsm imports with AddonManager.sys.mjs r=Standard8,webcompat-reviewers,twisniewski
This patch was generated as follows:

Run:
`./mach esmify --imports . --prefix=toolkit/mozapps/extensions/AddonManager`
In the output there are linter/prettifier errors due to unused
XPCOMUtils or separate importESModule calls. These have been fixed
manually and verified with `./mach lint --outgoing`.

The `esmify` script also inserts many unwanted newlines around imports
that are broken on two lines due to length. Due to the number of these,
I fixed them programatically.

1. Create patch from the changes so far.
2. From the patch, delete all lines that consist of "+" (i.e. added blank line).
3. Reset the working dir and apply the revised patch.
4. Verify that the diff between step 1 and 3 looks reasonable.
5. Verify that this patch as a whole looks reasonable.

Commands:

```
git diff > rename.diff
:%g/^+$/d
git commit -va -m WIP-rename
git revert HEAD
git apply --recount rename.diff
git diff HEAD^  # and verify that the removed lines are ok.
git commit -va  # one last review to verify correctness of whole patch.
git rebase -i HEAD~3  # drop the WIP + reverted commit, pick only the last.
```

`git apply` has the `--recount` option to force it to ignore mismatches
in line counts, which happens because we deleted added lines (^+$)
without fixing up the line counts in the file headers.

Differential Revision: https://phabricator.services.mozilla.com/D179874
2023-06-04 13:44:45 +00:00
Daisuke Akatsuka
ca0b872595 Bug 1836005: Implement second UI treatment for addon suggestions r=adw,fluent-reviewers,flod
Differential Revision: https://phabricator.services.mozilla.com/D179528
2023-05-31 23:35:59 +00:00
Daisuke Akatsuka
b45e28d10a Bug 1835979: Add the 'Feedback' label to the addon suggestion result menu button r=adw
Differential Revision: https://phabricator.services.mozilla.com/D179603
2023-05-31 23:30:35 +00:00
Daisuke Akatsuka
4200c7e9f5 Bug 1835598: Handle suggestions provided by any provider as top picks if is_top_pick is undefined r=adw
Differential Revision: https://phabricator.services.mozilla.com/D179510
2023-05-31 20:17:02 +00:00
Daisuke Akatsuka
1856333779 Bug 1835224: Set overflowable to fade the component r=adw
Differential Revision: https://phabricator.services.mozilla.com/D179334
2023-05-31 02:51:46 +00:00
Daisuke Akatsuka
0413c0f4c7 Bug 1834646: Adapt to new addon suggestions format in RemoteSettings r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178873
2023-05-25 13:55:55 +00:00
Daisuke Akatsuka
b9c24fe6a5 Bug 1833975: Use rs instead of _test_rs r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178792
2023-05-25 13:55:55 +00:00
Daisuke Akatsuka
009401662c Bug 1833975: Use MockRemoteSettings for QuickSuggestTestUtils.setConfig r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178791
2023-05-25 13:55:55 +00:00
Daisuke Akatsuka
278b9be236 Bug 1833975: Use MockRemoteSettings for QuickSuggestTestUtils.setRemoteSettingsResults() r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178790
2023-05-25 13:55:55 +00:00
Daisuke Akatsuka
08edf23090 Bug 1833975: Introduce MockRemoteSettings to sync RemoteSettings data r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178789
2023-05-25 13:55:55 +00:00
Norisz Fay
8cd234ee24 Backed out 5 changesets (bug 1833975, bug 1834646) for causing xpcshell failures on test_quicksuggest_positionInSuggestions.js CLOSED TREE
Backed out changeset 313ba1d28b0a (bug 1834646)
Backed out changeset e06da1bd5237 (bug 1833975)
Backed out changeset 22a19ef954b3 (bug 1833975)
Backed out changeset f6a474dcdc0e (bug 1833975)
Backed out changeset 43f66a49f875 (bug 1833975)
2023-05-25 14:10:58 +03:00
Daisuke Akatsuka
b620da5b0b Bug 1834646: Adapt to new addon suggestions format in RemoteSettings r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178873
2023-05-25 08:14:56 +00:00
Daisuke Akatsuka
b27fc16833 Bug 1833975: Use rs instead of _test_rs r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178792
2023-05-25 08:14:56 +00:00
Daisuke Akatsuka
1a6447d877 Bug 1833975: Use MockRemoteSettings for QuickSuggestTestUtils.setConfig r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178791
2023-05-25 08:14:55 +00:00
Daisuke Akatsuka
ea002d4416 Bug 1833975: Use MockRemoteSettings for QuickSuggestTestUtils.setRemoteSettingsResults() r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178790
2023-05-25 08:14:55 +00:00
Daisuke Akatsuka
f3c0425f24 Bug 1833975: Introduce MockRemoteSettings to sync RemoteSettings data r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178789
2023-05-25 08:14:55 +00:00
Daisuke Akatsuka
13d726e71a Bug 1833760: Integrate remote settings suggestions with AddonSuggestions r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178424
2023-05-22 01:20:56 +00:00
Daisuke Akatsuka
4174769862 Bug 1833750: Add a Nimbus variable for the pref r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178404
2023-05-18 23:27:24 +00:00
Daisuke Akatsuka
2bffcba0e3 Bug 1833553: Add browser.urlbar.suggest.addons pref r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178286
2023-05-18 02:21:44 +00:00
Daisuke Akatsuka
db3c5fdf57 Bug 1833515: Hide suggestions for addons the user has installed r=adw
Differential Revision: https://phabricator.services.mozilla.com/D178263
2023-05-17 06:21:39 +00:00
Drew Willcoxon
21b13c63b8 Bug 1832927 - Move sponsored/nonsponsored checks back to UrlbarProviderQuickSuggest. r=daisuke
Please see bug 1832927 for background. This fixes the problem on 115 by moving
the sponsored/nonsponsored logic back to the provider.

I added a task to test_quicksuggest_topPicks.js, and I created xpcshell tests
for addons and dynamic Wikipedia with similar tasks. It would be nice to unify
this check for all quick suggest types somehow -- maybe a task in
test_quicksuggest.js, but that's not quite as simple as it seems because each
suggestion type has its own suggestion object and expected result payload. We
might also want to add more tasks to these new files. We can think about that
later because there are other opportunities for test consolidation too.

Differential Revision: https://phabricator.services.mozilla.com/D177952
2023-05-16 01:17:06 +00:00
Daisuke Akatsuka
ecbdc5d8f5 Bug 1832474: Implement addon suggestions result menu r=adw,fluent-reviewers,flod
Differential Revision: https://phabricator.services.mozilla.com/D177852
2023-05-15 12:25:06 +00:00
Daisuke Akatsuka
3ae5033a41 Bug 1832445: Adapt to Merino data format r=adw
Differential Revision: https://phabricator.services.mozilla.com/D177711
2023-05-11 02:53:00 +00:00
Noemi Erli
6ccc1bda86 Backed out changeset a800d4653b79 (bug 1832445) for causing failures in browser_glean_telemetry_engagement_selected_result.js CLOSED TREE 2023-05-11 05:36:21 +03:00
Daisuke Akatsuka
067676d9db Bug 1832445: Adapt to Merino data format r=adw
Differential Revision: https://phabricator.services.mozilla.com/D177711
2023-05-11 01:11:01 +00:00
Daisuke Akatsuka
45268fa4c7 Bug 1828610: Implement addon suggestions r=desktop-theme-reviewers,adw,fluent-reviewers,flod,dao
Differential Revision: https://phabricator.services.mozilla.com/D176114
2023-05-10 20:04:38 +00:00
Drew Willcoxon
15f1e8095d Bug 1831971 - Remove zero-prefix functionality from the weather suggestion and don't start fetches until a config is set. r=daisuke
This fixes the bug by not starting fetches until a config is set from either
remote settings or Nimbus. By "config" I mean keywords basically, but we sync
more than keywords -- the min keyword length and min keyword length cap -- so
that's why I use different term. So, before remote settings is synced, no config
will be set, so no fetches will happen, so the suggestion will be null. When the
urlbar provider starts a query, it will see the suggestion is null and not add a
result. Once a config is set from RS or Nimbus, we'll start fetching.

Currently we allow zero prefix when keywords or the min keyword length aren't
set. This patch removes that functionality because on second thought, there's
not a safe and obvious way to support zero prefix using these keyword-related
config properties/variables by themselves, and zero prefix isn't a feature
requirement anymore anyway. If we wanted to keep supporting it with these
properties/variables, there are a few options, and I don't like any of them:

* If `keywords` is undefined or null, use zero prefix. This is dangerous because
  we may make a mistake in RS or Nimbus and forget to set it. Also, we use null
  as the default value for the Nimbus var, and since we use UrlbarPrefs to
  access Nimbus vars, there's no good way to tell whether null was set
  intentionally or not.
* If `keywords` is an empty array, use zero prefix. This is awkward because the
  user can now increment the min keyword length, which means the keywords array
  kept by `Weather` can become empty when the min keyword length is incremented
  a lot. In that case, no suggestion should be shown at all.
* If `min_keyword_length` is zero/falsey, use zero prefix. This has the same
  problems as the first point above.

If we do need to support zero prefix again in the future, I think we should add
an RS property/Nimbus variable that makes it clear what's happening, e.g., a
`useZeroPrefix` boolean.

I removed the exposure scalar because it's entirely based on zero prefix. We can
use Glean for that now anyway.

I also noticed weather suggestions are case insenstive, so I fixed that and
added a test task.

Differential Revision: https://phabricator.services.mozilla.com/D177448
2023-05-09 06:37:34 +00:00
Norisz Fay
170c5ddc71 Backed out changeset a39f9cd81a42 (bug 1831971) for causing bc failures on browser_glean_telemetry_engagement_selected_result.js CLOSED TREE 2023-05-09 09:14:25 +03:00
Drew Willcoxon
5b2c648c9e Bug 1831971 - Remove zero-prefix functionality from the weather suggestion and don't start fetches until a config is set. r=daisuke
This fixes the bug by not starting fetches until a config is set from either
remote settings or Nimbus. By "config" I mean keywords basically, but we sync
more than keywords -- the min keyword length and min keyword length cap -- so
that's why I use different term. So, before remote settings is synced, no config
will be set, so no fetches will happen, so the suggestion will be null. When the
urlbar provider starts a query, it will see the suggestion is null and not add a
result. Once a config is set from RS or Nimbus, we'll start fetching.

Currently we allow zero prefix when keywords or the min keyword length aren't
set. This patch removes that functionality because on second thought, there's
not a safe and obvious way to support zero prefix using these keyword-related
config properties/variables by themselves, and zero prefix isn't a feature
requirement anymore anyway. If we wanted to keep supporting it with these
properties/variables, there are a few options, and I don't like any of them:

* If `keywords` is undefined or null, use zero prefix. This is dangerous because
  we may make a mistake in RS or Nimbus and forget to set it. Also, we use null
  as the default value for the Nimbus var, and since we use UrlbarPrefs to
  access Nimbus vars, there's no good way to tell whether null was set
  intentionally or not.
* If `keywords` is an empty array, use zero prefix. This is awkward because the
  user can now increment the min keyword length, which means the keywords array
  kept by `Weather` can become empty when the min keyword length is incremented
  a lot. In that case, no suggestion should be shown at all.
* If `min_keyword_length` is zero/falsey, use zero prefix. This has the same
  problems as the first point above.

If we do need to support zero prefix again in the future, I think we should add
an RS property/Nimbus variable that makes it clear what's happening, e.g., a
`useZeroPrefix` boolean.

I removed the exposure scalar because it's entirely based on zero prefix. We can
use Glean for that now anyway.

I also noticed weather suggestions are case insenstive, so I fixed that and
added a test task.

Differential Revision: https://phabricator.services.mozilla.com/D177448
2023-05-09 04:28:47 +00:00