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

Unified Diff: win8/delegate_execute/crash_server_init.cc

Issue 11421031: Add basic crash reporting to delegate_execute.exe. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix up includes Created 8 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
« no previous file with comments | « win8/delegate_execute/crash_server_init.h ('k') | win8/delegate_execute/delegate_execute.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: win8/delegate_execute/crash_server_init.cc
diff --git a/win8/delegate_execute/crash_server_init.cc b/win8/delegate_execute/crash_server_init.cc
new file mode 100644
index 0000000000000000000000000000000000000000..76893164294c16338b78a283e603f93dbf17d9dd
--- /dev/null
+++ b/win8/delegate_execute/crash_server_init.cc
@@ -0,0 +1,96 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "win8/delegate_execute/crash_server_init.h"
+
+#include <shlobj.h>
+#include <windows.h>
+
+#include <cwchar>
+
+#include "base/file_version_info.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/win/win_util.h"
+#include "breakpad/src/client/windows/handler/exception_handler.h"
+
+const wchar_t kGoogleUpdatePipeName[] = L"\\\\.\\pipe\\GoogleCrashServices\\";
+const wchar_t kSystemPrincipalSid[] = L"S-1-5-18";
+
+const MINIDUMP_TYPE kLargerDumpType = static_cast<MINIDUMP_TYPE>(
+ MiniDumpWithProcessThreadData | // Get PEB and TEB.
+ MiniDumpWithUnloadedModules | // Get unloaded modules when available.
+ MiniDumpWithIndirectlyReferencedMemory); // Get memory referenced by stack.
+
+extern "C" IMAGE_DOS_HEADER __ImageBase;
+
+namespace {
+
+bool IsRunningSystemInstall() {
+ wchar_t exe_path[MAX_PATH * 2] = {0};
+ GetModuleFileName(reinterpret_cast<HMODULE>(&__ImageBase),
+ exe_path,
+ _countof(exe_path));
+
+ bool is_system = false;
+
+ wchar_t program_files_path[MAX_PATH] = {0};
+ if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL,
+ SHGFP_TYPE_CURRENT, program_files_path))) {
+ if (wcsstr(exe_path, program_files_path) == exe_path) {
+ is_system = true;
+ }
+ }
+
+ return is_system;
+}
+
+google_breakpad::CustomClientInfo* GetCustomInfo() {
+ scoped_ptr<FileVersionInfo> version_info(
+ FileVersionInfo::CreateFileVersionInfoForCurrentModule());
+
+ static google_breakpad::CustomInfoEntry ver_entry(
+ L"ver", version_info->file_version().c_str());
+ static google_breakpad::CustomInfoEntry prod_entry(L"prod", L"Chrome");
+ static google_breakpad::CustomInfoEntry plat_entry(L"plat", L"Win32");
+ static google_breakpad::CustomInfoEntry type_entry(L"ptype",
+ L"delegate_execute");
+ static google_breakpad::CustomInfoEntry entries[] = {
+ ver_entry, prod_entry, plat_entry, type_entry };
+ static google_breakpad::CustomClientInfo custom_info = {
+ entries, ARRAYSIZE(entries) };
+ return &custom_info;
+}
+
+} // namespace
+
+namespace delegate_execute {
+
+scoped_ptr<google_breakpad::ExceptionHandler> InitializeCrashReporting() {
+ wchar_t temp_path[MAX_PATH + 1] = {0};
+ DWORD path_len = ::GetTempPath(MAX_PATH, temp_path);
+
+ string16 pipe_name;
+ pipe_name = kGoogleUpdatePipeName;
+ if (IsRunningSystemInstall()) {
+ pipe_name += kSystemPrincipalSid;
+ } else {
+ string16 user_sid;
+ if (base::win::GetUserSidString(&user_sid)) {
+ pipe_name += user_sid;
+ } else {
+ // We don't think we're a system install, but we couldn't get the
+ // user SID. Try connecting to the system-level crash service as a
+ // last ditch effort.
+ pipe_name += kSystemPrincipalSid;
+ }
+ }
+
+ return scoped_ptr<google_breakpad::ExceptionHandler>(
+ new google_breakpad::ExceptionHandler(
+ temp_path, NULL, NULL, NULL,
+ google_breakpad::ExceptionHandler::HANDLER_ALL, kLargerDumpType,
+ pipe_name.c_str(), GetCustomInfo()));
+}
+
+} // namespace delegate_execute
« no previous file with comments | « win8/delegate_execute/crash_server_init.h ('k') | win8/delegate_execute/delegate_execute.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698