Skip to content

Commit 3aeee99

Browse files
authored
Add FXIOS-13876 [Toolbar] Record telemetry for middle button customization (#30078)
* Add metrics * Record telemetry * Add tests * Rename method * Add method to record labeled_string metric * Update toolbar middle button metric and remove boolean metric * Fix Swiftlint warnings * Add PR number * Fix tests
1 parent d9ab14b commit 3aeee99

File tree

12 files changed

+64
-25
lines changed

12 files changed

+64
-25
lines changed

firefox-ios/Client/Frontend/Browser/Toolbars/Redux/ToolbarMiddleware.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ final class ToolbarMiddleware: FeatureFlaggable {
100100
NavigationBarMiddleButtonType.newTab
101101
}
102102

103+
toolbarTelemetry.middleButtonType(middleButton)
104+
103105
let action = ToolbarAction(
104106
toolbarPosition: toolbarPosition,
105107
toolbarLayout: toolbarLayout,

firefox-ios/Client/Frontend/Browser/Toolbars/ToolbarTelemetry.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ struct ToolbarTelemetry {
1212
self.gleanWrapper = gleanWrapper
1313
}
1414

15+
func middleButtonType(_ buttonType: NavigationBarMiddleButtonType) {
16+
gleanWrapper.recordString(for: GleanMetrics.UserToolbar.middleButtonType, value: buttonType.rawValue)
17+
}
18+
1519
// Tap
1620
func qrCodeButtonTapped(isPrivate: Bool) {
1721
let isPrivateExtra = GleanMetrics.Toolbar.QrScanButtonTappedExtra(isPrivate: isPrivate)

firefox-ios/Client/Frontend/Library/Bookmarks/BookmarksTelemetry.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,23 @@ struct BookmarksTelemetry {
2121
}
2222

2323
func addBookmark(eventLabel: EventLabel) {
24-
gleanWrapper.recordLabel(for: GleanMetrics.Bookmarks.add,
25-
label: eventLabel.rawValue)
24+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Bookmarks.add,
25+
label: eventLabel.rawValue)
2626
}
2727

2828
func deleteBookmark(eventLabel: EventLabel) {
29-
gleanWrapper.recordLabel(for: GleanMetrics.Bookmarks.delete,
30-
label: eventLabel.rawValue)
29+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Bookmarks.delete,
30+
label: eventLabel.rawValue)
3131
}
3232

3333
func openBookmarksSite(eventLabel: EventLabel) {
34-
gleanWrapper.recordLabel(for: GleanMetrics.Bookmarks.open,
35-
label: eventLabel.rawValue)
34+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Bookmarks.open,
35+
label: eventLabel.rawValue)
3636
}
3737

3838
func editBookmark(eventLabel: EventLabel) {
39-
gleanWrapper.recordLabel(for: GleanMetrics.Bookmarks.edit,
40-
label: eventLabel.rawValue)
39+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Bookmarks.edit,
40+
label: eventLabel.rawValue)
4141
}
4242

4343
func addBookmarkFolder() {

firefox-ios/Client/Glean/probes/toolbar.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,3 +429,18 @@ awesomebar:
429429
notification_emails:
430430
431431
expires: "2026-01-01"
432+
433+
user.toolbar:
434+
middle_button_type:
435+
type: string
436+
description: |
437+
Records the user's preference for the middle button (newTab or home).
438+
send_in_pings:
439+
- metrics
440+
bugs:
441+
- https://github.com/mozilla-mobile/firefox-ios/issues/30060
442+
data_reviews:
443+
- https://github.com/mozilla-mobile/firefox-ios/pull/30078
444+
notification_emails:
445+
446+
expires: "2026-01-01"

firefox-ios/Client/Telemetry/GleanWrapper.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ protocol GleanWrapper {
1717
func recordEvent<NoExtras>(for metric: EventMetricType<NoExtras>) where NoExtras: EventExtras
1818
func incrementCounter(for metric: CounterMetricType)
1919
func recordString(for metric: StringMetricType, value: String)
20-
func recordLabel(for metric: LabeledMetricType<CounterMetricType>, label: String)
20+
func incrementLabeledCounter(for metric: LabeledMetricType<CounterMetricType>, label: String)
2121
func setBoolean(for metric: BooleanMetricType, value: Bool)
2222
func recordQuantity(for metric: QuantityMetricType, value: Int64)
23+
func recordLabel(for metric: LabeledMetricType<StringMetricType>, label: String, value: String)
2324
func recordLabeledQuantity(for metric: LabeledMetricType<QuantityMetricType>, label: String, value: Int64)
2425
func recordUrl(for metric: UrlMetricType, value: URL)
2526
func recordDatetime(for metric: DatetimeMetricType, value: Date)
@@ -84,7 +85,7 @@ struct DefaultGleanWrapper: GleanWrapper {
8485
metric.set(value)
8586
}
8687

87-
func recordLabel(for metric: LabeledMetricType<CounterMetricType>, label: String) {
88+
func incrementLabeledCounter(for metric: LabeledMetricType<CounterMetricType>, label: String) {
8889
metric[label].add()
8990
}
9091

@@ -96,6 +97,10 @@ struct DefaultGleanWrapper: GleanWrapper {
9697
metric.set(value)
9798
}
9899

100+
func recordLabel(for metric: LabeledMetricType<StringMetricType>, label: String, value: String) {
101+
metric[label].set(value)
102+
}
103+
99104
func recordLabeledQuantity(for metric: LabeledMetricType<QuantityMetricType>, label: String, value: Int64) {
100105
metric[label].set(value)
101106
}

firefox-ios/Client/Telemetry/HomepageTelemetry.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ struct HomepageTelemetry {
4949
}
5050

5151
func sendSectionLabeledCounter(for itemType: ItemType) {
52-
gleanWrapper.recordLabel(for: GleanMetrics.Homepage.sectionViewed, label: itemType.sectionName)
52+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Homepage.sectionViewed, label: itemType.sectionName)
5353
}
5454

5555
// MARK: - Top Sites
@@ -70,7 +70,7 @@ struct HomepageTelemetry {
7070

7171
func sendTopSitesPressedEvent(position: Int, tileType: String, isZeroSearch: Bool) {
7272
let originExtra: TelemetryWrapper.EventValue = isZeroSearch ? .fxHomepageOriginZeroSearch : .fxHomepageOriginOther
73-
gleanWrapper.recordLabel(
73+
gleanWrapper.incrementLabeledCounter(
7474
for: GleanMetrics.TopSites.pressedTileOrigin,
7575
label: originExtra.rawValue
7676
)
@@ -83,8 +83,8 @@ struct HomepageTelemetry {
8383
// MARK: - Pocket
8484
func sendTapOnPocketStoryCounter(position: Int, isZeroSearch: Bool) {
8585
let originExtra: TelemetryWrapper.EventValue = isZeroSearch ? .fxHomepageOriginZeroSearch : .fxHomepageOriginOther
86-
gleanWrapper.recordLabel(for: GleanMetrics.Pocket.openStoryOrigin, label: originExtra.rawValue)
87-
gleanWrapper.recordLabel(for: GleanMetrics.Pocket.openStoryPosition, label: "position-\(position)")
86+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Pocket.openStoryOrigin, label: originExtra.rawValue)
87+
gleanWrapper.incrementLabeledCounter(for: GleanMetrics.Pocket.openStoryPosition, label: "position-\(position)")
8888
}
8989

9090
func sendPocketSectionCounter() {

firefox-ios/firefox-ios-tests/Tests/ClientTests/Frontend/Homepage Rebuild/Redux/HomepageMiddlewareTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ final class HomepageMiddlewareTests: XCTestCase, StoreTestUtility {
240240
let resultMetricType = type(of: savedMetric)
241241
let debugMessage = TelemetryDebugMessage(expectedMetric: expectedMetricType, resultMetric: resultMetricType)
242242

243-
XCTAssertEqual(mockGleanWrapper.recordLabelCalled, 1)
243+
XCTAssertEqual(mockGleanWrapper.incrementLabeledCounterCalled, 1)
244244
XCTAssert(resultMetricType == expectedMetricType, debugMessage.text)
245245
XCTAssertEqual(mockGleanWrapper?.savedLabel as? String, "top_sites")
246246
}

firefox-ios/firefox-ios-tests/Tests/ClientTests/Frontend/Homepage Rebuild/Redux/MerinoMiddlewareTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ final class MerinoMiddlewareTests: XCTestCase, StoreTestUtility {
157157
)
158158

159159
XCTAssertEqual(mockGleanWrapper.savedEvents.count, 2)
160-
XCTAssertEqual(mockGleanWrapper.recordLabelCalled, 2)
160+
XCTAssertEqual(mockGleanWrapper.incrementLabeledCounterCalled, 2)
161161
XCTAssert(firstResultMetricType == expectedFirstMetricType, debugMessage.text)
162162
XCTAssert(secondResultMetricType == expectedSecondMetricType, secondDebugMessage.text)
163163
}

firefox-ios/firefox-ios-tests/Tests/ClientTests/Frontend/Homepage Rebuild/Redux/TopSitesMiddlewareTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ final class TopSitesMiddlewareTests: XCTestCase, StoreTestUtility {
193193
try checkTopSitesPressedMetrics(label: "zero-search", position: "0", tileType: "sponsored")
194194

195195
XCTAssertEqual(mockGleanWrapper.savedEvents.count, 2)
196-
XCTAssertEqual(mockGleanWrapper.recordLabelCalled, 1)
196+
XCTAssertEqual(mockGleanWrapper.incrementLabeledCounterCalled, 1)
197197
XCTAssertEqual(mockGleanWrapper.recordEventCalled, 1)
198198
XCTAssertEqual(sponsoredTelemetry.sendClickTelemetryCalled, 1)
199199
XCTAssertEqual(unifiedAdsTelemetry.sendClickTelemetryCalled, 0)
@@ -222,7 +222,7 @@ final class TopSitesMiddlewareTests: XCTestCase, StoreTestUtility {
222222
try checkTopSitesPressedMetrics(label: "zero-search", position: "0", tileType: "sponsored")
223223

224224
XCTAssertEqual(mockGleanWrapper.savedEvents.count, 2)
225-
XCTAssertEqual(mockGleanWrapper.recordLabelCalled, 1)
225+
XCTAssertEqual(mockGleanWrapper.incrementLabeledCounterCalled, 1)
226226
XCTAssertEqual(mockGleanWrapper.recordEventCalled, 1)
227227
XCTAssertEqual(unifiedAdsTelemetry.sendClickTelemetryCalled, 1)
228228
XCTAssertEqual(sponsoredTelemetry.sendClickTelemetryCalled, 0)
@@ -254,7 +254,7 @@ final class TopSitesMiddlewareTests: XCTestCase, StoreTestUtility {
254254
try checkTopSitesPressedMetrics(label: "origin-other", position: "1", tileType: "suggested")
255255

256256
XCTAssertEqual(mockGleanWrapper.savedEvents.count, 2)
257-
XCTAssertEqual(mockGleanWrapper.recordLabelCalled, 1)
257+
XCTAssertEqual(mockGleanWrapper.incrementLabeledCounterCalled, 1)
258258
XCTAssertEqual(mockGleanWrapper.recordEventCalled, 1)
259259
XCTAssertEqual(sponsoredTelemetry.sendClickTelemetryCalled, 0)
260260
XCTAssertEqual(unifiedAdsTelemetry.sendImpressionTelemetryCalled, 0)

firefox-ios/firefox-ios-tests/Tests/ClientTests/Library/Bookmarks/BookmarksTelemetryTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ final class BookmarksTelemetryTests: XCTestCase {
3131
let resultMetricType = type(of: savedMetric)
3232
let debugMessage = TelemetryDebugMessage(expectedMetric: expectedMetricType, resultMetric: resultMetricType)
3333
XCTAssert(resultMetricType == expectedMetricType, debugMessage.text)
34-
XCTAssertEqual(gleanWrapper.recordLabelCalled, 1)
34+
XCTAssertEqual(gleanWrapper.incrementLabeledCounterCalled, 1)
3535
}
3636

3737
func testRecordBookmark_WhenDeletedBookmark_ThenGleanIsCalled() throws {
@@ -42,7 +42,7 @@ final class BookmarksTelemetryTests: XCTestCase {
4242
let resultMetricType = type(of: savedMetric)
4343
let debugMessage = TelemetryDebugMessage(expectedMetric: expectedMetricType, resultMetric: resultMetricType)
4444
XCTAssert(resultMetricType == expectedMetricType, debugMessage.text)
45-
XCTAssertEqual(gleanWrapper.recordLabelCalled, 1)
45+
XCTAssertEqual(gleanWrapper.incrementLabeledCounterCalled, 1)
4646
}
4747

4848
func testRecordBookmark_WhenOpenedSite_ThenGleanIsCalled() throws {
@@ -53,7 +53,7 @@ final class BookmarksTelemetryTests: XCTestCase {
5353
let resultMetricType = type(of: savedMetric)
5454
let debugMessage = TelemetryDebugMessage(expectedMetric: expectedMetricType, resultMetric: resultMetricType)
5555
XCTAssert(resultMetricType == expectedMetricType, debugMessage.text)
56-
XCTAssertEqual(gleanWrapper.recordLabelCalled, 1)
56+
XCTAssertEqual(gleanWrapper.incrementLabeledCounterCalled, 1)
5757
}
5858

5959
func testRecordBookmark_WhenEditedSite_ThenGleanIsCalled() throws {
@@ -64,7 +64,7 @@ final class BookmarksTelemetryTests: XCTestCase {
6464
let resultMetricType = type(of: savedMetric)
6565
let debugMessage = TelemetryDebugMessage(expectedMetric: expectedMetricType, resultMetric: resultMetricType)
6666
XCTAssert(resultMetricType == expectedMetricType, debugMessage.text)
67-
XCTAssertEqual(gleanWrapper.recordLabelCalled, 1)
67+
XCTAssertEqual(gleanWrapper.incrementLabeledCounterCalled, 1)
6868
}
6969

7070
func testRecordBookmark_WhenAddedFolder_ThenGleanIsCalled() throws {

0 commit comments

Comments
 (0)