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 |
+} |