зеркало из https://github.com/mozilla/pjs.git
bug 376720 - send time-since-install with crash report
This commit is contained in:
Родитель
b07d1f8bad
Коммит
c8cc7dd03c
|
@ -66,6 +66,7 @@
|
|||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <prenv.h>
|
||||
#include <prio.h>
|
||||
#include "nsDebug.h"
|
||||
|
@ -399,21 +400,33 @@ typedef nsresult (*InitDataFunc)(nsACString&);
|
|||
// does not exist, create it and initialize its contents
|
||||
// by calling aInitFunc for the data.
|
||||
static nsresult
|
||||
GetOrInit(nsIFile* aFile, nsACString& aContents, InitDataFunc aInitFunc)
|
||||
GetOrInit(nsILocalFile* aDir, const nsAString& filename,
|
||||
nsACString& aContents, InitDataFunc aInitFunc)
|
||||
{
|
||||
PRBool exists;
|
||||
nsresult rv = aFile->Exists(&exists);
|
||||
|
||||
nsCOMPtr<nsIFile> dataFile;
|
||||
nsresult rv = aDir->Clone(getter_AddRefs(dataFile));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = dataFile->Append(filename);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = dataFile->Exists(&exists);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!exists) {
|
||||
// get the initial value and write it to the file
|
||||
rv = aInitFunc(aContents);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return WriteDataToFile(aFile, aContents);
|
||||
rv = WriteDataToFile(dataFile, aContents);
|
||||
}
|
||||
else {
|
||||
// just get the file's contents
|
||||
rv = GetFileContents(dataFile, aContents);
|
||||
}
|
||||
|
||||
// just get the file's contents
|
||||
return GetFileContents(aFile, aContents);
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Generate a unique user ID. We're using a GUID form,
|
||||
|
@ -453,23 +466,40 @@ InitUserID(nsACString& aUserID)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// Init the "install time" data. We're taking an easy way out here
|
||||
// and just setting this to "the time when this version was first run".
|
||||
static nsresult
|
||||
InitInstallTime(nsACString& aInstallTime)
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
char buf[16];
|
||||
sprintf(buf, "%ld", t);
|
||||
aInstallTime = buf;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Annotate the crash report with a Unique User ID.
|
||||
// TODO: also add time since install, and time since last crash.
|
||||
// (bug 376720 and bug 376721)
|
||||
// If any piece of data doesn't exist, initialize it first.
|
||||
nsresult SetupExtraData(nsILocalFile* aAppDataDirectory)
|
||||
nsresult SetupExtraData(nsILocalFile* aAppDataDirectory,
|
||||
const nsACString& aBuildID)
|
||||
{
|
||||
nsresult rv = aAppDataDirectory->Append(NS_LITERAL_STRING("Crash Reports"));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIFile> userIDfile;
|
||||
if (NS_SUCCEEDED(aAppDataDirectory->Clone(getter_AddRefs(userIDfile)))
|
||||
&& NS_SUCCEEDED(userIDfile->Append(NS_LITERAL_STRING("UserID")))) {
|
||||
nsCAutoString userID;
|
||||
if (NS_SUCCEEDED(GetOrInit(userIDfile, userID, InitUserID))) {
|
||||
AnnotateCrashReport(NS_LITERAL_CSTRING("UserID"), userID);
|
||||
}
|
||||
}
|
||||
nsCAutoString data;
|
||||
if(NS_SUCCEEDED(GetOrInit(aAppDataDirectory, NS_LITERAL_STRING("UserID"),
|
||||
data, InitUserID)))
|
||||
AnnotateCrashReport(NS_LITERAL_CSTRING("UserID"), data);
|
||||
|
||||
if(NS_SUCCEEDED(GetOrInit(aAppDataDirectory,
|
||||
NS_LITERAL_STRING("InstallTime") +
|
||||
NS_ConvertASCIItoUTF16(aBuildID),
|
||||
data, InitInstallTime)))
|
||||
AnnotateCrashReport(NS_LITERAL_CSTRING("InstallTime"), data);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,8 @@ nsresult SetMinidumpPath(const nsAString& aPath);
|
|||
nsresult UnsetExceptionHandler();
|
||||
nsresult AnnotateCrashReport(const nsACString &key, const nsACString &data);
|
||||
nsresult SetRestartArgs(int argc, char **argv);
|
||||
nsresult SetupExtraData(nsILocalFile* aAppDataDirectory);
|
||||
nsresult SetupExtraData(nsILocalFile* aAppDataDirectory,
|
||||
const nsACString& aBuildID);
|
||||
}
|
||||
|
||||
#endif /* nsAirbagExceptionHandler_h__ */
|
||||
|
|
Загрузка…
Ссылка в новой задаче