Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CRCID Support when reporting crashes #3653

Merged
merged 14 commits into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1319,6 +1319,9 @@
37FC2A192CF903080048E226 /* MockPrivacyStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FC2A172CF903060048E226 /* MockPrivacyStats.swift */; };
37FD78112A29EBD100B36DB1 /* SyncErrorHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FD78102A29EBD100B36DB1 /* SyncErrorHandler.swift */; };
37FD78122A29EBD100B36DB1 /* SyncErrorHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FD78102A29EBD100B36DB1 /* SyncErrorHandler.swift */; };
46066CBC2D1330A100AB683B /* Persistence in Frameworks */ = {isa = PBXBuildFile; productRef = 46066CBB2D1330A100AB683B /* Persistence */; };
467D16672D0C98D5007C020A /* CrashReportSenderExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 467D16662D0C98D5007C020A /* CrashReportSenderExtensions.swift */; };
467D16682D0C98D5007C020A /* CrashReportSenderExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 467D16662D0C98D5007C020A /* CrashReportSenderExtensions.swift */; };
4B0135CE2729F1AA00D54834 /* NSPasteboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0135CD2729F1AA00D54834 /* NSPasteboardExtension.swift */; };
4B02198925E05FAC00ED7DEA /* FireproofingURLExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02197F25E05FAC00ED7DEA /* FireproofingURLExtensions.swift */; };
4B02198A25E05FAC00ED7DEA /* FireproofDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */; };
Expand Down Expand Up @@ -3796,6 +3799,7 @@
37F8ABD22CE3EE5B00CB0294 /* FeatureFlagOverridesMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlagOverridesMenu.swift; sourceTree = "<group>"; };
37FC2A172CF903060048E226 /* MockPrivacyStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockPrivacyStats.swift; sourceTree = "<group>"; };
37FD78102A29EBD100B36DB1 /* SyncErrorHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncErrorHandler.swift; sourceTree = "<group>"; };
467D16662D0C98D5007C020A /* CrashReportSenderExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportSenderExtensions.swift; sourceTree = "<group>"; };
4B0135CD2729F1AA00D54834 /* NSPasteboardExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSPasteboardExtension.swift; sourceTree = "<group>"; };
4B02197F25E05FAC00ED7DEA /* FireproofingURLExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FireproofingURLExtensions.swift; sourceTree = "<group>"; };
4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FireproofDomains.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -5345,6 +5349,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
46066CBC2D1330A100AB683B /* Persistence in Frameworks */,
B6DA44172616C13800DD1EC2 /* OHHTTPStubs in Frameworks */,
F116A7C32BD1924B00F3FCF7 /* PixelKitTestingUtilities in Frameworks */,
84BBC8012CFA0D3800BAE57A /* TestUtils in Frameworks */,
Expand Down Expand Up @@ -8639,6 +8644,7 @@
AAC30A27268E045400D2D9CD /* CrashReportReader.swift */,
AAC30A2D268F1EE300D2D9CD /* CrashReportPromptPresenter.swift */,
AAC30A29268E239100D2D9CD /* CrashReport.swift */,
467D16662D0C98D5007C020A /* CrashReportSenderExtensions.swift */,
);
path = Model;
sourceTree = "<group>";
Expand Down Expand Up @@ -10497,6 +10503,7 @@
9DC5FACA2C6B8E050011F068 /* AppKitExtensions */,
84BBC8002CFA0D3800BAE57A /* TestUtils */,
374EFDEE2D01C70300B30939 /* Utilities */,
46066CBB2D1330A100AB683B /* Persistence */,
);
productName = DuckDuckGoTests;
productReference = AA585D90248FD31400E9A3E2 /* Unit Tests.xctest */;
Expand Down Expand Up @@ -11571,6 +11578,7 @@
37197EA82942443D00394917 /* BrowserTabViewController.swift in Sources */,
3706FB39293F65D500E42796 /* PrivacyDashboardPopover.swift in Sources */,
3706FB3B293F65D500E42796 /* RootView.swift in Sources */,
467D16672D0C98D5007C020A /* CrashReportSenderExtensions.swift in Sources */,
3706FB3C293F65D500E42796 /* AddressBarTextField.swift in Sources */,
3706FB3D293F65D500E42796 /* FocusRingView.swift in Sources */,
3706FB3E293F65D500E42796 /* BookmarksBarViewModel.swift in Sources */,
Expand Down Expand Up @@ -13085,6 +13093,7 @@
AABEE6A524AA0A7F0043105B /* SuggestionViewController.swift in Sources */,
1D6216B229069BBF00386B2C /* BWKeyStorage.swift in Sources */,
AA7E919F287872EA00AB6B62 /* VisitViewModel.swift in Sources */,
467D16682D0C98D5007C020A /* CrashReportSenderExtensions.swift in Sources */,
7BD7B0012C19D3830039D20A /* VPNIPCResources.swift in Sources */,
C1935A1B2C88F9ED001AD72D /* SyncPromoViewModel.swift in Sources */,
B6676BE12AA986A700525A21 /* AddressBarTextEditor.swift in Sources */,
Expand Down Expand Up @@ -15297,7 +15306,7 @@
repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit";
requirement = {
kind = exactVersion;
version = 221.3.0;
version = 222.1.0;
};
};
9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = {
Expand Down Expand Up @@ -15700,6 +15709,11 @@
package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */;
productName = Navigation;
};
46066CBB2D1330A100AB683B /* Persistence */ = {
isa = XCSwiftPackageProductDependency;
package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */;
productName = Persistence;
};
4B2D062B2A11C0E100DE1F49 /* Networking */ = {
isa = XCSwiftPackageProductDependency;
package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/duckduckgo/BrowserServicesKit",
"state" : {
"revision" : "b71ed70ce9b0ef3ce51d4f96da0193ab70493944",
"version" : "221.3.0"
"revision" : "5704d77e3b4c77c7387518d796d31a35f7a1ffcf",
"version" : "222.1.0"
}
},
{
Expand Down
3 changes: 2 additions & 1 deletion DuckDuckGo/Application/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
let fileStore: FileStore

#if APPSTORE
private let crashCollection = CrashCollection(platform: .macOSAppStore)
private let crashCollection = CrashCollection(crashReportSender: CrashReportSender(platform: .macOSAppStore,
pixelEvents: CrashReportSender.pixelEvents))
#else
private let crashReporter = CrashReporter()
#endif
Expand Down
43 changes: 43 additions & 0 deletions DuckDuckGo/CrashReports/Model/CrashReportSenderExtensions.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//
// CrashReportSenderExtensions.swift
//
// Copyright © 2024 DuckDuckGo. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

import Crashes
import Common
import PixelKit

extension CrashReportSender {

static let pixelEvents: EventMapping<CrashReportSenderError> = .init { event, _, _, _ in
switch event {
case CrashReportSenderError.crcidMissing:
PixelKit.fire(GeneralPixel.crashReportCRCIDMissing)

case CrashReportSenderError.submissionFailed(let error):
if let error {
PixelKit.fire(DebugEvent(GeneralPixel.crashReportingSubmissionFailed),
frequency: .standard,
withHeaders: [:],
withAdditionalParameters: ["HTTPStatusCode": "\(error.statusCode)"],
withError: nil,
allowedQueryReservedCharacters: nil)
} else {
PixelKit.fire(GeneralPixel.crashReportingSubmissionFailed)
}
}
}
}
7 changes: 5 additions & 2 deletions DuckDuckGo/CrashReports/Model/CrashReporter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ import PixelKit
final class CrashReporter {

private let reader = CrashReportReader()
private lazy var sender = CrashReportSender(platform: .macOS)
private lazy var sender = CrashReportSender(platform: .macOS, pixelEvents: CrashReportSender.pixelEvents)
samsymons marked this conversation as resolved.
Show resolved Hide resolved
private lazy var crcidManager = CRCIDManager()
private lazy var promptPresenter = CrashReportPromptPresenter()

@UserDefaultsWrapper(key: .lastCrashReportCheckDate, defaultValue: nil)
Expand Down Expand Up @@ -56,7 +57,9 @@ final class CrashReporter {
return
}
Task {
await self.sender.send(contentData)
let crcid = self.crcidManager.crcid
let result = await self.sender.send(contentData, crcid: crcid)
self.crcidManager.handleCrashSenderResult(result: result.result, response: result.response)
}
}

Expand Down
8 changes: 8 additions & 0 deletions DuckDuckGo/Statistics/GeneralPixel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ enum GeneralPixel: PixelKitEventV2 {

case crash
case crashOnCrashHandlersSetUp
case crashReportingSubmissionFailed
case crashReportCRCIDMissing
case compileRulesWait(onboardingShown: OnboardingShown, waitTime: CompileRulesWaitTime, result: WaitResult)
case launchInitial(cohort: String)
case launch(isDefault: Bool)
Expand Down Expand Up @@ -473,6 +475,12 @@ enum GeneralPixel: PixelKitEventV2 {
case .crashOnCrashHandlersSetUp:
return "m_mac_crash_on_handlers_setup"

case .crashReportCRCIDMissing:
return "m_mac_crashreporting_crcid-missing"

case .crashReportingSubmissionFailed:
return "m_mac_crashreporting_submission-failed"

case .compileRulesWait(onboardingShown: let onboardingShown, waitTime: let waitTime, result: let result):
return "m_mac_cbr-wait_\(onboardingShown)_\(waitTime)_\(result)"

Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/DataBrokerProtection/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ let package = Package(
targets: ["DataBrokerProtection"])
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
.package(path: "../SwiftUIExtensions"),
.package(path: "../AppKitExtensions"),
.package(path: "../XPCHelper"),
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/FeatureFlags/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ let package = Package(
targets: ["FeatureFlags"]),
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/NetworkProtectionMac/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ let package = Package(
.library(name: "VPNAppLauncher", targets: ["VPNAppLauncher"]),
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
.package(url: "https://github.com/airbnb/lottie-spm", exact: "4.4.3"),
.package(path: "../AppLauncher"),
.package(path: "../UDSHelper"),
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/NewTabPage/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ let package = Package(
targets: ["NewTabPage"]),
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
.package(path: "../WebKitExtensions"),
.package(path: "../Utilities"),
],
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/SubscriptionUI/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ let package = Package(
targets: ["SubscriptionUI"]),
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
.package(path: "../SwiftUIExtensions"),
.package(path: "../FeatureFlags")
],
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/WebKitExtensions/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ let package = Package(
),
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "221.3.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "222.1.0"),
.package(path: "../AppKitExtensions")
],
targets: [
Expand Down
Loading