aboutsummaryrefslogtreecommitdiff
path: root/src/client/ios/Breakpad.mm
diff options
context:
space:
mode:
authorOlivier Robin <olivierrobin@chromium.org>2019-04-18 18:06:31 +0200
committerMark Mentovai <mark@chromium.org>2019-04-23 13:07:06 +0000
commit1fc9cc0d0e1dfafb8d29dba8d01f09587d870026 (patch)
treead334e68729ce88aec5d750f9be3cd21f838d745 /src/client/ios/Breakpad.mm
parentMake breakpad_unittests work with Chrome's test runner instead of gtest's (diff)
downloadbreakpad-1fc9cc0d0e1dfafb8d29dba8d01f09587d870026.tar.xz
[Breakpad iOS] Add a callback on report upload completion.
This CL adds a result callback on report upload completion. On failure, Breakpad deletes the configuration file and does retry to upload a report. Using this callback, the client will be able to log some metrics and to act on upload failure. Bug: 954175 Change-Id: I95a3264b65d4c06ba5d8dde8377440d23f1e2081 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/1572661 Reviewed-by: Mark Mentovai <mark@chromium.org>
Diffstat (limited to 'src/client/ios/Breakpad.mm')
-rw-r--r--src/client/ios/Breakpad.mm39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/client/ios/Breakpad.mm b/src/client/ios/Breakpad.mm
index c99ee4fd..2d8ba61e 100644
--- a/src/client/ios/Breakpad.mm
+++ b/src/client/ios/Breakpad.mm
@@ -164,7 +164,8 @@ class Breakpad {
NSDate *DateOfMostRecentCrashReport();
void UploadNextReport(NSDictionary *server_parameters);
void UploadReportWithConfiguration(NSDictionary *configuration,
- NSDictionary *server_parameters);
+ NSDictionary *server_parameters,
+ BreakpadUploadCompletionCallback callback);
void UploadData(NSData *data, NSString *name,
NSDictionary *server_parameters);
void HandleNetworkResponse(NSDictionary *configuration,
@@ -502,8 +503,10 @@ void Breakpad::HandleNetworkResponse(NSDictionary *configuration,
}
//=============================================================================
-void Breakpad::UploadReportWithConfiguration(NSDictionary *configuration,
- NSDictionary *server_parameters) {
+void Breakpad::UploadReportWithConfiguration(
+ NSDictionary *configuration,
+ NSDictionary *server_parameters,
+ BreakpadUploadCompletionCallback callback) {
Uploader *uploader = [[[Uploader alloc]
initWithConfig:configuration] autorelease];
if (!uploader)
@@ -512,6 +515,13 @@ void Breakpad::UploadReportWithConfiguration(NSDictionary *configuration,
[uploader addServerParameter:[server_parameters objectForKey:key]
forKey:key];
}
+ if (callback) {
+ [uploader setUploadCompletionBlock:^(NSString *report_id, NSError *error) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(report_id, error);
+ });
+ }];
+ }
[uploader report];
}
@@ -519,7 +529,8 @@ void Breakpad::UploadReportWithConfiguration(NSDictionary *configuration,
void Breakpad::UploadNextReport(NSDictionary *server_parameters) {
NSDictionary *configuration = NextCrashReportConfiguration();
if (configuration) {
- return UploadReportWithConfiguration(configuration, server_parameters);
+ return UploadReportWithConfiguration(configuration, server_parameters,
+ nullptr);
}
}
@@ -850,7 +861,7 @@ int BreakpadGetCrashReportCount(BreakpadRef ref) {
//=============================================================================
void BreakpadUploadNextReport(BreakpadRef ref) {
- BreakpadUploadNextReportWithParameters(ref, nil);
+ BreakpadUploadNextReportWithParameters(ref, nil, nullptr);
}
//=============================================================================
@@ -882,22 +893,25 @@ NSDate *BreakpadGetDateOfMostRecentCrashReport(BreakpadRef ref) {
void BreakpadUploadReportWithParametersAndConfiguration(
BreakpadRef ref,
NSDictionary *server_parameters,
- NSDictionary *configuration) {
+ NSDictionary *configuration,
+ BreakpadUploadCompletionCallback callback) {
try {
Breakpad *breakpad = (Breakpad *)ref;
if (!breakpad || !configuration)
return;
- breakpad->UploadReportWithConfiguration(configuration, server_parameters);
+ breakpad->UploadReportWithConfiguration(configuration, server_parameters,
+ callback);
} catch(...) { // don't let exceptions leave this C API
fprintf(stderr,
"BreakpadUploadReportWithParametersAndConfiguration() : error\n");
}
-
}
//=============================================================================
-void BreakpadUploadNextReportWithParameters(BreakpadRef ref,
- NSDictionary *server_parameters) {
+void BreakpadUploadNextReportWithParameters(
+ BreakpadRef ref,
+ NSDictionary *server_parameters,
+ BreakpadUploadCompletionCallback callback) {
try {
Breakpad *breakpad = (Breakpad *)ref;
if (!breakpad)
@@ -905,9 +919,8 @@ void BreakpadUploadNextReportWithParameters(BreakpadRef ref,
NSDictionary *configuration = breakpad->NextCrashReportConfiguration();
if (!configuration)
return;
- return BreakpadUploadReportWithParametersAndConfiguration(ref,
- server_parameters,
- configuration);
+ return BreakpadUploadReportWithParametersAndConfiguration(
+ ref, server_parameters, configuration, callback);
} catch(...) { // don't let exceptions leave this C API
fprintf(stderr, "BreakpadUploadNextReportWithParameters() : error\n");
}