Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: third_party/crashpad/crashpad/handler/handler_main.cc

Issue 2478633002: Update Crashpad to b47bf6c250c6b825dee1c5fbad9152c2c962e828 (Closed)
Patch Set: mac comment 2 Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/crashpad/crashpad/handler/handler_main.cc
diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc
index 8749c5836357fa0870162fb028fa29a34b110f10..29c5ddc14e6c4a26b7842eebb813b00f7c5a2eec 100644
--- a/third_party/crashpad/crashpad/handler/handler_main.cc
+++ b/third_party/crashpad/crashpad/handler/handler_main.cc
@@ -59,6 +59,7 @@
#include "handler/win/crash_report_exception_handler.h"
#include "util/win/exception_handler_server.h"
#include "util/win/handle.h"
+#include "util/win/initial_client_data.h"
#endif // OS_MACOSX
namespace crashpad {
@@ -76,8 +77,15 @@ void Usage(const base::FilePath& me) {
" --handshake-fd=FD establish communication with the client over FD\n"
" --mach-service=SERVICE register SERVICE with the bootstrap server\n"
#elif defined(OS_WIN)
-" --handshake-handle=HANDLE\n"
-" create a new pipe and send its name via HANDLE\n"
+" --initial-client-data=HANDLE_request_crash_dump,\n"
+" HANDLE_request_non_crash_dump,\n"
+" HANDLE_non_crash_dump_completed,\n"
+" HANDLE_pipe,\n"
+" HANDLE_client_process,\n"
+" Address_crash_exception_information,\n"
+" Address_non_crash_exception_information,\n"
+" Address_debug_critical_section\n"
+" use precreated data to register initial client\n"
#endif // OS_MACOSX
" --metrics-dir=DIR store metrics files in DIR (only in Chromium)\n"
" --no-rate-limit don't rate limit crash uploads\n"
@@ -125,7 +133,7 @@ LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* exception_pointers) {
Metrics::HandlerCrashed(exception_pointers->ExceptionRecord->ExceptionCode);
return EXCEPTION_CONTINUE_SEARCH;
}
-#endif
+#endif // OS_WIN
} // namespace
@@ -145,9 +153,12 @@ int HandlerMain(int argc, char* argv[]) {
kOptionDatabase,
#if defined(OS_MACOSX)
kOptionHandshakeFD,
+#endif // OS_MACOSX
+#if defined(OS_WIN)
+ kOptionInitialClientData,
+#endif // OS_WIN
+#if defined(OS_MACOSX)
kOptionMachService,
-#elif defined(OS_WIN)
- kOptionHandshakeHandle,
#endif // OS_MACOSX
kOptionMetrics,
kOptionNoRateLimit,
@@ -173,41 +184,45 @@ int HandlerMain(int argc, char* argv[]) {
std::string mach_service;
bool reset_own_crash_exception_port_to_system_default;
#elif defined(OS_WIN)
- HANDLE handshake_handle;
std::string pipe_name;
+ InitialClientData initial_client_data;
#endif // OS_MACOSX
bool rate_limit;
} options = {};
#if defined(OS_MACOSX)
options.handshake_fd = -1;
-#elif defined(OS_WIN)
- options.handshake_handle = INVALID_HANDLE_VALUE;
#endif
options.rate_limit = true;
const option long_options[] = {
- {"annotation", required_argument, nullptr, kOptionAnnotation},
- {"database", required_argument, nullptr, kOptionDatabase},
+ {"annotation", required_argument, nullptr, kOptionAnnotation},
+ {"database", required_argument, nullptr, kOptionDatabase},
#if defined(OS_MACOSX)
- {"handshake-fd", required_argument, nullptr, kOptionHandshakeFD},
- {"mach-service", required_argument, nullptr, kOptionMachService},
-#elif defined(OS_WIN)
- {"handshake-handle", required_argument, nullptr, kOptionHandshakeHandle},
+ {"handshake-fd", required_argument, nullptr, kOptionHandshakeFD},
+#endif // OS_MACOSX
+#if defined(OS_WIN)
+ {"initial-client-data",
+ required_argument,
+ nullptr,
+ kOptionInitialClientData},
+#endif // OS_MACOSX
+#if defined(OS_MACOSX)
+ {"mach-service", required_argument, nullptr, kOptionMachService},
#endif // OS_MACOSX
- {"metrics-dir", required_argument, nullptr, kOptionMetrics},
- {"no-rate-limit", no_argument, nullptr, kOptionNoRateLimit},
+ {"metrics-dir", required_argument, nullptr, kOptionMetrics},
+ {"no-rate-limit", no_argument, nullptr, kOptionNoRateLimit},
#if defined(OS_MACOSX)
- {"reset-own-crash-exception-port-to-system-default",
- no_argument,
- nullptr,
- kOptionResetOwnCrashExceptionPortToSystemDefault},
+ {"reset-own-crash-exception-port-to-system-default",
+ no_argument,
+ nullptr,
+ kOptionResetOwnCrashExceptionPortToSystemDefault},
#elif defined(OS_WIN)
- {"pipe-name", required_argument, nullptr, kOptionPipeName},
+ {"pipe-name", required_argument, nullptr, kOptionPipeName},
#endif // OS_MACOSX
- {"url", required_argument, nullptr, kOptionURL},
- {"help", no_argument, nullptr, kOptionHelp},
- {"version", no_argument, nullptr, kOptionVersion},
- {nullptr, 0, nullptr, 0},
+ {"url", required_argument, nullptr, kOptionURL},
+ {"help", no_argument, nullptr, kOptionHelp},
+ {"version", no_argument, nullptr, kOptionVersion},
+ {nullptr, 0, nullptr, 0},
};
int opt;
@@ -216,7 +231,7 @@ int HandlerMain(int argc, char* argv[]) {
case kOptionAnnotation: {
std::string key;
std::string value;
- if (!SplitString(optarg, '=', &key, &value)) {
+ if (!SplitStringFirst(optarg, '=', &key, &value)) {
ToolSupport::UsageHint(me, "--annotation requires KEY=VALUE");
return EXIT_FAILURE;
}
@@ -246,14 +261,10 @@ int HandlerMain(int argc, char* argv[]) {
break;
}
#elif defined(OS_WIN)
- case kOptionHandshakeHandle: {
- // Use unsigned int, because the handle was presented by the client in
- // 0x%x format.
- unsigned int handle_uint;
- if (!StringToNumber(optarg, &handle_uint) ||
- (options.handshake_handle = IntToHandle(handle_uint)) ==
- INVALID_HANDLE_VALUE) {
- ToolSupport::UsageHint(me, "--handshake-handle requires a HANDLE");
+ case kOptionInitialClientData: {
+ if (!options.initial_client_data.InitializeFromString(optarg)) {
+ ToolSupport::UsageHint(
+ me, "failed to parse --initial-client-data");
return EXIT_FAILURE;
}
break;
@@ -310,15 +321,14 @@ int HandlerMain(int argc, char* argv[]) {
return EXIT_FAILURE;
}
#elif defined(OS_WIN)
- if (options.handshake_handle == INVALID_HANDLE_VALUE &&
- options.pipe_name.empty()) {
- ToolSupport::UsageHint(me, "--handshake-handle or --pipe-name is required");
+ if (!options.initial_client_data.IsValid() && options.pipe_name.empty()) {
+ ToolSupport::UsageHint(me,
+ "--initial-client-data or --pipe-name is required");
return EXIT_FAILURE;
}
- if (options.handshake_handle != INVALID_HANDLE_VALUE &&
- !options.pipe_name.empty()) {
+ if (options.initial_client_data.IsValid() && !options.pipe_name.empty()) {
ToolSupport::UsageHint(
- me, "--handshake-handle and --pipe-name are incompatible");
+ me, "--initial-client-data and --pipe-name are incompatible");
return EXIT_FAILURE;
}
#endif // OS_MACOSX
@@ -389,20 +399,6 @@ int HandlerMain(int argc, char* argv[]) {
if (!options.pipe_name.empty()) {
exception_handler_server.SetPipeName(base::UTF8ToUTF16(options.pipe_name));
- } else if (options.handshake_handle != INVALID_HANDLE_VALUE) {
- std::wstring pipe_name = exception_handler_server.CreatePipe();
-
- uint32_t pipe_name_length = static_cast<uint32_t>(pipe_name.size());
- if (!LoggingWriteFile(options.handshake_handle,
- &pipe_name_length,
- sizeof(pipe_name_length))) {
- return EXIT_FAILURE;
- }
- if (!LoggingWriteFile(options.handshake_handle,
- pipe_name.c_str(),
- pipe_name.size() * sizeof(pipe_name[0]))) {
- return EXIT_FAILURE;
- }
}
#endif // OS_MACOSX
@@ -440,6 +436,13 @@ int HandlerMain(int argc, char* argv[]) {
CrashReportExceptionHandler exception_handler(
database.get(), &upload_thread, &options.annotations);
+#if defined(OS_WIN)
+ if (options.initial_client_data.IsValid()) {
+ exception_handler_server.InitializeWithInheritedDataForInitialClient(
+ options.initial_client_data, &exception_handler);
+ }
+#endif // OS_WIN
+
exception_handler_server.Run(&exception_handler);
upload_thread.Stop();
« no previous file with comments | « third_party/crashpad/crashpad/handler/handler.gyp ('k') | third_party/crashpad/crashpad/handler/win/crash_other_program.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698