Chromium Code Reviews| 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..97fa845fda83589a89241500547b3ae331a53f11 100644 |
| --- a/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc |
| +++ b/chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc |
| @@ -15,6 +15,10 @@ |
| namespace { |
| #if defined(OS_WIN) |
| +// The name of the function used for reuqesting single crash upload through |
| +// chrome_elf dll. |
|
jwd
2016/08/24 15:09:20
Can you mention where the function is located too
gayane -on leave until 09-2017
2016/08/24 23:12:34
Done.
|
| +const char kRequestSingleCrashUploadFunc[] = "RequestSingleCrashUploadImpl"; |
| + |
| typedef void (*GetCrashReportsPointer)( |
| const crash_reporter::Report** reports, |
| size_t* report_count); |
| @@ -38,6 +42,21 @@ void GetReportsThunk( |
| reports_pointer, reports_pointer + report_count); |
| } |
| } |
| + |
| +void RequestSingleCrashUploadThunk(const std::string& local_id) { |
| + // The crash reporting is handled by chrome_elf.dll which loads early in |
| + // the chrome process. |
| + HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName); |
| + if (elf_module) { |
| + static RequestSingleCrashUploadPointer request_single_crash_upload = |
| + reinterpret_cast<RequestSingleCrashUploadPointer>( |
| + GetProcAddress(elf_module, kRequestSingleCrashUploadFunc); |
| + |
| + if (request_single_crash_upload) |
| + request_single_crash_upload(local_id); |
| + } |
| +} |
| + |
| #endif // OS_WIN |
| UploadList::UploadInfo::State ReportUploadStateToUploadInfoState( |
| @@ -51,6 +70,9 @@ UploadList::UploadInfo::State ReportUploadStateToUploadInfoState( |
| case crash_reporter::ReportUploadState::Uploaded: |
| return UploadList::UploadInfo::State::Uploaded; |
| + |
| + case crash_reporter::ReportUploadState::UserRequested: |
| + return UploadList::UploadInfo::State::UserRequested; |
| } |
| NOTREACHED(); |
| @@ -86,3 +108,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, thats why we |
| + // can't call crash_reporter::RequestSingleCrashUpload directly. |
| + RequestSingleCrashUploadThunk(local_id); |
| +#else |
| + crash_reporter::RequestSingleCrashUpload(local_id); |
| +#endif |
| +} |