| Index: client/crash_report_database_win.cc
|
| diff --git a/client/crash_report_database_win.cc b/client/crash_report_database_win.cc
|
| index f270530b70fdd54fedba79a1708924aa244291ea..6d2bf1afc83dc25cb18a900dcbb61457e8c617f8 100644
|
| --- a/client/crash_report_database_win.cc
|
| +++ b/client/crash_report_database_win.cc
|
| @@ -229,6 +229,19 @@ class Metadata {
|
| ReportState desired_state,
|
| ReportDisk** report_disk);
|
|
|
| + //! \brief Removes a report from the metadata database, without touching the
|
| + //! on-disk file.
|
| + //!
|
| + //! The returned report is only valid if CrashReportDatabase::kNoError is
|
| + //! returned. This will mark the database as dirty. Future metadata
|
| + //! operations for this report will not succeed.
|
| + //!
|
| + //! \param[in] uuid The report identifier to remove.
|
| + //! \param[out] report_path The found report's file_path, valid only if
|
| + //! CrashReportDatabase::kNoError is returned.
|
| + OperationStatus DeleteReport(const UUID& uuid,
|
| + base::FilePath* report_path);
|
| +
|
| private:
|
| Metadata(FileHandle handle, const base::FilePath& report_dir);
|
|
|
| @@ -351,6 +364,20 @@ OperationStatus Metadata::FindSingleReportAndMarkDirty(
|
| return os;
|
| }
|
|
|
| +OperationStatus Metadata::DeleteReport(const UUID& uuid,
|
| + base::FilePath* report_path) {
|
| + auto report_iter = std::find_if(
|
| + reports_.begin(), reports_.end(), [uuid](const ReportDisk& report) {
|
| + return report.uuid == uuid;
|
| + });
|
| + if (report_iter == reports_.end())
|
| + return CrashReportDatabase::kReportNotFound;
|
| + *report_path = report_iter->file_path;
|
| + reports_.erase(report_iter);
|
| + dirty_ = true;
|
| + return CrashReportDatabase::kNoError;
|
| +}
|
| +
|
| Metadata::Metadata(FileHandle handle, const base::FilePath& report_dir)
|
| : handle_(handle), report_dir_(report_dir), dirty_(false), reports_() {
|
| }
|
| @@ -531,6 +558,7 @@ class CrashReportDatabaseWin : public CrashReportDatabase {
|
| bool successful,
|
| const std::string& id) override;
|
| OperationStatus SkipReportUpload(const UUID& uuid) override;
|
| + OperationStatus DeleteReport(const UUID& uuid) override;
|
|
|
| private:
|
| scoped_ptr<Metadata> AcquireMetadata();
|
| @@ -560,9 +588,6 @@ bool CrashReportDatabaseWin::Initialize() {
|
| !CreateDirectoryIfNecessary(base_dir_.Append(kReportsDirectory)))
|
| return false;
|
|
|
| - // TODO(scottmg): When are completed reports pruned from disk? Delete here or
|
| - // maybe on AcquireMetadata().
|
| -
|
| if (!settings_.Initialize())
|
| return false;
|
|
|
| @@ -732,6 +757,26 @@ OperationStatus CrashReportDatabaseWin::RecordUploadAttempt(
|
| return kNoError;
|
| }
|
|
|
| +OperationStatus CrashReportDatabaseWin::DeleteReport(const UUID& uuid) {
|
| + INITIALIZATION_STATE_DCHECK_VALID(initialized_);
|
| +
|
| + scoped_ptr<Metadata> metadata(AcquireMetadata());
|
| + if (!metadata)
|
| + return kDatabaseError;
|
| +
|
| + base::FilePath report_path;
|
| + OperationStatus os = metadata->DeleteReport(uuid, &report_path);
|
| + if (os != kNoError)
|
| + return os;
|
| +
|
| + if (!DeleteFile(report_path.value().c_str())) {
|
| + PLOG(ERROR) << "DeleteFile "
|
| + << base::UTF16ToUTF8(report_path.value());
|
| + return kFileSystemError;
|
| + }
|
| + return kNoError;
|
| +}
|
| +
|
| OperationStatus CrashReportDatabaseWin::SkipReportUpload(const UUID& uuid) {
|
| INITIALIZATION_STATE_DCHECK_VALID(initialized_);
|
|
|
|
|