| Index: handler/mac/crash_report_upload_thread.h
|
| diff --git a/handler/mac/crash_report_upload_thread.h b/handler/mac/crash_report_upload_thread.h
|
| index 721cd798dd707a15ac4f047c184d3f8cc1a6bd79..6c9be5bf8c36a63af337205fa2582cd548d5224b 100644
|
| --- a/handler/mac/crash_report_upload_thread.h
|
| +++ b/handler/mac/crash_report_upload_thread.h
|
| @@ -19,6 +19,8 @@
|
|
|
| #include <pthread.h>
|
|
|
| +#include <string>
|
| +
|
| #include "client/crash_report_database.h"
|
| #include "util/synchronization/semaphore.h"
|
|
|
| @@ -39,7 +41,12 @@ namespace crashpad {
|
| //! processes.
|
| class CrashReportUploadThread {
|
| public:
|
| - explicit CrashReportUploadThread(CrashReportDatabase* database);
|
| + //! \brief Constructs a new object.
|
| + //!
|
| + //! \param[in] database The database to upload crash reports from.
|
| + //! \param[in] url The URL of the server to upload crash reports to.
|
| + CrashReportUploadThread(CrashReportDatabase* database,
|
| + const std::string& url);
|
| ~CrashReportUploadThread();
|
|
|
| //! \brief Starts a dedicated upload thread, which executes ThreadMain().
|
| @@ -69,6 +76,26 @@ class CrashReportUploadThread {
|
| void ReportPending();
|
|
|
| private:
|
| + //! \brief The result code from UploadReport().
|
| + enum class UploadResult {
|
| + //! \brief The crash report was uploaded successfully.
|
| + kSuccess,
|
| +
|
| + //! \brief The crash report upload failed in such a way that recovery is
|
| + //! impossible.
|
| + //!
|
| + //! No further upload attempts should be made for the report.
|
| + kPermanentFailure,
|
| +
|
| + //! \brief The crash report upload failed, but it might succeed again if
|
| + //! retried in the future.
|
| + //!
|
| + //! If the report has not already been retried too many times, the caller
|
| + //! may arrange to call UploadReport() for the report again in the future,
|
| + //! after a suitable delay.
|
| + kRetry,
|
| + };
|
| +
|
| //! \brief Calls ProcessPendingReports() in response to ReportPending() having
|
| //! been called on any thread, as well as periodically on a timer.
|
| void ThreadMain();
|
| @@ -81,15 +108,31 @@ class CrashReportUploadThread {
|
| //!
|
| //! \param[in] report The crash report to process.
|
| //!
|
| - //! If report upload is enabled, this method attempts to upload \a report. If
|
| - //! the upload is successful, the report will be marked as “completed” in the
|
| - //! database. If the upload fails and more retries are desired, the report’s
|
| - //! upload-attempt count and last-upload-attempt time will be updated in the
|
| - //! database and it will remain in the “pending” state. If the upload fails
|
| - //! and no more retries are desired, or report upload is disabled, it will be
|
| - //! marked as “completed” in the database without ever having been uploaded.
|
| + //! If report upload is enabled, this method attempts to upload \a report by
|
| + //! calling UplaodReport(). If the upload is successful, the report will be
|
| + //! marked as “completed” in the database. If the upload fails and more
|
| + //! retries are desired, the report’s upload-attempt count and
|
| + //! last-upload-attempt time will be updated in the database and it will
|
| + //! remain in the “pending” state. If the upload fails and no more retries are
|
| + //! desired, or report upload is disabled, it will be marked as “completed” in
|
| + //! the database without ever having been uploaded.
|
| void ProcessPendingReport(const CrashReportDatabase::Report& report);
|
|
|
| + //! \brief Attempts to upload a crash report.
|
| + //!
|
| + //! \param[in] report The report to upload. The caller is responsible for
|
| + //! calling CrashReportDatabase::GetReportForUploading() before calling
|
| + //! this method, and for calling
|
| + //! CrashReportDatabase::RecordUploadAttempt() after calling this method.
|
| + //! \param[out] response_body If the upload attempt is successful, this will
|
| + //! be set to the response body sent by the server. Breakpad-type servers
|
| + //! provide the crash ID assigned by the server in the response body.
|
| + //!
|
| + //! \return A member of UploadResult indicating the result of the upload
|
| + //! attempt.
|
| + UploadResult UploadReport(const CrashReportDatabase::Report* report,
|
| + std::string* response_body);
|
| +
|
| //! \brief Cals ThreadMain().
|
| //!
|
| //! \param[in] arg A pointer to the object on which to invoke ThreadMain().
|
| @@ -97,6 +140,7 @@ class CrashReportUploadThread {
|
| //! \return `nullptr`.
|
| static void* RunThreadMain(void* arg);
|
|
|
| + std::string url_;
|
| CrashReportDatabase* database_; // weak
|
| Semaphore semaphore_; // TODO(mark): Use a condition variable instead?
|
| pthread_t thread_;
|
|
|