| Index: chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
|
| diff --git a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
|
| index d62973e34209172aa68e34df6a592eef45623a25..28790794e73debe755121165504077c4f2c694c4 100644
|
| --- a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
|
| +++ b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
|
| @@ -18,6 +18,7 @@ namespace {
|
| typedef void (*GetCrashReportsPointer)(
|
| const crash_reporter::Report** reports,
|
| size_t* report_count);
|
| +typedef void (*RequestSingleCrashUploadPointer)(const std::string& local_id);
|
|
|
| void GetReportsThunk(
|
| std::vector<crash_reporter::Report>* reports) {
|
| @@ -38,6 +39,21 @@ void GetReportsThunk(
|
| reports_pointer, reports_pointer + report_count);
|
| }
|
| }
|
| +
|
| +void RequestSingleCrashUploadThunk(const std::string& local_id) {
|
| + static RequestSingleCrashUploadPointer request_single_crash_upload = []() {
|
| + // The crash reporting is handled by chrome_elf.dll which loads early in
|
| + // the chrome process.
|
| + HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName);
|
| + return reinterpret_cast<RequestSingleCrashUploadPointer>(
|
| + elf_module ? GetProcAddress(elf_module, "RequestSingleCrashUploadImpl")
|
| + : nullptr);
|
| + }();
|
| +
|
| + if (request_single_crash_upload)
|
| + request_single_crash_upload(local_id);
|
| +}
|
| +
|
| #endif // OS_WIN
|
|
|
| UploadList::UploadInfo::State ReportUploadStateToUploadInfoState(
|
| @@ -49,6 +65,9 @@ UploadList::UploadInfo::State ReportUploadStateToUploadInfoState(
|
| case crash_reporter::ReportUploadState::Pending:
|
| return UploadList::UploadInfo::State::Pending;
|
|
|
| + case crash_reporter::ReportUploadState::Pending_UserRequested:
|
| + return UploadList::UploadInfo::State::Pending_UserRequested;
|
| +
|
| case crash_reporter::ReportUploadState::Uploaded:
|
| return UploadList::UploadInfo::State::Uploaded;
|
| }
|
| @@ -86,3 +105,14 @@ void CrashUploadListCrashpad::LoadUploadList(
|
| ReportUploadStateToUploadInfoState(report.state)));
|
| }
|
| }
|
| +
|
| +void CrashUploadListCrashpad::RequestSingleCrashUpload(
|
| + const std::string& local_id) {
|
| +#if defined(OS_WIN)
|
| + // On Windows, crash reporting is handled by chrome_elf.dll, that's why we
|
| + // can't call crash_reporter::RequestSingleCrashUpload directly.
|
| + RequestSingleCrashUploadThunk(local_id);
|
| +#else
|
| + crash_reporter::RequestSingleCrashUpload(local_id);
|
| +#endif
|
| +}
|
|
|