Restore crash report user settings and (hopefully) make them actually work again after they got broken in the breakpad merge (see FIRE-6914)

meow-7.2.2
Ansariel 2016-04-14 13:17:17 +02:00
parent da9446dcd8
commit 4abe10db36
4 changed files with 90 additions and 0 deletions

View File

@ -407,6 +407,53 @@ LLSD LLCrashLogger::constructPostData()
const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
// <FS:Ansariel> Restore crash report user settings
S32 LLCrashLogger::loadCrashBehaviorSetting()
{
// First check user_settings (in the user's home dir)
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
if (! mCrashSettings.loadFromFile(filename))
{
// Next check app_settings (in the SL program dir)
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, CRASH_SETTINGS_FILE);
mCrashSettings.loadFromFile(filename);
}
// If we didn't load any files above, this will return the default
S32 value = mCrashSettings.getS32("CrashSubmitBehavior");
// Whatever value we got, make sure it's valid
switch (value)
{
case CRASH_BEHAVIOR_NEVER_SEND:
return CRASH_BEHAVIOR_NEVER_SEND;
case CRASH_BEHAVIOR_ALWAYS_SEND:
return CRASH_BEHAVIOR_ALWAYS_SEND;
}
return CRASH_BEHAVIOR_ASK;
}
bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
{
switch (crash_behavior)
{
case CRASH_BEHAVIOR_ASK:
case CRASH_BEHAVIOR_NEVER_SEND:
case CRASH_BEHAVIOR_ALWAYS_SEND:
break;
default:
return false;
}
mCrashSettings.setS32("CrashSubmitBehavior", crash_behavior);
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
mCrashSettings.saveToFile(filename, FALSE);
return true;
}
// </FS:Ansariel>
std::string LLCrashLogger::loadCrashURLSetting()
{
@ -606,6 +653,18 @@ bool LLCrashLogger::init()
"1 = always send crash report, "
"2 = never send crash report)");
// <FS:Ansariel> Restore crash report user settings
LL_INFOS("CRASHREPORT") << "Loading crash behavior setting" << LL_ENDL;
mCrashBehavior = loadCrashBehaviorSetting();
// If user doesn't want to send, bail out
if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
{
LL_INFOS("CRASHREPORT") << "Crash behavior is never_send, quitting" << LL_ENDL;
return false;
}
// </FS:Ansariel>
init_curl();
LLCore::HttpRequest::createService();
LLCore::HttpRequest::startThread();

View File

@ -68,6 +68,11 @@ public:
bool runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout);
bool readMinidump(std::string minidump_path);
// <FS:Ansariel> Restore crash report user settings
S32 loadCrashBehaviorSetting();
bool saveCrashBehaviorSetting(S32 crash_behavior);
// </FS:Ansariel>
protected:
static void init_curl();
static void term_curl();

View File

@ -72,6 +72,14 @@ bool LLCrashLoggerMac::mainLoop()
gSendReport = true;
}
// <FS:Ansariel> Restore crash report user settings
if(gRememberChoice)
{
if(gSendReport) saveCrashBehaviorSetting(CRASH_BEHAVIOR_ALWAYS_SEND);
else saveCrashBehaviorSetting(CRASH_BEHAVIOR_NEVER_SEND);
}
// </FS:Ansariel>
if(gSendReport)
{
setUserText(gUserNotes);

View File

@ -174,6 +174,24 @@ bool handle_button_click(WORD button_id)
return false;
}
// <FS:Ansariel> Restore crash report user settings
// See if "do this next time" is checked and save state
S32 crash_behavior = CRASH_BEHAVIOR_ASK;
LRESULT result = SendDlgItemMessage(gHwndReport, IDC_CHECK_AUTO, BM_GETCHECK, 0, 0);
if (result == BST_CHECKED)
{
if (button_id == IDOK)
{
crash_behavior = CRASH_BEHAVIOR_ALWAYS_SEND;
}
else if (button_id == IDCANCEL)
{
crash_behavior = CRASH_BEHAVIOR_NEVER_SEND;
}
((LLCrashLoggerWindows*)LLCrashLogger::instance())->saveCrashBehaviorSetting(crash_behavior);
}
// </FS:Ansariel>
// We're done with this dialog.
gFirstDialog = FALSE;