Skip to content

Commit d5cf87a

Browse files
authored
Prevent capturing network info when Perf data collection off (#10744)
1 parent d9e19cd commit d5cf87a

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

FirebaseSessions/Sources/FirebaseSessions.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,8 @@ private enum GoogleDataTransportConfig {
209209
func addSubscriberFields(event: SessionStartEvent) {
210210
subscribers.forEach { subscriber in
211211
event.set(subscriber: subscriber.sessionsSubscriberName,
212-
isDataCollectionEnabled: subscriber.isDataCollectionEnabled)
213-
214-
event.setRestrictedFields(subscriber: subscriber.sessionsSubscriberName,
215-
appInfo: self.appInfo)
212+
isDataCollectionEnabled: subscriber.isDataCollectionEnabled,
213+
appInfo: self.appInfo)
216214
}
217215
}
218216

FirebaseSessions/Sources/SessionStartEvent.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
8181
proto.session_data.data_collection_status.session_sampling_rate = samplingRate
8282
}
8383

84-
func set(subscriber: SessionsSubscriberName, isDataCollectionEnabled: Bool) {
84+
func set(subscriber: SessionsSubscriberName, isDataCollectionEnabled: Bool,
85+
appInfo: ApplicationInfoProtocol) {
8586
let dataCollectionState = makeDataCollectionProto(isDataCollectionEnabled)
8687
switch subscriber {
8788
case .Crashlytics:
@@ -92,11 +93,19 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
9293
Logger
9394
.logWarning("Attempted to set Data Collection status for unknown Subscriber: \(subscriber)")
9495
}
96+
97+
// Only set restricted fields if Data Collection is enabled. If it's disabled,
98+
// we're treating that as if the product isn't installed.
99+
if isDataCollectionEnabled {
100+
setRestrictedFields(subscriber: subscriber,
101+
appInfo: appInfo)
102+
}
95103
}
96104

97105
/// This method should be called for every subscribed Subscriber. This is for cases where
98106
/// fields should only be collected if a specific SDK is installed.
99-
func setRestrictedFields(subscriber: SessionsSubscriberName, appInfo: ApplicationInfoProtocol) {
107+
private func setRestrictedFields(subscriber: SessionsSubscriberName,
108+
appInfo: ApplicationInfoProtocol) {
100109
switch subscriber {
101110
case .Performance:
102111
proto.application_info.apple_app_info.mcc_mnc = makeProtoString(appInfo.mccMNC)

FirebaseSessions/Tests/Unit/SessionStartEventTests.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,10 @@ class SessionStartEventTests: XCTestCase {
230230
let event = SessionStartEvent(sessionInfo: sessionInfo, appInfo: appInfo, time: time)
231231

232232
// These fields will not be filled in when Crashlytics is installed
233-
event.setRestrictedFields(subscriber: .Crashlytics, appInfo: appInfo)
233+
event.set(subscriber: .Crashlytics, isDataCollectionEnabled: true, appInfo: appInfo)
234+
235+
// They should also not be filled in when Performance data collection is disabled
236+
event.set(subscriber: .Performance, isDataCollectionEnabled: false, appInfo: appInfo)
234237

235238
// Expect empty because Crashlytics is installed, but not Perf
236239
testProtoAndDecodedProto(sessionEvent: event) { proto in
@@ -250,7 +253,7 @@ class SessionStartEventTests: XCTestCase {
250253
}
251254

252255
// These fields will only be filled in when the Perf SDK is installed
253-
event.setRestrictedFields(subscriber: .Performance, appInfo: appInfo)
256+
event.set(subscriber: .Performance, isDataCollectionEnabled: true, appInfo: appInfo)
254257

255258
// Now the field should be set with the real thing
256259
testProtoAndDecodedProto(sessionEvent: event) { proto in
@@ -314,7 +317,7 @@ class SessionStartEventTests: XCTestCase {
314317
let event = SessionStartEvent(sessionInfo: sessionInfo, appInfo: appInfo, time: time)
315318

316319
// These fields will only be filled in when the Perf SDK is installed
317-
event.setRestrictedFields(subscriber: .Performance, appInfo: appInfo)
320+
event.set(subscriber: .Performance, isDataCollectionEnabled: true, appInfo: appInfo)
318321

319322
testProtoAndDecodedProto(sessionEvent: event) { proto in
320323
XCTAssertEqual(
@@ -399,7 +402,7 @@ class SessionStartEventTests: XCTestCase {
399402
let event = SessionStartEvent(sessionInfo: sessionInfo, appInfo: appInfo, time: time)
400403

401404
// These fields will only be filled in when the Perf SDK is installed
402-
event.setRestrictedFields(subscriber: .Performance, appInfo: appInfo)
405+
event.set(subscriber: .Performance, isDataCollectionEnabled: true, appInfo: appInfo)
403406

404407
testProtoAndDecodedProto(sessionEvent: event) { proto in
405408
XCTAssertEqual(
@@ -493,7 +496,7 @@ class SessionStartEventTests: XCTestCase {
493496
let event = SessionStartEvent(sessionInfo: sessionInfo, appInfo: appInfo, time: time)
494497

495498
// These fields will only be filled in when the Perf SDK is installed
496-
event.setRestrictedFields(subscriber: .Performance, appInfo: appInfo)
499+
event.set(subscriber: .Performance, isDataCollectionEnabled: true, appInfo: appInfo)
497500

498501
testProtoAndDecodedProto(sessionEvent: event) { proto in
499502
XCTAssertEqual(

0 commit comments

Comments
 (0)