Skip to content

Commit d1afb26

Browse files
committedMar 26, 2025
Backed out changeset 68d101b370d8 (bug 1938430) for permafailures on browser_tab_manager_groups.js (Bug 1938697).
1 parent 8687c40 commit d1afb26

File tree

8 files changed

+7
-299
lines changed

8 files changed

+7
-299
lines changed
 

‎browser/base/content/main-popupset.js

+1-11
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@
88
document.addEventListener(
99
"DOMContentLoaded",
1010
() => {
11-
const lazy = {};
12-
ChromeUtils.defineESModuleGetters(lazy, {
13-
TabGroupMetrics:
14-
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs",
15-
});
16-
1711
let mainPopupSet = document.getElementById("mainPopupSet");
1812
// eslint-disable-next-line complexity
1913
mainPopupSet.addEventListener("command", event => {
@@ -136,11 +130,7 @@ document.addEventListener(
136130
let tabGroup = gBrowser.getTabGroupById(tabGroupId);
137131
// Tabs need to be removed by their owning `Tabbrowser` or else
138132
// there are errors.
139-
tabGroup.ownerGlobal.gBrowser.removeTabGroup(tabGroup, {
140-
isUserTriggered: true,
141-
telemetrySource:
142-
lazy.TabGroupMetrics.METRIC_SOURCE.TAB_OVERFLOW_MENU,
143-
});
133+
tabGroup.ownerGlobal.gBrowser.removeTabGroup(tabGroup);
144134
}
145135
break;
146136

‎browser/components/tabbrowser/TabGroupMetrics.sys.mjs

-18
This file was deleted.

‎browser/components/tabbrowser/content/tabbrowser.js

+2-23
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,6 @@
110110
PictureInPicture: "resource://gre/modules/PictureInPicture.sys.mjs",
111111
SmartTabGroupingManager:
112112
"moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs",
113-
TabGroupMetrics:
114-
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs",
115113
UrlbarProviderOpenTabs:
116114
"resource:///modules/UrlbarProviderOpenTabs.sys.mjs",
117115
});
@@ -2967,9 +2965,7 @@
29672965
* switches windows).
29682966
* Causes the group create UI to be displayed and telemetry events to be fired.
29692967
* @param {string} [options.telemetryUserCreateSource]
2970-
* The means by which the tab group was created.
2971-
* @see TabGroupMetrics.METRIC_SOURCE for possible values.
2972-
* Defaults to "unknown".
2968+
* The means by which the tab group was created. Defaults to "unknown".
29732969
*/
29742970
addTabGroup(
29752971
tabs,
@@ -3028,23 +3024,8 @@
30283024
* The tab group to remove.
30293025
* @param {object} [options]
30303026
* Options to use when removing tabs. @see removeTabs for more info.
3031-
* @param {boolean} [options.isUserTriggered=false]
3032-
* Should be true if this group is being removed by an explicit
3033-
* request from the user (as opposed to a group being removed
3034-
* for technical reasons, such as when an already existing group
3035-
* switches windows). This causes telemetry events to fire.
3036-
* @param {string} [options.telemetrySource="unknown"]
3037-
* The means by which the tab group was removed.
3038-
* @see TabGroupMetrics.METRIC_SOURCE for possible values.
3039-
* Defaults to "unknown".
30403027
*/
3041-
async removeTabGroup(
3042-
group,
3043-
options = {
3044-
isUserTriggered: false,
3045-
telemetrySource: this.TabGroupMetrics.METRIC_SOURCE.UNKNOWN,
3046-
}
3047-
) {
3028+
async removeTabGroup(group, options = {}) {
30483029
if (this.tabGroupMenu.panel.state != "closed") {
30493030
this.tabGroupMenu.panel.hidePopup(options.animate);
30503031
}
@@ -3078,8 +3059,6 @@
30783059
bubbles: true,
30793060
detail: {
30803061
skipSessionStore: options.skipSessionStore,
3081-
isUserTriggered: options.isUserTriggered,
3082-
telemetrySource: options.telemetrySource,
30833062
},
30843063
})
30853064
);

‎browser/components/tabbrowser/content/tabgroup-menu.js

+1-8
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818
}
1919
);
2020

21-
const { TabGroupMetrics } = ChromeUtils.importESModule(
22-
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs"
23-
);
24-
2521
class MozTabbrowserTabGroupMenu extends MozXULElement {
2622
static COLORS = [
2723
"blue",
@@ -445,10 +441,7 @@
445441
document
446442
.getElementById("tabGroupEditor_deleteGroup")
447443
.addEventListener("command", () => {
448-
gBrowser.removeTabGroup(this.activeGroup, {
449-
isUserTriggered: true,
450-
telemetrySource: TabGroupMetrics.METRIC_SOURCE.TAB_GROUP_MENU,
451-
});
444+
gBrowser.removeTabGroup(this.activeGroup);
452445
});
453446

454447
this.panel.addEventListener("popupshown", this);

‎browser/components/tabbrowser/metrics.yaml

-23
Original file line numberDiff line numberDiff line change
@@ -151,29 +151,6 @@ tabgroup:
151151
type: string
152152
expires: never
153153

154-
delete:
155-
type: event
156-
description: >
157-
Recorded when the user deletes a tab group
158-
notification_emails:
159-
- dao@mozilla.com
160-
- jswinarton@mozilla.com
161-
- sthompson@mozilla.com
162-
bugs:
163-
- https://bugzil.la/1938430
164-
data_reviews:
165-
- https://bugzil.la/1938430
166-
data_sensitivity:
167-
- interaction
168-
extra_keys:
169-
source:
170-
description: The system, surface, or control the user used to delete the tab group
171-
type: string
172-
id:
173-
description: Tab group ID of the tab group being deleted. Tab group IDs are derived from their creation timestamps and have no other relationship to any tab group metadata.
174-
type: string
175-
expires: never
176-
177154
active_groups:
178155
type: labeled_quantity
179156
description: >

‎browser/components/tabbrowser/moz.build

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ MOZ_SRC_FILES += [
1313
"NewTabPagePreloading.sys.mjs",
1414
"OpenInTabsUtils.sys.mjs",
1515
"SmartTabGrouping.sys.mjs",
16-
"TabGroupMetrics.sys.mjs",
1716
"TabsList.sys.mjs",
1817
"TabUnloader.sys.mjs",
1918
]

‎browser/components/tabbrowser/test/browser/tabs/browser_tab_groups_telemetry.js

-191
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,11 @@
22
* License, v. 2.0. If a copy of the MPL was not distributed with this
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

5-
const { TabStateFlusher } = ChromeUtils.importESModule(
6-
"resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
7-
);
8-
95
let resetTelemetry = async () => {
106
await Services.fog.testFlushAllChildren();
117
Services.fog.testResetFOG();
128
};
139

14-
window.gTabsPanel.init();
15-
1610
add_task(async function test_tabGroupTelemetry() {
1711
await resetTelemetry();
1812

@@ -202,188 +196,3 @@ add_task(async function test_tabGroupTelemetry() {
202196
await removeTabGroup(group1);
203197
await removeTabGroup(group2);
204198
});
205-
206-
/**
207-
* @param {MozTabbrowserTabGroup} tabGroup
208-
* @returns {Promise<MozPanel>}
209-
* Panel holding the tab group context menu for the requested tab group.
210-
*/
211-
async function openTabGroupContextMenu(tabGroup) {
212-
let tabgroupEditor = document.getElementById("tab-group-editor");
213-
let tabgroupPanel = tabgroupEditor.panel;
214-
215-
let panelShown = BrowserTestUtils.waitForPopupEvent(tabgroupPanel, "shown");
216-
EventUtils.synthesizeMouseAtCenter(
217-
tabGroup.querySelector(".tab-group-label"),
218-
{ type: "contextmenu", button: 2 },
219-
window
220-
);
221-
await panelShown;
222-
223-
return tabgroupPanel;
224-
}
225-
226-
add_task(async function test_tabGroupContextMenu_deleteTabGroup() {
227-
await resetTelemetry();
228-
229-
let tab = BrowserTestUtils.addTab(gBrowser, "https://example.com");
230-
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
231-
232-
let group = gBrowser.addTabGroup([tab]);
233-
// Close the automatically-opened "create tab group" menu.
234-
gBrowser.tabGroupMenu.close();
235-
let groupId = group.id;
236-
237-
let menu = await openTabGroupContextMenu(group);
238-
let deleteTabGroupButton = menu.querySelector("#tabGroupEditor_deleteGroup");
239-
deleteTabGroupButton.click();
240-
241-
await TestUtils.waitForCondition(
242-
() => !gBrowser.tabGroups.includes(group),
243-
"wait for group to be deleted"
244-
);
245-
246-
let tabGroupDeleteEvents = Glean.tabgroup.delete.testGetValue();
247-
Assert.equal(
248-
tabGroupDeleteEvents.length,
249-
1,
250-
"should have recorded a tabgroup.delete event"
251-
);
252-
253-
let [tabGroupDeleteEvent] = tabGroupDeleteEvents;
254-
Assert.deepEqual(
255-
tabGroupDeleteEvent.extra,
256-
{
257-
source: "tab_group",
258-
id: groupId,
259-
},
260-
"should have recorded the correct source and ID"
261-
);
262-
263-
await resetTelemetry();
264-
});
265-
266-
/**
267-
* @returns {Promise<PanelView>}
268-
*/
269-
async function openTabsMenu() {
270-
let viewShown = BrowserTestUtils.waitForEvent(
271-
window.document.getElementById("allTabsMenu-allTabsView"),
272-
"ViewShown"
273-
);
274-
window.document.getElementById("alltabs-button").click();
275-
return (await viewShown).target;
276-
}
277-
278-
/**
279-
* @returns {Promise<void>}
280-
*/
281-
async function closeTabsMenu() {
282-
let panel = window.document
283-
.getElementById("allTabsMenu-allTabsView")
284-
.closest("panel");
285-
if (!panel) {
286-
return;
287-
}
288-
let hidden = BrowserTestUtils.waitForPopupEvent(panel, "hidden");
289-
panel.hidePopup();
290-
await hidden;
291-
}
292-
293-
/**
294-
* @param {XULToolbarButton} triggerNode
295-
* @param {string} contextMenuId
296-
* @returns {Promise<XULMenuElement|XULPopupElement>}
297-
*/
298-
async function getContextMenu(triggerNode, contextMenuId) {
299-
let win = triggerNode.ownerGlobal;
300-
triggerNode.scrollIntoView();
301-
const contextMenu = win.document.getElementById(contextMenuId);
302-
const contextMenuShown = BrowserTestUtils.waitForPopupEvent(
303-
contextMenu,
304-
"shown"
305-
);
306-
307-
EventUtils.synthesizeMouseAtCenter(
308-
triggerNode,
309-
{ type: "contextmenu", button: 2 },
310-
win
311-
);
312-
await contextMenuShown;
313-
return contextMenu;
314-
}
315-
316-
/**
317-
* @param {XULMenuElement|XULPopupElement} contextMenu
318-
* @returns {Promise<void>}
319-
*/
320-
async function closeContextMenu(contextMenu) {
321-
let menuHidden = BrowserTestUtils.waitForPopupEvent(contextMenu, "hidden");
322-
contextMenu.hidePopup();
323-
await menuHidden;
324-
}
325-
326-
/**
327-
* Returns a new basic, unnamed tab group that is fully loaded in the browser
328-
* and in session state.
329-
*
330-
* @returns {Promise<MozTabbrowserTabGroup>}
331-
*/
332-
async function makeTabGroup() {
333-
let tab = BrowserTestUtils.addTab(gBrowser, "https://example.com");
334-
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
335-
await TabStateFlusher.flush(tab.linkedBrowser);
336-
337-
let group = gBrowser.addTabGroup([tab]);
338-
// Close the automatically-opened "create tab group" menu.
339-
gBrowser.tabGroupMenu.close();
340-
return group;
341-
}
342-
343-
add_task(async function test_tabOverflowContextMenu_deleteOpenTabGroup() {
344-
await resetTelemetry();
345-
346-
info("set up an open tab group to be deleted");
347-
let openGroup = await makeTabGroup();
348-
let openGroupId = openGroup.id;
349-
350-
info("delete the open tab group");
351-
let allTabsMenu = await openTabsMenu();
352-
let tabGroupButton = allTabsMenu.querySelector(
353-
`#allTabsMenu-groupsView [data-tab-group-id="${openGroupId}"]`
354-
);
355-
356-
let menu = await getContextMenu(
357-
tabGroupButton,
358-
"open-tab-group-context-menu"
359-
);
360-
361-
menu.querySelector("#open-tab-group-context-menu_delete").click();
362-
await closeContextMenu(menu);
363-
await closeTabsMenu();
364-
365-
await TestUtils.waitForCondition(
366-
() => !gBrowser.tabGroups.includes(openGroup),
367-
"wait for group to be deleted"
368-
);
369-
370-
let tabGroupDeleteEvents = Glean.tabgroup.delete.testGetValue();
371-
Assert.equal(
372-
tabGroupDeleteEvents.length,
373-
1,
374-
"should have recorded one tabgroup.delete event"
375-
);
376-
377-
let [openTabGroupDeleteEvent] = tabGroupDeleteEvents;
378-
379-
Assert.deepEqual(
380-
openTabGroupDeleteEvent.extra,
381-
{
382-
source: "tab_overflow",
383-
id: openGroupId,
384-
},
385-
"should have recorded the correct source and ID for the open tab group"
386-
);
387-
388-
await resetTelemetry();
389-
});

0 commit comments

Comments
 (0)
Failed to load comments.