| Index: third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
| diff --git a/third_party/crashpad/crashpad/handler/crash_report_upload_thread.h b/third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
| index 14debacd1ab840f04176d5dfc266b173acf46101..c769efed5c54c9e94bb209e2a93c5f11a3f674b5 100644
|
| --- a/third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
| +++ b/third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
| @@ -20,6 +20,8 @@
|
|
|
| #include "base/macros.h"
|
| #include "client/crash_report_database.h"
|
| +#include "util/misc/uuid.h"
|
| +#include "util/stdlib/thread_safe_vector.h"
|
| #include "util/thread/worker_thread.h"
|
|
|
| namespace crashpad {
|
| @@ -32,22 +34,28 @@ namespace crashpad {
|
| //! report has been added to the database by calling ReportPending().
|
| //!
|
| //! Independently of being triggered by ReportPending(), objects of this class
|
| -//! periodically examine the database for pending reports. This allows failed
|
| -//! upload attempts for reports left in the pending state to be retried. It also
|
| -//! catches reports that are added without a ReportPending() signal being
|
| -//! caught. This may happen if crash reports are added to the database by other
|
| -//! processes.
|
| +//! can periodically examine the database for pending reports. This allows
|
| +//! failed upload attempts for reports left in the pending state to be retried.
|
| +//! It also catches reports that are added without a ReportPending() signal
|
| +//! being caught. This may happen if crash reports are added to the database by
|
| +//! other processes.
|
| class CrashReportUploadThread : public WorkerThread::Delegate {
|
| public:
|
| //! \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.
|
| + //! \param[in] watch_pending_reports Whether to periodically check for new
|
| + //! pending reports not already known to exist. When `false`, only an
|
| + //! initial upload attempt will be made for reports known to exist by
|
| + //! having been added by the ReportPending() method. No scans for new
|
| + //! pending reports will be conducted.
|
| //! \param[in] rate_limit Whether uploads should be throttled to a (currently
|
| //! hardcoded) rate.
|
| //! \param[in] upload_gzip Whether uploads should use `gzip` compression.
|
| CrashReportUploadThread(CrashReportDatabase* database,
|
| const std::string& url,
|
| + bool watch_pending_reports,
|
| bool rate_limit,
|
| bool upload_gzip);
|
| ~CrashReportUploadThread();
|
| @@ -75,8 +83,11 @@ class CrashReportUploadThread : public WorkerThread::Delegate {
|
| //! \brief Informs the upload thread that a new pending report has been added
|
| //! to the database.
|
| //!
|
| + //! \param[in] report_uuid The unique identifier of the newly added pending
|
| + //! report.
|
| + //!
|
| //! This method may be called from any thread.
|
| - void ReportPending();
|
| + void ReportPending(const UUID& report_uuid);
|
|
|
| private:
|
| //! \brief The result code from UploadReport().
|
| @@ -99,8 +110,13 @@ class CrashReportUploadThread : public WorkerThread::Delegate {
|
| kRetry,
|
| };
|
|
|
| - //! \brief Obtains all pending reports from the database, and calls
|
| - //! ProcessPendingReport() to process each one.
|
| + //! \brief Calls ProcessPendingReport() on pending reports.
|
| + //!
|
| + //! Assuming Stop() has not been called, this will process reports that the
|
| + //! object has been made aware of in ReportPending(). Additionally, if the
|
| + //! object was constructed with \a watch_pending_reports, it will also scan
|
| + //! the crash report database for other pending reports, and process those as
|
| + //! well.
|
| void ProcessPendingReports();
|
|
|
| //! \brief Processes a single pending report from the database.
|
| @@ -137,11 +153,13 @@ class CrashReportUploadThread : public WorkerThread::Delegate {
|
| //! been called on any thread, as well as periodically on a timer.
|
| void DoWork(const WorkerThread* thread) override;
|
|
|
| - std::string url_;
|
| + const std::string url_;
|
| WorkerThread thread_;
|
| + ThreadSafeVector<UUID> known_pending_report_uuids_;
|
| CrashReportDatabase* database_; // weak
|
| - bool rate_limit_;
|
| - bool upload_gzip_;
|
| + const bool watch_pending_reports_;
|
| + const bool rate_limit_;
|
| + const bool upload_gzip_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CrashReportUploadThread);
|
| };
|
|
|