@@ -7,33 +7,89 @@ import Glean
7
7
8
8
// Telemetry for the Sponsored tiles located in the Top sites on the Firefox home page
9
9
// Using Pings to send the telemetry events
10
- struct SponsoredTileTelemetry {
10
+ protocol SponsoredTileTelemetry {
11
+ func sendImpressionTelemetry( tile: SponsoredTile ,
12
+ position: Int ,
13
+ isUnifiedAdsEnabled: Bool )
14
+ func sendClickTelemetry( tile: SponsoredTile ,
15
+ position: Int ,
16
+ isUnifiedAdsEnabled: Bool )
17
+ }
18
+
19
+ extension SponsoredTileTelemetry {
20
+ func sendImpressionTelemetry( tile: SponsoredTile ,
21
+ position: Int ,
22
+ isUnifiedAdsEnabled: Bool = false ) {
23
+ sendImpressionTelemetry ( tile: tile, position: position, isUnifiedAdsEnabled: isUnifiedAdsEnabled)
24
+ }
25
+
26
+ func sendClickTelemetry( tile: SponsoredTile ,
27
+ position: Int ,
28
+ isUnifiedAdsEnabled: Bool = false ) {
29
+ sendClickTelemetry ( tile: tile, position: position, isUnifiedAdsEnabled: isUnifiedAdsEnabled)
30
+ }
31
+ }
32
+
33
+ struct DefaultSponsoredTileTelemetry : SponsoredTileTelemetry {
11
34
// Source is only new tab at the moment, more source could be added later
12
35
static let source = " newtab "
36
+ private let gleanWrapper : GleanWrapper
37
+
38
+ init ( gleanWrapper: GleanWrapper = DefaultGleanWrapper ( ) ) {
39
+ self . gleanWrapper = gleanWrapper
40
+ }
13
41
14
- static func sendImpressionTelemetry( tile: SponsoredTile , position: Int ) {
42
+ /// Send Sponsored tile impression telemetry with Glean Pings
43
+ /// - Parameters:
44
+ /// - tile: The sponsored tile
45
+ /// - position: The position of the sponsored tile in the top sites collection view
46
+ /// - isUnifiedAdsEnabled: Whether the unified ads is enabled, if enabled some information isn't set on the ping
47
+ func sendImpressionTelemetry( tile: SponsoredTile ,
48
+ position: Int ,
49
+ isUnifiedAdsEnabled: Bool = false ) {
15
50
let extra = GleanMetrics . TopSites. ContileImpressionExtra (
16
51
position: Int32 ( position) ,
17
- source: SponsoredTileTelemetry . source
52
+ source: DefaultSponsoredTileTelemetry . source
18
53
)
19
- GleanMetrics . TopSites. contileImpression. record ( extra)
54
+ gleanWrapper . recordEvent ( for : GleanMetrics . TopSites. contileImpression, extras : extra)
20
55
21
- GleanMetrics . TopSites. contileTileId. set ( Int64 ( tile. tileId) )
22
- GleanMetrics . TopSites. contileAdvertiser. set ( tile. title)
23
- GleanMetrics . TopSites. contileReportingUrl. set ( tile. impressionURL)
24
- GleanMetrics . Pings. shared. topsitesImpression. submit ( )
56
+ // Some information isn't set on the ping when unified ads is enabled
57
+ if !isUnifiedAdsEnabled {
58
+ gleanWrapper. recordQuantity ( for: GleanMetrics . TopSites. contileTileId,
59
+ value: Int64 ( tile. tileId) )
60
+ gleanWrapper. recordUrl ( for: GleanMetrics . TopSites. contileReportingUrl,
61
+ value: tile. impressionURL)
62
+ }
63
+
64
+ gleanWrapper. recordString ( for: GleanMetrics . TopSites. contileAdvertiser,
65
+ value: tile. title)
66
+ gleanWrapper. submit ( ping: GleanMetrics . Pings. shared. topsitesImpression)
25
67
}
26
68
27
- static func sendClickTelemetry( tile: SponsoredTile , position: Int ) {
69
+ /// Send Sponsored tile click telemetry with Glean Pings
70
+ /// - Parameters:
71
+ /// - tile: The sponsored tile
72
+ /// - position: The position of the sponsored tile in the top sites collection view
73
+ /// - isUnifiedAdsEnabled: Whether the unified ads is enabled, if enabled some information isn't set on the ping
74
+ func sendClickTelemetry( tile: SponsoredTile ,
75
+ position: Int ,
76
+ isUnifiedAdsEnabled: Bool = false ) {
28
77
let extra = GleanMetrics . TopSites. ContileClickExtra (
29
78
position: Int32 ( position) ,
30
- source: SponsoredTileTelemetry . source
79
+ source: DefaultSponsoredTileTelemetry . source
31
80
)
32
- GleanMetrics . TopSites. contileClick. record ( extra)
81
+ gleanWrapper. recordEvent ( for: GleanMetrics . TopSites. contileClick, extras: extra)
82
+
83
+ // Some information isn't set on the ping when unified ads is enabled
84
+ if !isUnifiedAdsEnabled {
85
+ gleanWrapper. recordQuantity ( for: GleanMetrics . TopSites. contileTileId,
86
+ value: Int64 ( tile. tileId) )
87
+ gleanWrapper. recordUrl ( for: GleanMetrics . TopSites. contileReportingUrl,
88
+ value: tile. clickURL)
89
+ }
33
90
34
- GleanMetrics . TopSites. contileTileId. set ( Int64 ( tile. tileId) )
35
- GleanMetrics . TopSites. contileAdvertiser. set ( tile. title)
36
- GleanMetrics . TopSites. contileReportingUrl. set ( tile. clickURL)
37
- GleanMetrics . Pings. shared. topsitesImpression. submit ( )
91
+ gleanWrapper. recordString ( for: GleanMetrics . TopSites. contileAdvertiser,
92
+ value: tile. title)
93
+ gleanWrapper. submit ( ping: GleanMetrics . Pings. shared. topsitesImpression)
38
94
}
39
95
}
0 commit comments