Set aria-setsize on grouped tabs to the number of tabs in the tab group. Set aria-posinset on grouped tabs to the 1-based index of the tab within the tab group. This allows some a11y tools to report to the user that a tab is, for example, tab "2 of 7" in a tab group.
The tab strip uses the `tablist` ARIA role. The ARIA spec and Firefox's a11y engine both forbid nesting `group` ARIA roles inside of `tablist`. As a result, a11y tools always read individual tabs as being tab "X of Y", where Y is the number of tabs in the tab strip and X is the index of the tab in the tab strip. This is good information, but it does not give the user a sense of where a tab is within a tab group.
Differential Revision: https://phabricator.services.mozilla.com/D245185
Tabs outside of tab groups are at the top level (level 1) while tabs inside of tab groups are at the next lower level (level 2). This helps unsighted users get a better sense about the hierarchy of the tab strip.
Differential Revision: https://phabricator.services.mozilla.com/D245184
Tabs outside of tab groups are at the top level (level 1) while tabs inside of tab groups are at the next lower level (level 2). This helps unsighted users get a better sense about the hierarchy of the tab strip.
Differential Revision: https://phabricator.services.mozilla.com/D245184
- record number of saved tab groups
- record min/max/median/average number of tabs in saved tab groups
This patch adds a new observable topic `sessionstore-saved-tab-groups-changed` to SessionStore. This is emitted when a saved tab group is added or removed from the session. BrowserUsageTelemetry subscribes to that topic and updates saved tab group-related metrics.
BrowserUsageTelemetry is also setting those saved tab group-related metrics on startup. BrowserGlue initializes BrowserUsageTelemetry after the session has been restored/set up, so saved tab group information will be available at that time. This is also important to make sure that we keep this metric correct even if a user doesn't touch their saved tab groups during the course of a session.
Differential Revision: https://phabricator.services.mozilla.com/D245138
This patch exposes a groupId field on tabs.Tab objects in extensions.
On mobile (Android), the value is always -1.
On desktop, the value is the numeric representation composed from the
internal ID, which happens to fit in a safe integer. As long as the
browser is not running past year 2255, this works. As a fallback,
when an ID in a different format is encountered, the logic falls back
to returning a new unique ID based on a counter. This ID is then
stored in an internal in-memory map to maintain stable consistency.
Since it is unclear when exactly it is safe to discard this value, this
map is never cleared. This minor memory leak is acceptable because it
does not happen in practice, and even if it does, the number of tab
groups over the lifetime of a Firefox session is not going to reach
excessive values.
Differential Revision: https://phabricator.services.mozilla.com/D245159
When using the tab context menu or drag-dropping tabs to put them into a group, record a metric for the number of tabs added to the group.
Data Science asked us to launch with this metric disabled so that they could control it using server knobs. They expect a high volume of events, so they expect to only enable this metric for some proportion of users.
I converted the existing `TabMove` event derived from `UIEvent` being fired when tabs change their tab index in the tab strip. `UIEvent` doesn't allow for attaching additional context/detail to the event. `TabMove` is now a `CustomEvent` that provides more context about the moved tab and it fires in more cases -- it's possible for the tab index not to change despite the tab having "moved" into/out of a tab group.
This approach would not capture tab movements that occur across multiple frames/event loop iterations.
Differential Revision: https://phabricator.services.mozilla.com/D244616
See details in the bugzilla. The current implementation (removing identical tabs from the suggestions) is confusing to users.
We may uplift this to Beta as well, so the change made is as simple as possible.
Differential Revision: https://phabricator.services.mozilla.com/D244913
Improvements:
1) Preprocess text to remove domain information. This makes similarity check more robust.
2) Optimize for F1, which means increasing threshold and reducing depth parameter
Differential Revision: https://phabricator.services.mozilla.com/D244631
I expect that bug 1955112 was really a duplicate of bug 1954163. Based on that, let's remove this workaround since it's causing trouble.
Differential Revision: https://phabricator.services.mozilla.com/D244564
Record when users delete an open group from the tab group context menu or delete an open group from a context menu in the all-tabs menu.
This will not record when users close a window or close all of the individual tabs in a tab group, even though those cases have the logical side effect of deleting a tab group.
Differential Revision: https://phabricator.services.mozilla.com/D241884
Adding additional functionality for there to be a link in the message part of the optin component. Using a place holder link to support for now. This will be updated to a new SUMO article.
Differential Revision: https://phabricator.services.mozilla.com/D244069
highlight text when label is suggested but also un-focus the input when a user clicks out of the input anywhere on the panel.
Differential Revision: https://phabricator.services.mozilla.com/D244096
- TabsList has been removing toolbarbuttons (not their parent toolbaritems) and also removing .all-tabs-group-button elements created by GroupsList. Making sure that TabsList only clears group-related toolbaritems in its own menu view
- do some additional waiting/all tabs menu refreshing in the browser_tab_manager_groups tests to make results more consistent
Differential Revision: https://phabricator.services.mozilla.com/D243822
When dragging a pinned tab into an overflowing tab strip, it's possible to drop the pinned tab after the first unpinned tab. This causes one of the pinned tabs to be covered up, it breaks the browser's count of pinned tabs, and it can lead to breakages in drag-drop and the visual rendering of the tab strip.
An additional constraint on the drop position will make sure that a pinned tab can't drop between unpinned tabs and an unpinned tab can't drop between pinned tabs.
Differential Revision: https://phabricator.services.mozilla.com/D242748
Now that the ReviewChecker sidebar can auto-open and close, the logic for finding distinct navigations needs to be updated.
This allow us to detect the first time new products URLs are requested to shown in the sidebar and to check if a tab should auto-open the sidebar after it was closed.
- `isDistinctProductPageVisit` now works the same as it did in the ShoppingSidebar, indicating that there was a product navigation while a tab was in the background.
- `reviewCheckerWasClosed` now prevents the sidebar from re-opening on tab changes for a location it was closed on.
- `isSimulated` is set to false in the location change handlers on tab changes where there was an unhandled background product navigation.
- Moves the `isSameProduct` check to `ShoppingUtils` and use that to test previous URIs passed to `hasLocationChanged`.
- Manager will only handle product page specific parts of location changes when the sidebar is not open to handle them.
Differential Revision: https://phabricator.services.mozilla.com/D241446
when the user is presented with the AI suggested tabs in STG, change the action button that toggles the select and deselect actions to just being a simple select all checkbox that only selects all when checked. Remove the deselect all functionality.
Differential Revision: https://phabricator.services.mozilla.com/D243221