tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit a8adba21706f3cc0c935c3bd18fe5f32e6807176
parent be77b2595a99898b209a1a14eabffe5efe00aae7
Author: Jeremy Swinarton <jswinarton@mozilla.com>
Date:   Wed,  7 Jan 2026 13:07:02 +0000

Bug 2003703: Telemetry event when tab note is edited r=sthompson,tabbrowser-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D277931

Diffstat:
Mbrowser/components/tabnotes/TabNotesController.sys.mjs | 14+++++++++++++-
Mbrowser/components/tabnotes/metrics.yaml | 22++++++++++++++++++++++
Mbrowser/components/tabnotes/test/browser/browser_tab_notes_menu.js | 12++++++++++++
3 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/browser/components/tabnotes/TabNotesController.sys.mjs b/browser/components/tabnotes/TabNotesController.sys.mjs @@ -103,7 +103,7 @@ class TabNotesControllerClass { } /** - * @param {CanonicalURLIdentifiedEvent|TabNoteCreatedEvent|TabNoteRemovedEvent} event + * @param {CanonicalURLIdentifiedEvent|TabNoteCreatedEvent|TabNoteEditedEvent|TabNoteRemovedEvent} event */ handleEvent(event) { switch (event.type) { @@ -146,6 +146,18 @@ class TabNotesControllerClass { lazy.logConsole.debug("TabNote:Created", canonicalUrl); } break; + case "TabNote:Edited": + { + const { canonicalUrl } = event.target; + const { telemetrySource } = event.detail; + if (telemetrySource) { + Glean.tabNotes.edited.record({ + source: telemetrySource, + }); + } + lazy.logConsole.debug("TabNote:Edited", canonicalUrl); + } + break; case "TabNote:Removed": { const { telemetrySource, note } = event.detail; diff --git a/browser/components/tabnotes/metrics.yaml b/browser/components/tabnotes/metrics.yaml @@ -32,6 +32,28 @@ tab_notes: - `hover_menu` # Tab hover preview panel's "Add Note" button type: string expires: never + edited: + type: event + description: > + Recorded when a user edits an existing tab note. + notification_emails: + - sthompson@mozilla.com + - jswinarton@mozilla.com + bugs: + - https://bugzil.la/2003703 + data_reviews: + - https://bugzil.la/2003703 + data_sensitivity: + - interaction + extra_keys: + source: + description: > + Identifies the user interface entry point that resulted in this tab + note being edited. Expected values: + - `context_menu` # Tab context menu's "Update Note" menu item + - `hover_menu` # Tab hover preview panel's edit note icon button + type: string + expires: never deleted: type: event description: > diff --git a/browser/components/tabnotes/test/browser/browser_tab_notes_menu.js b/browser/components/tabnotes/test/browser/browser_tab_notes_menu.js @@ -253,6 +253,11 @@ add_task(async function test_editTabNote() { tabNoteMenu.querySelector("#tab-note-editor-button-save").click(); await Promise.all([menuHidden, tabNoteEdited]); + await BrowserTestUtils.waitForCondition( + () => Glean.tabNotes.edited.testGetValue()?.length, + "wait for event to be recorded" + ); + const tabNote = await TabNotes.get(tab); Assert.equal( tabNote.text, @@ -260,6 +265,13 @@ add_task(async function test_editTabNote() { "The updated text entered into the textarea was saved as a note" ); + const [editedMetric] = Glean.tabNotes.edited.testGetValue(); + Assert.deepEqual( + editedMetric.extra, + { source: "context_menu" }, + "edited event extra data should show that the tab note was edited from the context menu" + ); + await TabNotes.delete(tab); BrowserTestUtils.removeTab(tab); await SpecialPowers.popPrefEnv();