diff options
-rw-r--r-- | src/client/mac/Framework/Breakpad.h | 7 | ||||
-rw-r--r-- | src/client/mac/Framework/Breakpad.mm | 5 | ||||
-rw-r--r-- | src/client/mac/sender/crash_report_sender.m | 23 |
3 files changed, 24 insertions, 11 deletions
diff --git a/src/client/mac/Framework/Breakpad.h b/src/client/mac/Framework/Breakpad.h index 4b5357d2..483b8769 100644 --- a/src/client/mac/Framework/Breakpad.h +++ b/src/client/mac/Framework/Breakpad.h @@ -68,6 +68,7 @@ extern "C" { #define BREAKPAD_URL "BreakpadURL" #define BREAKPAD_REPORT_INTERVAL "BreakpadReportInterval" #define BREAKPAD_SKIP_CONFIRM "BreakpadSkipConfirm" +#define BREAKPAD_CONFIRM_TIMEOUT "BreakpadConfirmTimeout" #define BREAKPAD_SEND_AND_EXIT "BreakpadSendAndExit" #define BREAKPAD_DUMP_DIRECTORY "BreakpadMinidumpLocation" #define BREAKPAD_INSPECTOR_LOCATION "BreakpadInspectorLocation" @@ -134,6 +135,12 @@ typedef bool (*BreakpadFilterCallback)(int exception_type, // without any user intervention. // Defaults to NO // +// BREAKPAD_CONFIRM_TIMEOUT Number of seconds before the upload +// confirmation dialog will be automatically +// dismissed (cancelling the upload). +// Default: 300 seconds (min of 60). +// Specify 0 to prevent timeout. +// // BREAKPAD_SEND_AND_EXIT If true, the handler will exit after sending. // This will prevent any other handler (e.g., // CrashReporter) from getting the crash. diff --git a/src/client/mac/Framework/Breakpad.mm b/src/client/mac/Framework/Breakpad.mm index 30b8eeab..22785c3c 100644 --- a/src/client/mac/Framework/Breakpad.mm +++ b/src/client/mac/Framework/Breakpad.mm @@ -398,6 +398,7 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { NSString *reporterPathString = [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION]; NSString *skipConfirm = [parameters objectForKey:@BREAKPAD_SKIP_CONFIRM]; + NSString *timeout = [parameters objectForKey:@BREAKPAD_CONFIRM_TIMEOUT]; NSString *sendAndExit = [parameters objectForKey:@BREAKPAD_SEND_AND_EXIT]; NSArray *logFilePaths = [parameters objectForKey:@BREAKPAD_LOGFILES]; NSString *logFileTailSize = [parameters objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE]; @@ -432,6 +433,9 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { if (!interval) interval = @"3600"; + if (!timeout) + timeout = @"300"; + if (!logFileTailSize) logFileTailSize = @"200000"; @@ -535,6 +539,7 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { dictionary.SetKeyValue(BREAKPAD_URL, [urlStr UTF8String]); dictionary.SetKeyValue(BREAKPAD_REPORT_INTERVAL, [interval UTF8String]); dictionary.SetKeyValue(BREAKPAD_SKIP_CONFIRM, [skipConfirm UTF8String]); + dictionary.SetKeyValue(BREAKPAD_CONFIRM_TIMEOUT, [timeout UTF8String]); dictionary.SetKeyValue(BREAKPAD_INSPECTOR_LOCATION, [inspectorPathString fileSystemRepresentation]); dictionary.SetKeyValue(BREAKPAD_REPORTER_EXE_LOCATION, diff --git a/src/client/mac/sender/crash_report_sender.m b/src/client/mac/sender/crash_report_sender.m index 61564e54..03fc05c2 100644 --- a/src/client/mac/sender/crash_report_sender.m +++ b/src/client/mac/sender/crash_report_sender.m @@ -369,7 +369,6 @@ NSString *const kDefaultServerType = @"google"; @""), display]]; NSString *defaultButtonTitle = nil; NSString *otherButtonTitle = nil; - NSTimeInterval timeout = 60.0; // timeout value for the user notification // Get the localized alert strings // If we're going to submit a report, prompt the user if this is okay. @@ -386,19 +385,19 @@ NSString *const kDefaultServerType = @"google"; nil, bundle, @""); otherButtonTitle = NSLocalizedStringFromTableInBundle(@"cancelButton", nil, bundle, @""); - - // Nominally use the report interval - timeout = [[parameters_ objectForKey:@BREAKPAD_REPORT_INTERVAL] - floatValue]; } else { [self setReportMessage:NSLocalizedStringFromTableInBundle(@"noSendMsg", nil, bundle, @"")]; defaultButtonTitle = NSLocalizedStringFromTableInBundle(@"noSendButton", nil, bundle, @""); - timeout = 60.0; } - // show the notification for at least one minute - if (timeout < 60.0) { + + // Get the timeout value for the notification. + NSTimeInterval timeout = [[parameters_ objectForKey:@BREAKPAD_CONFIRM_TIMEOUT] + floatValue]; + // Show the notification for at least one minute (but allow 0, since it means + // no timeout). + if (timeout > 0.001 && timeout < 60.0) { timeout = 60.0; } @@ -452,9 +451,11 @@ NSString *const kDefaultServerType = @"google"; - (int)runModalWindow:(NSWindow*)window withTimeout:(NSTimeInterval)timeout { // Queue a |stopModal| message to be performed in |timeout| seconds. - [NSApp performSelector:@selector(stopModal) - withObject:nil - afterDelay:timeout]; + if (timeout > 0.001) { + [NSApp performSelector:@selector(stopModal) + withObject:nil + afterDelay:timeout]; + } // Run the window modally and wait for either a |stopModal| message or a // button click. |