Backed out changeset 68d101b370d8 (bug 1938430) for permafailures on browser_tab_manager_groups.js (Bug 1938697).
This commit is contained in:
@@ -8,12 +8,6 @@
|
|||||||
document.addEventListener(
|
document.addEventListener(
|
||||||
"DOMContentLoaded",
|
"DOMContentLoaded",
|
||||||
() => {
|
() => {
|
||||||
const lazy = {};
|
|
||||||
ChromeUtils.defineESModuleGetters(lazy, {
|
|
||||||
TabGroupMetrics:
|
|
||||||
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs",
|
|
||||||
});
|
|
||||||
|
|
||||||
let mainPopupSet = document.getElementById("mainPopupSet");
|
let mainPopupSet = document.getElementById("mainPopupSet");
|
||||||
// eslint-disable-next-line complexity
|
// eslint-disable-next-line complexity
|
||||||
mainPopupSet.addEventListener("command", event => {
|
mainPopupSet.addEventListener("command", event => {
|
||||||
@@ -136,11 +130,7 @@ document.addEventListener(
|
|||||||
let tabGroup = gBrowser.getTabGroupById(tabGroupId);
|
let tabGroup = gBrowser.getTabGroupById(tabGroupId);
|
||||||
// Tabs need to be removed by their owning `Tabbrowser` or else
|
// Tabs need to be removed by their owning `Tabbrowser` or else
|
||||||
// there are errors.
|
// there are errors.
|
||||||
tabGroup.ownerGlobal.gBrowser.removeTabGroup(tabGroup, {
|
tabGroup.ownerGlobal.gBrowser.removeTabGroup(tabGroup);
|
||||||
isUserTriggered: true,
|
|
||||||
telemetrySource:
|
|
||||||
lazy.TabGroupMetrics.METRIC_SOURCE.TAB_OVERFLOW_MENU,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A common list of systems, surfaces, controls, etc. from which user
|
|
||||||
* interactions with tab groups could originate. These "source" values
|
|
||||||
* should be sent as extra data with tab group-related metrics events.
|
|
||||||
*/
|
|
||||||
const METRIC_SOURCE = Object.freeze({
|
|
||||||
TAB_OVERFLOW_MENU: "tab_overflow",
|
|
||||||
TAB_GROUP_MENU: "tab_group",
|
|
||||||
UNKNOWN: "unknown",
|
|
||||||
});
|
|
||||||
|
|
||||||
export const TabGroupMetrics = {
|
|
||||||
METRIC_SOURCE,
|
|
||||||
};
|
|
||||||
@@ -110,8 +110,6 @@
|
|||||||
PictureInPicture: "resource://gre/modules/PictureInPicture.sys.mjs",
|
PictureInPicture: "resource://gre/modules/PictureInPicture.sys.mjs",
|
||||||
SmartTabGroupingManager:
|
SmartTabGroupingManager:
|
||||||
"moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs",
|
"moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs",
|
||||||
TabGroupMetrics:
|
|
||||||
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs",
|
|
||||||
UrlbarProviderOpenTabs:
|
UrlbarProviderOpenTabs:
|
||||||
"resource:///modules/UrlbarProviderOpenTabs.sys.mjs",
|
"resource:///modules/UrlbarProviderOpenTabs.sys.mjs",
|
||||||
});
|
});
|
||||||
@@ -2967,9 +2965,7 @@
|
|||||||
* switches windows).
|
* switches windows).
|
||||||
* Causes the group create UI to be displayed and telemetry events to be fired.
|
* Causes the group create UI to be displayed and telemetry events to be fired.
|
||||||
* @param {string} [options.telemetryUserCreateSource]
|
* @param {string} [options.telemetryUserCreateSource]
|
||||||
* The means by which the tab group was created.
|
* The means by which the tab group was created. Defaults to "unknown".
|
||||||
* @see TabGroupMetrics.METRIC_SOURCE for possible values.
|
|
||||||
* Defaults to "unknown".
|
|
||||||
*/
|
*/
|
||||||
addTabGroup(
|
addTabGroup(
|
||||||
tabs,
|
tabs,
|
||||||
@@ -3028,23 +3024,8 @@
|
|||||||
* The tab group to remove.
|
* The tab group to remove.
|
||||||
* @param {object} [options]
|
* @param {object} [options]
|
||||||
* Options to use when removing tabs. @see removeTabs for more info.
|
* Options to use when removing tabs. @see removeTabs for more info.
|
||||||
* @param {boolean} [options.isUserTriggered=false]
|
|
||||||
* Should be true if this group is being removed by an explicit
|
|
||||||
* request from the user (as opposed to a group being removed
|
|
||||||
* for technical reasons, such as when an already existing group
|
|
||||||
* switches windows). This causes telemetry events to fire.
|
|
||||||
* @param {string} [options.telemetrySource="unknown"]
|
|
||||||
* The means by which the tab group was removed.
|
|
||||||
* @see TabGroupMetrics.METRIC_SOURCE for possible values.
|
|
||||||
* Defaults to "unknown".
|
|
||||||
*/
|
*/
|
||||||
async removeTabGroup(
|
async removeTabGroup(group, options = {}) {
|
||||||
group,
|
|
||||||
options = {
|
|
||||||
isUserTriggered: false,
|
|
||||||
telemetrySource: this.TabGroupMetrics.METRIC_SOURCE.UNKNOWN,
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
if (this.tabGroupMenu.panel.state != "closed") {
|
if (this.tabGroupMenu.panel.state != "closed") {
|
||||||
this.tabGroupMenu.panel.hidePopup(options.animate);
|
this.tabGroupMenu.panel.hidePopup(options.animate);
|
||||||
}
|
}
|
||||||
@@ -3078,8 +3059,6 @@
|
|||||||
bubbles: true,
|
bubbles: true,
|
||||||
detail: {
|
detail: {
|
||||||
skipSessionStore: options.skipSessionStore,
|
skipSessionStore: options.skipSessionStore,
|
||||||
isUserTriggered: options.isUserTriggered,
|
|
||||||
telemetrySource: options.telemetrySource,
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,10 +18,6 @@
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const { TabGroupMetrics } = ChromeUtils.importESModule(
|
|
||||||
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs"
|
|
||||||
);
|
|
||||||
|
|
||||||
class MozTabbrowserTabGroupMenu extends MozXULElement {
|
class MozTabbrowserTabGroupMenu extends MozXULElement {
|
||||||
static COLORS = [
|
static COLORS = [
|
||||||
"blue",
|
"blue",
|
||||||
@@ -445,10 +441,7 @@
|
|||||||
document
|
document
|
||||||
.getElementById("tabGroupEditor_deleteGroup")
|
.getElementById("tabGroupEditor_deleteGroup")
|
||||||
.addEventListener("command", () => {
|
.addEventListener("command", () => {
|
||||||
gBrowser.removeTabGroup(this.activeGroup, {
|
gBrowser.removeTabGroup(this.activeGroup);
|
||||||
isUserTriggered: true,
|
|
||||||
telemetrySource: TabGroupMetrics.METRIC_SOURCE.TAB_GROUP_MENU,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.panel.addEventListener("popupshown", this);
|
this.panel.addEventListener("popupshown", this);
|
||||||
|
|||||||
@@ -151,29 +151,6 @@ tabgroup:
|
|||||||
type: string
|
type: string
|
||||||
expires: never
|
expires: never
|
||||||
|
|
||||||
delete:
|
|
||||||
type: event
|
|
||||||
description: >
|
|
||||||
Recorded when the user deletes a tab group
|
|
||||||
notification_emails:
|
|
||||||
- dao@mozilla.com
|
|
||||||
- jswinarton@mozilla.com
|
|
||||||
- sthompson@mozilla.com
|
|
||||||
bugs:
|
|
||||||
- https://bugzil.la/1938430
|
|
||||||
data_reviews:
|
|
||||||
- https://bugzil.la/1938430
|
|
||||||
data_sensitivity:
|
|
||||||
- interaction
|
|
||||||
extra_keys:
|
|
||||||
source:
|
|
||||||
description: The system, surface, or control the user used to delete the tab group
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
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.
|
|
||||||
type: string
|
|
||||||
expires: never
|
|
||||||
|
|
||||||
active_groups:
|
active_groups:
|
||||||
type: labeled_quantity
|
type: labeled_quantity
|
||||||
description: >
|
description: >
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ MOZ_SRC_FILES += [
|
|||||||
"NewTabPagePreloading.sys.mjs",
|
"NewTabPagePreloading.sys.mjs",
|
||||||
"OpenInTabsUtils.sys.mjs",
|
"OpenInTabsUtils.sys.mjs",
|
||||||
"SmartTabGrouping.sys.mjs",
|
"SmartTabGrouping.sys.mjs",
|
||||||
"TabGroupMetrics.sys.mjs",
|
|
||||||
"TabsList.sys.mjs",
|
"TabsList.sys.mjs",
|
||||||
"TabUnloader.sys.mjs",
|
"TabUnloader.sys.mjs",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,17 +2,11 @@
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
const { TabStateFlusher } = ChromeUtils.importESModule(
|
|
||||||
"resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
|
|
||||||
);
|
|
||||||
|
|
||||||
let resetTelemetry = async () => {
|
let resetTelemetry = async () => {
|
||||||
await Services.fog.testFlushAllChildren();
|
await Services.fog.testFlushAllChildren();
|
||||||
Services.fog.testResetFOG();
|
Services.fog.testResetFOG();
|
||||||
};
|
};
|
||||||
|
|
||||||
window.gTabsPanel.init();
|
|
||||||
|
|
||||||
add_task(async function test_tabGroupTelemetry() {
|
add_task(async function test_tabGroupTelemetry() {
|
||||||
await resetTelemetry();
|
await resetTelemetry();
|
||||||
|
|
||||||
@@ -202,188 +196,3 @@ add_task(async function test_tabGroupTelemetry() {
|
|||||||
await removeTabGroup(group1);
|
await removeTabGroup(group1);
|
||||||
await removeTabGroup(group2);
|
await removeTabGroup(group2);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {MozTabbrowserTabGroup} tabGroup
|
|
||||||
* @returns {Promise<MozPanel>}
|
|
||||||
* Panel holding the tab group context menu for the requested tab group.
|
|
||||||
*/
|
|
||||||
async function openTabGroupContextMenu(tabGroup) {
|
|
||||||
let tabgroupEditor = document.getElementById("tab-group-editor");
|
|
||||||
let tabgroupPanel = tabgroupEditor.panel;
|
|
||||||
|
|
||||||
let panelShown = BrowserTestUtils.waitForPopupEvent(tabgroupPanel, "shown");
|
|
||||||
EventUtils.synthesizeMouseAtCenter(
|
|
||||||
tabGroup.querySelector(".tab-group-label"),
|
|
||||||
{ type: "contextmenu", button: 2 },
|
|
||||||
window
|
|
||||||
);
|
|
||||||
await panelShown;
|
|
||||||
|
|
||||||
return tabgroupPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_task(async function test_tabGroupContextMenu_deleteTabGroup() {
|
|
||||||
await resetTelemetry();
|
|
||||||
|
|
||||||
let tab = BrowserTestUtils.addTab(gBrowser, "https://example.com");
|
|
||||||
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
||||||
|
|
||||||
let group = gBrowser.addTabGroup([tab]);
|
|
||||||
// Close the automatically-opened "create tab group" menu.
|
|
||||||
gBrowser.tabGroupMenu.close();
|
|
||||||
let groupId = group.id;
|
|
||||||
|
|
||||||
let menu = await openTabGroupContextMenu(group);
|
|
||||||
let deleteTabGroupButton = menu.querySelector("#tabGroupEditor_deleteGroup");
|
|
||||||
deleteTabGroupButton.click();
|
|
||||||
|
|
||||||
await TestUtils.waitForCondition(
|
|
||||||
() => !gBrowser.tabGroups.includes(group),
|
|
||||||
"wait for group to be deleted"
|
|
||||||
);
|
|
||||||
|
|
||||||
let tabGroupDeleteEvents = Glean.tabgroup.delete.testGetValue();
|
|
||||||
Assert.equal(
|
|
||||||
tabGroupDeleteEvents.length,
|
|
||||||
1,
|
|
||||||
"should have recorded a tabgroup.delete event"
|
|
||||||
);
|
|
||||||
|
|
||||||
let [tabGroupDeleteEvent] = tabGroupDeleteEvents;
|
|
||||||
Assert.deepEqual(
|
|
||||||
tabGroupDeleteEvent.extra,
|
|
||||||
{
|
|
||||||
source: "tab_group",
|
|
||||||
id: groupId,
|
|
||||||
},
|
|
||||||
"should have recorded the correct source and ID"
|
|
||||||
);
|
|
||||||
|
|
||||||
await resetTelemetry();
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Promise<PanelView>}
|
|
||||||
*/
|
|
||||||
async function openTabsMenu() {
|
|
||||||
let viewShown = BrowserTestUtils.waitForEvent(
|
|
||||||
window.document.getElementById("allTabsMenu-allTabsView"),
|
|
||||||
"ViewShown"
|
|
||||||
);
|
|
||||||
window.document.getElementById("alltabs-button").click();
|
|
||||||
return (await viewShown).target;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Promise<void>}
|
|
||||||
*/
|
|
||||||
async function closeTabsMenu() {
|
|
||||||
let panel = window.document
|
|
||||||
.getElementById("allTabsMenu-allTabsView")
|
|
||||||
.closest("panel");
|
|
||||||
if (!panel) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let hidden = BrowserTestUtils.waitForPopupEvent(panel, "hidden");
|
|
||||||
panel.hidePopup();
|
|
||||||
await hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {XULToolbarButton} triggerNode
|
|
||||||
* @param {string} contextMenuId
|
|
||||||
* @returns {Promise<XULMenuElement|XULPopupElement>}
|
|
||||||
*/
|
|
||||||
async function getContextMenu(triggerNode, contextMenuId) {
|
|
||||||
let win = triggerNode.ownerGlobal;
|
|
||||||
triggerNode.scrollIntoView();
|
|
||||||
const contextMenu = win.document.getElementById(contextMenuId);
|
|
||||||
const contextMenuShown = BrowserTestUtils.waitForPopupEvent(
|
|
||||||
contextMenu,
|
|
||||||
"shown"
|
|
||||||
);
|
|
||||||
|
|
||||||
EventUtils.synthesizeMouseAtCenter(
|
|
||||||
triggerNode,
|
|
||||||
{ type: "contextmenu", button: 2 },
|
|
||||||
win
|
|
||||||
);
|
|
||||||
await contextMenuShown;
|
|
||||||
return contextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {XULMenuElement|XULPopupElement} contextMenu
|
|
||||||
* @returns {Promise<void>}
|
|
||||||
*/
|
|
||||||
async function closeContextMenu(contextMenu) {
|
|
||||||
let menuHidden = BrowserTestUtils.waitForPopupEvent(contextMenu, "hidden");
|
|
||||||
contextMenu.hidePopup();
|
|
||||||
await menuHidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a new basic, unnamed tab group that is fully loaded in the browser
|
|
||||||
* and in session state.
|
|
||||||
*
|
|
||||||
* @returns {Promise<MozTabbrowserTabGroup>}
|
|
||||||
*/
|
|
||||||
async function makeTabGroup() {
|
|
||||||
let tab = BrowserTestUtils.addTab(gBrowser, "https://example.com");
|
|
||||||
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
||||||
await TabStateFlusher.flush(tab.linkedBrowser);
|
|
||||||
|
|
||||||
let group = gBrowser.addTabGroup([tab]);
|
|
||||||
// Close the automatically-opened "create tab group" menu.
|
|
||||||
gBrowser.tabGroupMenu.close();
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_task(async function test_tabOverflowContextMenu_deleteOpenTabGroup() {
|
|
||||||
await resetTelemetry();
|
|
||||||
|
|
||||||
info("set up an open tab group to be deleted");
|
|
||||||
let openGroup = await makeTabGroup();
|
|
||||||
let openGroupId = openGroup.id;
|
|
||||||
|
|
||||||
info("delete the open tab group");
|
|
||||||
let allTabsMenu = await openTabsMenu();
|
|
||||||
let tabGroupButton = allTabsMenu.querySelector(
|
|
||||||
`#allTabsMenu-groupsView [data-tab-group-id="${openGroupId}"]`
|
|
||||||
);
|
|
||||||
|
|
||||||
let menu = await getContextMenu(
|
|
||||||
tabGroupButton,
|
|
||||||
"open-tab-group-context-menu"
|
|
||||||
);
|
|
||||||
|
|
||||||
menu.querySelector("#open-tab-group-context-menu_delete").click();
|
|
||||||
await closeContextMenu(menu);
|
|
||||||
await closeTabsMenu();
|
|
||||||
|
|
||||||
await TestUtils.waitForCondition(
|
|
||||||
() => !gBrowser.tabGroups.includes(openGroup),
|
|
||||||
"wait for group to be deleted"
|
|
||||||
);
|
|
||||||
|
|
||||||
let tabGroupDeleteEvents = Glean.tabgroup.delete.testGetValue();
|
|
||||||
Assert.equal(
|
|
||||||
tabGroupDeleteEvents.length,
|
|
||||||
1,
|
|
||||||
"should have recorded one tabgroup.delete event"
|
|
||||||
);
|
|
||||||
|
|
||||||
let [openTabGroupDeleteEvent] = tabGroupDeleteEvents;
|
|
||||||
|
|
||||||
Assert.deepEqual(
|
|
||||||
openTabGroupDeleteEvent.extra,
|
|
||||||
{
|
|
||||||
source: "tab_overflow",
|
|
||||||
id: openGroupId,
|
|
||||||
},
|
|
||||||
"should have recorded the correct source and ID for the open tab group"
|
|
||||||
);
|
|
||||||
|
|
||||||
await resetTelemetry();
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||||
SearchSERPTelemetryUtils:
|
SearchSERPTelemetryUtils:
|
||||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||||
TabGroupMetrics:
|
|
||||||
"moz-src:///browser/components/tabbrowser/TabGroupMetrics.sys.mjs",
|
|
||||||
WindowsInstallsInfo:
|
WindowsInstallsInfo:
|
||||||
"resource://gre/modules/components-utils/WindowsInstallsInfo.sys.mjs",
|
"resource://gre/modules/components-utils/WindowsInstallsInfo.sys.mjs",
|
||||||
|
|
||||||
@@ -598,9 +597,6 @@ export let BrowserUsageTelemetry = {
|
|||||||
case "TabGroupExpand":
|
case "TabGroupExpand":
|
||||||
this._onTabGroupExpandOrCollapse();
|
this._onTabGroupExpandOrCollapse();
|
||||||
break;
|
break;
|
||||||
case "TabGroupRemoveRequested":
|
|
||||||
this._onTabGroupRemoveRequested(event);
|
|
||||||
break;
|
|
||||||
case "unload":
|
case "unload":
|
||||||
this._unregisterWindow(event.target);
|
this._unregisterWindow(event.target);
|
||||||
break;
|
break;
|
||||||
@@ -1148,7 +1144,7 @@ export let BrowserUsageTelemetry = {
|
|||||||
win.addEventListener("TabOpen", this, true);
|
win.addEventListener("TabOpen", this, true);
|
||||||
win.addEventListener("TabPinned", this, true);
|
win.addEventListener("TabPinned", this, true);
|
||||||
win.addEventListener("TabGroupCreate", this);
|
win.addEventListener("TabGroupCreate", this);
|
||||||
win.addEventListener("TabGroupRemoveRequested", this);
|
win.addEventListener("TabGroupRemoved", this);
|
||||||
win.addEventListener("TabGrouped", this);
|
win.addEventListener("TabGrouped", this);
|
||||||
win.addEventListener("TabUngrouped", this);
|
win.addEventListener("TabUngrouped", this);
|
||||||
win.addEventListener("TabGroupCollapse", this);
|
win.addEventListener("TabGroupCollapse", this);
|
||||||
@@ -1166,7 +1162,7 @@ export let BrowserUsageTelemetry = {
|
|||||||
win.removeEventListener("TabOpen", this, true);
|
win.removeEventListener("TabOpen", this, true);
|
||||||
win.removeEventListener("TabPinned", this, true);
|
win.removeEventListener("TabPinned", this, true);
|
||||||
win.removeEventListener("TabGroupCreate", this);
|
win.removeEventListener("TabGroupCreate", this);
|
||||||
win.removeEventListener("TabGroupRemoveRequested", this);
|
win.removeEventListener("TabGroupRemoved", this);
|
||||||
win.removeEventListener("TabGrouped", this);
|
win.removeEventListener("TabGrouped", this);
|
||||||
win.removeEventListener("TabUngrouped", this);
|
win.removeEventListener("TabUngrouped", this);
|
||||||
win.removeEventListener("TabGroupCollapse", this);
|
win.removeEventListener("TabGroupCollapse", this);
|
||||||
@@ -1306,23 +1302,6 @@ export let BrowserUsageTelemetry = {
|
|||||||
Glean.tabgroup.activeGroups.expanded.set(expanded);
|
Glean.tabgroup.activeGroups.expanded.set(expanded);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {CustomEvent} event
|
|
||||||
*/
|
|
||||||
_onTabGroupRemoveRequested(event) {
|
|
||||||
let {
|
|
||||||
isUserTriggered = false,
|
|
||||||
telemetrySource = lazy.TabGroupMetrics.METRIC_SOURCE.UNKNOWN,
|
|
||||||
} = event.detail;
|
|
||||||
|
|
||||||
if (isUserTriggered) {
|
|
||||||
Glean.tabgroup.delete.record({
|
|
||||||
id: event.target.id,
|
|
||||||
source: telemetrySource,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tracks the window count and registers the listeners for the tab count.
|
* Tracks the window count and registers the listeners for the tab count.
|
||||||
* @param{Object} win The window object.
|
* @param{Object} win The window object.
|
||||||
|
|||||||
Reference in New Issue
Block a user