Crashpad
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
crashpad::CrashReportDatabase Class Referenceabstract

An interface for managing a collection of crash report files and metadata associated with the crash reports. More...

#include "client/crash_report_database.h"

Inheritance diagram for crashpad::CrashReportDatabase:
crashpad::CrashReportDatabaseGeneric crashpad::CrashReportDatabaseMac crashpad::CrashReportDatabaseWin

Classes

class  NewReport
 A crash report that is in the process of being written. More...
 
struct  Report
 A crash report record. More...
 
class  UploadReport
 A crash report that is in the process of being uploaded. More...
 

Public Types

enum  OperationStatus
 The result code for operations performed on a database. More...
 

Public Member Functions

virtual SettingsGetSettings ()=0
 Returns the Settings object for this database. More...
 
virtual OperationStatus PrepareNewCrashReport (std::unique_ptr< NewReport > *report)=0
 Creates a record of a new crash report. More...
 
virtual OperationStatus FinishedWritingCrashReport (std::unique_ptr< NewReport > report, UUID *uuid)=0
 Informs the database that a crash report has been successfully written. More...
 
virtual OperationStatus LookUpCrashReport (const UUID &uuid, Report *report)=0
 Returns the crash report record for the unique identifier. More...
 
virtual OperationStatus GetPendingReports (std::vector< Report > *reports)=0
 Returns a list of crash report records that have not been uploaded. More...
 
virtual OperationStatus GetCompletedReports (std::vector< Report > *reports)=0
 Returns a list of crash report records that have been completed, either by being uploaded or by skipping upload. More...
 
virtual OperationStatus GetReportForUploading (const UUID &uuid, std::unique_ptr< const UploadReport > *report, bool report_metrics=true)=0
 Obtains and locks a report object for uploading to a collection server. More...
 
OperationStatus RecordUploadComplete (std::unique_ptr< const UploadReport > report, const std::string &id)
 Records a successful upload for a report and updates the last upload attempt time as returned by Settings::GetLastUploadAttemptTime(). More...
 
virtual OperationStatus SkipReportUpload (const UUID &uuid, Metrics::CrashSkippedReason reason)=0
 Moves a report from the pending state to the completed state, but without the report being uploaded. More...
 
virtual OperationStatus DeleteReport (const UUID &uuid)=0
 Deletes a crash report file and its associated metadata. More...
 
virtual OperationStatus RequestUpload (const UUID &uuid)=0
 Marks a crash report as explicitly requested to be uploaded by the user and moves it to 'pending' state. More...
 
virtual int CleanDatabase (time_t lockfile_ttl)
 Cleans the database of expired lockfiles, metadata without report files, and report files without metadata. More...
 

Static Public Member Functions

static std::unique_ptr< CrashReportDatabaseInitialize (const base::FilePath &path)
 Opens a database of crash reports, possibly creating it. More...
 
static std::unique_ptr< CrashReportDatabaseInitializeWithoutCreating (const base::FilePath &path)
 Opens an existing database of crash reports. More...
 

Detailed Description

An interface for managing a collection of crash report files and metadata associated with the crash reports.

All Report objects that are returned by this class are logically const. They are snapshots of the database at the time the query was run, and the data returned is liable to change after the query is executed.

The lifecycle of a crash report has three stages:

  1. New: A crash report is created with PrepareNewCrashReport(), the the client then writes the report, and then calls FinishedWritingCrashReport() to make the report Pending.
  2. Pending: The report has been written but has not been locally processed, or it was has been brought back from 'Completed' state by user request.
  3. Completed: The report has been locally processed, either by uploading it to a collection server and calling RecordUploadComplete(), or by calling SkipReportUpload().

Member Enumeration Documentation

◆ OperationStatus

The result code for operations performed on a database.

Enumerator
kNoError 

No error occurred.

kReportNotFound 

The report that was requested could not be located.

This may occur when the report is present in the database but not in a
state appropriate for the requested operation, for example, if
GetReportForUploading() is called to obtain report that’s already in the
completed state. 
kFileSystemError 

An error occured while performing a file operation on a crash report.

A database is responsible for managing both the metadata about a report and the actual crash report itself. This error is returned when an error occurred when managing the report file. Additional information will be logged.

kDatabaseError 

An error occured while recording metadata for a crash report or database-wide settings.

A database is responsible for managing both the metadata about a report and the actual crash report itself. This error is returned when an error occurred when managing the metadata about a crash report or database-wide settings. Additional information will be logged.

kBusyError 

The operation could not be completed because a concurrent operation affecting the report is occurring.

kCannotRequestUpload 

The report cannot be uploaded by user request as it has already been uploaded.

Member Function Documentation

◆ CleanDatabase()

virtual int crashpad::CrashReportDatabase::CleanDatabase ( time_t  lockfile_ttl)
inlinevirtual

Cleans the database of expired lockfiles, metadata without report files, and report files without metadata.

This method does nothing on the macOS and Windows implementations of the database.

Parameters
[in]lockfile_ttlThe number of seconds at which lockfiles or new report files are considered expired.
Returns
The number of reports cleaned.

Reimplemented in crashpad::CrashReportDatabaseGeneric.

◆ DeleteReport()

virtual OperationStatus crashpad::CrashReportDatabase::DeleteReport ( const UUID uuid)
pure virtual

Deletes a crash report file and its associated metadata.

Parameters
[in]uuidThe UUID of the report to delete.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ FinishedWritingCrashReport()

virtual OperationStatus crashpad::CrashReportDatabase::FinishedWritingCrashReport ( std::unique_ptr< NewReport report,
UUID uuid 
)
pure virtual

Informs the database that a crash report has been successfully written.

Parameters
[in]reportA NewReport obtained with PrepareNewCrashReport(). The NewReport object will be invalidated as part of this call.
[out]uuidThe UUID of this crash report.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ GetCompletedReports()

virtual OperationStatus crashpad::CrashReportDatabase::GetCompletedReports ( std::vector< Report > *  reports)
pure virtual

Returns a list of crash report records that have been completed, either by being uploaded or by skipping upload.

Parameters
[out]reportsA list of crash report record objects. This must be empty on entry. Only valid if this returns kNoError.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ GetPendingReports()

virtual OperationStatus crashpad::CrashReportDatabase::GetPendingReports ( std::vector< Report > *  reports)
pure virtual

Returns a list of crash report records that have not been uploaded.

Parameters
[out]reportsA list of crash report record objects. This must be empty on entry. Only valid if this returns kNoError.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ GetReportForUploading()

virtual OperationStatus crashpad::CrashReportDatabase::GetReportForUploading ( const UUID uuid,
std::unique_ptr< const UploadReport > *  report,
bool  report_metrics = true 
)
pure virtual

Obtains and locks a report object for uploading to a collection server.

Callers should upload the crash report using the FileReader provided. Callers should then call RecordUploadComplete() to record a successful upload. If RecordUploadComplete() is not called, the upload attempt will be recorded as unsuccessful and the report lock released when report is destroyed.

Parameters
[in]uuidThe unique identifier for the crash report record.
[out]reportA crash report record for the report to be uploaded. Only valid if this returns kNoError.
[in]report_metricsIf false, metrics will not be recorded for this upload attempt when RecordUploadComplete() is called or report is destroyed. Metadata for the upload attempt will still be recorded in the database.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ GetSettings()

virtual Settings* crashpad::CrashReportDatabase::GetSettings ( )
pure virtual

Returns the Settings object for this database.

Returns
A weak pointer to the Settings object, which is owned by the database.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ Initialize()

std::unique_ptr< CrashReportDatabase > crashpad::CrashReportDatabase::Initialize ( const base::FilePath &  path)
static

Opens a database of crash reports, possibly creating it.

Parameters
[in]pathA path to the database to be created or opened. If the database does not yet exist, it will be created if possible. Note that for databases implemented as directory structures, existence refers solely to the outermost directory.
Returns
A database object on success, nullptr on failure with an error logged.
See also
InitializeWithoutCreating

◆ InitializeWithoutCreating()

std::unique_ptr< CrashReportDatabase > crashpad::CrashReportDatabase::InitializeWithoutCreating ( const base::FilePath &  path)
static

Opens an existing database of crash reports.

Parameters
[in]pathA path to the database to be opened. If the database does not yet exist, it will not be created. Note that for databases implemented as directory structures, existence refers solely to the outermost directory. On such databases, as long as the outermost directory is present, this method will create the inner structure.
Returns
A database object on success, nullptr on failure with an error logged.
See also
Initialize

◆ LookUpCrashReport()

virtual OperationStatus crashpad::CrashReportDatabase::LookUpCrashReport ( const UUID uuid,
Report report 
)
pure virtual

Returns the crash report record for the unique identifier.

Parameters
[in]uuidThe crash report record unique identifier.
[out]reportA crash report record. Only valid if this returns kNoError.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ PrepareNewCrashReport()

virtual OperationStatus crashpad::CrashReportDatabase::PrepareNewCrashReport ( std::unique_ptr< NewReport > *  report)
pure virtual

Creates a record of a new crash report.

Callers should write the crash report using the FileWriter provided. Callers should then call FinishedWritingCrashReport() to complete report creation. If an error is encountered while writing the crash report, no special action needs to be taken. If FinishedWritingCrashReport() is not called, the report will be removed from the database when report is destroyed.

Parameters
[out]reportA NewReport object containing a FileWriter with which to write the report data. Only valid if this returns kNoError.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ RecordUploadComplete()

CrashReportDatabase::OperationStatus crashpad::CrashReportDatabase::RecordUploadComplete ( std::unique_ptr< const UploadReport report,
const std::string &  id 
)

Records a successful upload for a report and updates the last upload attempt time as returned by Settings::GetLastUploadAttemptTime().

Parameters
[in]reportA UploadReport object obtained from GetReportForUploading(). The UploadReport object will be invalidated and the report unlocked as part of this call.
[in]idThe possibly empty identifier assigned to this crash report by the collection server.
Returns
The operation status code.

◆ RequestUpload()

virtual OperationStatus crashpad::CrashReportDatabase::RequestUpload ( const UUID uuid)
pure virtual

Marks a crash report as explicitly requested to be uploaded by the user and moves it to 'pending' state.

Parameters
[in]uuidThe unique identifier for the crash report record.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.

◆ SkipReportUpload()

virtual OperationStatus crashpad::CrashReportDatabase::SkipReportUpload ( const UUID uuid,
Metrics::CrashSkippedReason  reason 
)
pure virtual

Moves a report from the pending state to the completed state, but without the report being uploaded.

This can be used if the user has disabled crash report collection, but crash generation is still enabled in the product.

Parameters
[in]uuidThe unique identifier for the crash report record.
[in]reasonThe reason the report upload is being skipped for metrics tracking purposes.
Returns
The operation status code.

Implemented in crashpad::CrashReportDatabaseWin, crashpad::CrashReportDatabaseGeneric, and crashpad::CrashReportDatabaseMac.


The documentation for this class was generated from the following files: