Index: client/crash_report_database.h |
diff --git a/client/crash_report_database.h b/client/crash_report_database.h |
index 9d135c154dc7e08f99ec1089065f44933d508e16..baf95adcd335fce906b4c5b0f312210c561a11ed 100644 |
--- a/client/crash_report_database.h |
+++ b/client/crash_report_database.h |
@@ -106,6 +106,32 @@ class CrashReportDatabase { |
base::FilePath path; |
}; |
+ //! \brief A scoper to cleanly handle the interface requirement imposed by |
+ //! PrepareNewCrashReport(). |
+ //! |
+ //! Calls ErrorWritingCrashReport() upon destruction unless disarmed by |
+ //! calling Disarm(). Armed upon construction. |
+ class CallErrorWritingCrashReport { |
+ public: |
+ //! \brief Arms the object to call ErrorWritingCrashReport() on \a database |
+ //! with an argument of \a new_report on destruction. |
+ CallErrorWritingCrashReport(CrashReportDatabase* database, |
+ NewReport* new_report); |
+ |
+ //! \brief Calls ErrorWritingCrashReport() if the object is armed. |
+ ~CallErrorWritingCrashReport(); |
+ |
+ //! \brief Disarms the object so that CallErrorWritingCrashReport() will not |
+ //! be called upon destruction. |
+ void Disarm(); |
+ |
+ private: |
+ CrashReportDatabase* database_; // weak |
+ NewReport* new_report_; // weak |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CallErrorWritingCrashReport); |
+ }; |
+ |
//! \brief The result code for operations performed on a database. |
enum OperationStatus { |
//! \brief No error occurred. |
@@ -156,12 +182,17 @@ class CrashReportDatabase { |
//! \brief Creates a record of a new crash report. |
//! |
//! Callers can then write the crash report using the file handle provided. |
- //! The caller does not own this handle, and it must be explicitly closed with |
+ //! The caller does not own the new crash report record or its file handle, |
+ //! both of which must be explicitly disposed of by calling |
//! FinishedWritingCrashReport() or ErrorWritingCrashReport(). |
//! |
- //! \param[out] report A file handle to which the crash report data should be |
- //! written. Only valid if this returns #kNoError. The caller must not |
- //! close this handle. |
+ //! To arrange to call ErrorWritingCrashReport() during any early return, use |
+ //! CallErrorWritingCrashReport. |
+ //! |
+ //! \param[out] report A NewReport object containing a file handle to which |
+ //! the crash report data should be written. Only valid if this returns |
+ //! #kNoError. The caller must not delete the NewReport object or close |
+ //! the file handle within. |
//! |
//! \return The operation status code. |
virtual OperationStatus PrepareNewCrashReport(NewReport** report) = 0; |
@@ -171,8 +202,9 @@ class CrashReportDatabase { |
//! After calling this method, the database is permitted to move and rename |
//! the file at NewReport::path. |
//! |
- //! \param[in] report A handle obtained with PrepareNewCrashReport(). The |
- //! handle will be invalidated as part of this call. |
+ //! \param[in] report A NewReport obtained with PrepareNewCrashReport(). The |
+ //! NewReport object and file handle within will be invalidated as part of |
+ //! this call. |
//! \param[out] uuid The UUID of this crash report. |
//! |
//! \return The operation status code. |
@@ -186,8 +218,9 @@ class CrashReportDatabase { |
//! After calling this method, the database is permitted to remove the file at |
//! NewReport::path. |
//! |
- //! \param[in] report A handle obtained with PrepareNewCrashReport(). The |
- //! handle will be invalidated as part of this call. |
+ //! \param[in] report A NewReport obtained with PrepareNewCrashReport(). The |
+ //! NewReport object and file handle within will be invalidated as part of |
+ //! this call. |
//! |
//! \return The operation status code. |
virtual OperationStatus ErrorWritingCrashReport(NewReport* report) = 0; |