summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/BrowserTelemetryUtils.sys.mjs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /toolkit/modules/BrowserTelemetryUtils.sys.mjs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/modules/BrowserTelemetryUtils.sys.mjs')
-rw-r--r--toolkit/modules/BrowserTelemetryUtils.sys.mjs70
1 files changed, 70 insertions, 0 deletions
diff --git a/toolkit/modules/BrowserTelemetryUtils.sys.mjs b/toolkit/modules/BrowserTelemetryUtils.sys.mjs
new file mode 100644
index 0000000000..c3035974e8
--- /dev/null
+++ b/toolkit/modules/BrowserTelemetryUtils.sys.mjs
@@ -0,0 +1,70 @@
+/* -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* 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/. */
+
+export var BrowserTelemetryUtils = {
+ recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
+ Services.tm.idleDispatchToMainThread(() => {
+ this._recordSiteOriginTelemetry(aWindows, aIsGeckoView);
+ });
+ },
+
+ computeSiteOriginCount(aWindows, aIsGeckoView) {
+ // Geckoview and Desktop work differently. On desktop, aBrowser objects
+ // holds an array of tabs which we can use to get the <browser> objects.
+ // In Geckoview, it is apps' responsibility to keep track of the tabs, so
+ // there isn't an easy way for us to get the tabs.
+ let tabs = [];
+ if (aIsGeckoView) {
+ // To get all active windows; Each tab has its own window
+ tabs = aWindows;
+ } else {
+ for (const win of aWindows) {
+ tabs = tabs.concat(win.gBrowser.tabs);
+ }
+ }
+
+ let topLevelBCs = [];
+
+ for (const tab of tabs) {
+ let browser;
+ if (aIsGeckoView) {
+ browser = tab.browser;
+ } else {
+ browser = tab.linkedBrowser;
+ }
+
+ if (browser.browsingContext) {
+ // This is the top level browsingContext
+ topLevelBCs.push(browser.browsingContext);
+ }
+ }
+
+ return CanonicalBrowsingContext.countSiteOrigins(topLevelBCs);
+ },
+
+ _recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
+ let currentTime = Date.now();
+
+ // default is 5 minutes
+ if (!this.min_interval) {
+ this.min_interval = Services.prefs.getIntPref(
+ "telemetry.number_of_site_origin.min_interval",
+ 300000
+ );
+ }
+
+ let originCount = this.computeSiteOriginCount(aWindows, aIsGeckoView);
+
+ // Discard the first load because most of the time the first load only has 1
+ // tab and 1 window open, so it is useless to report it.
+ if (!this._lastRecordSiteOrigin) {
+ this._lastRecordSiteOrigin = currentTime;
+ } else if (currentTime >= this._lastRecordSiteOrigin + this.min_interval) {
+ this._lastRecordSiteOrigin = currentTime;
+
+ Glean.geckoview.documentSiteOrigins.accumulateSamples([originCount]);
+ }
+ },
+};