summaryrefslogtreecommitdiffstats
path: root/remoting/base/breakpad_win.cc
diff options
context:
space:
mode:
authoralexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-16 05:09:25 +0000
committeralexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-16 05:09:25 +0000
commit70ebae40787a60037db0411bf62f747dc71c464a (patch)
treeb6fcdcf7e0e62494c10d0bf413d43b6849d1f118 /remoting/base/breakpad_win.cc
parent399c3f96081fc2922c646d34c1bc7e1a1742da06 (diff)
downloadchromium_src-70ebae40787a60037db0411bf62f747dc71c464a.zip
chromium_src-70ebae40787a60037db0411bf62f747dc71c464a.tar.gz
chromium_src-70ebae40787a60037db0411bf62f747dc71c464a.tar.bz2
C++ readability review fixes for r141239: Make Chromoting Host report crashes to Breakpad (Windows only).
BUG=130678 TEST=remoting_unittests.BreakpadWinDeathTest Review URL: https://chromiumcodereview.appspot.com/10535082 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142581 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/base/breakpad_win.cc')
-rw-r--r--remoting/base/breakpad_win.cc53
1 files changed, 28 insertions, 25 deletions
diff --git a/remoting/base/breakpad_win.cc b/remoting/base/breakpad_win.cc
index 732c186..b622668 100644
--- a/remoting/base/breakpad_win.cc
+++ b/remoting/base/breakpad_win.cc
@@ -3,7 +3,7 @@
// found in the LICENSE file.
// This module contains the necessary code to register the Breakpad exception
-// handler. This implementation is based on Chrome/Crome Frame crash reporitng
+// handler. This implementation is based on Chrome/Chrome Frame crash reporting
// code. See:
// - src/chrome/app/breakpad_win.cc
// - src/chrome_frame/crash_server_init.cc
@@ -13,6 +13,7 @@
#include "remoting/base/breakpad.h"
#include <windows.h>
+#include <string>
#include "base/atomicops.h"
#include "base/logging.h"
@@ -20,12 +21,12 @@
#include "base/lazy_instance.h"
#include "base/memory/scoped_ptr.h"
#include "base/process_util.h"
-#include "base/string16.h"
+#include "base/utf_string_conversions.h"
#include "base/win/wrapped_window_proc.h"
#include "breakpad/src/client/windows/handler/exception_handler.h"
namespace remoting {
-void InitializeCrashReportingForTest(const wchar_t*);
+void InitializeCrashReportingForTest(const wchar_t* pipe_name);
} // namespace remoting
namespace {
@@ -58,7 +59,7 @@ class BreakpadWin {
BreakpadWin();
~BreakpadWin();
- static BreakpadWin& GetInstance();
+ static BreakpadWin* GetInstance();
private:
// Returns the Custom information to be used for crash reporting.
@@ -71,13 +72,14 @@ class BreakpadWin {
// the crash dump is created. To prevent duplicate crash reports we
// make every thread calling this method, except the very first one,
// go to sleep.
- static bool OnExceptionCallback(void*, EXCEPTION_POINTERS*,
- MDRawAssertionInfo*);
+ static bool OnExceptionCallback(void* context,
+ EXCEPTION_POINTERS* exinfo,
+ MDRawAssertionInfo* assertion);
// Crashes the process after generating a dump for the provided exception.
// Note that the crash reporter should be initialized before calling this
// function for it to do anything.
- static int OnWindowProcedureException(EXCEPTION_POINTERS* info);
+ static int OnWindowProcedureException(EXCEPTION_POINTERS* exinfo);
// Breakpad's exception handler.
scoped_ptr<google_breakpad::ExceptionHandler> breakpad_;
@@ -106,8 +108,10 @@ BreakpadWin::BreakpadWin() : handling_exception_(0) {
_CrtSetReportMode(_CRT_ASSERT, 0);
// Get the alternate dump directory. We use the temp path.
+ // N.B. We don't use base::GetTempDir() here to avoid running more code then
+ // necessary before crashes can be properly reported.
wchar_t temp_directory[MAX_PATH + 1] = { 0 };
- DWORD length = ::GetTempPath(MAX_PATH, temp_directory);
+ DWORD length = GetTempPath(MAX_PATH, temp_directory);
if (length == 0)
return;
@@ -141,8 +145,8 @@ BreakpadWin::~BreakpadWin() {
}
// static
-BreakpadWin& BreakpadWin::GetInstance() {
- return g_instance.Get();
+BreakpadWin* BreakpadWin::GetInstance() {
+ return &g_instance.Get();
}
// Returns the Custom information to be used for crash reporting.
@@ -152,9 +156,9 @@ google_breakpad::CustomClientInfo* BreakpadWin::GetCustomInfo() {
scoped_ptr<FileVersionInfo> version_info(
FileVersionInfo::CreateFileVersionInfoForModule(binary));
- string16 version;
+ std::wstring version;
if (version_info.get())
- version = version_info->product_version();
+ version = UTF16ToWide(version_info->product_version());
if (version.empty())
version = kBreakpadVersionDefault;
@@ -172,10 +176,11 @@ google_breakpad::CustomClientInfo* BreakpadWin::GetCustomInfo() {
}
// static
-bool BreakpadWin::OnExceptionCallback(
- void*, EXCEPTION_POINTERS*, MDRawAssertionInfo*) {
- BreakpadWin& self = BreakpadWin::GetInstance();
- if (NoBarrier_CompareAndSwap(&self.handling_exception_, 0, 1) != 0) {
+bool BreakpadWin::OnExceptionCallback(void* /* context */,
+ EXCEPTION_POINTERS* /* exinfo */,
+ MDRawAssertionInfo* /* assertion */) {
+ BreakpadWin* self = BreakpadWin::GetInstance();
+ if (NoBarrier_CompareAndSwap(&self->handling_exception_, 0, 1) != 0) {
// Capture every thread except the first one in the sleep. We don't
// want multiple threads to concurrently report exceptions.
::Sleep(INFINITE);
@@ -184,12 +189,12 @@ bool BreakpadWin::OnExceptionCallback(
}
// static
-int BreakpadWin::OnWindowProcedureException(EXCEPTION_POINTERS* info) {
- BreakpadWin& self = BreakpadWin::GetInstance();
- if (self.breakpad_.get() != NULL) {
- self.breakpad_->WriteMinidumpForException(info);
- ::TerminateProcess(::GetCurrentProcess(),
- info->ExceptionRecord->ExceptionCode);
+int BreakpadWin::OnWindowProcedureException(EXCEPTION_POINTERS* exinfo) {
+ BreakpadWin* self = BreakpadWin::GetInstance();
+ if (self->breakpad_.get() != NULL) {
+ self->breakpad_->WriteMinidumpForException(exinfo);
+ TerminateProcess(GetCurrentProcess(),
+ exinfo->ExceptionRecord->ExceptionCode);
}
return EXCEPTION_CONTINUE_SEARCH;
}
@@ -205,9 +210,7 @@ void InitializeCrashReporting() {
void InitializeCrashReportingForTest(const wchar_t* pipe_name) {
BreakpadWin::pipe_name_ = pipe_name;
-
- // Touch the object to make sure it is initialized.
- BreakpadWin::GetInstance();
+ InitializeCrashReporting();
}
} // namespace remoting