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..87ad299245efc63d363b5cdd011c9c0377052704 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 requesting a single crash upload from |
+// components/crash/content/app/crashpad.cc. Called through chrome_elf dll. |
+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) { |
Mark Mentovai
2016/08/25 20:25:11
This whole function should probably just follow th
gayane -on leave until 09-2017
2016/08/26 00:12:54
Done.
|
+ // 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 = |
Mark Mentovai
2016/08/25 20:25:11
This type wasn’t ever declared.
gayane -on leave until 09-2017
2016/08/26 00:12:54
Done.
|
+ reinterpret_cast<RequestSingleCrashUploadPointer>( |
+ GetProcAddress(elf_module, kRequestSingleCrashUploadFunc); |
Mark Mentovai
2016/08/25 20:25:11
No reason for this to be a constant as opposed to
gayane -on leave until 09-2017
2016/08/26 00:12:54
Done.
|
+ |
+ 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 |
+} |