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

Unified Diff: remoting/base/breakpad_win.cc

Issue 10535082: /C++ readability/ - Make Chromoting Host report crashes to Breakpad (Windows only). The user must e… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing a bad merge. Created 8 years, 6 months 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 | « remoting/base/breakpad_mac.mm ('k') | remoting/base/breakpad_win_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/base/breakpad_win.cc
diff --git a/remoting/base/breakpad_win.cc b/remoting/base/breakpad_win.cc
index 732c186b5bb25662b9974736f73af8728a5c7682..b622668173902a1db4fcfe649c06f76e441770fc 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
« no previous file with comments | « remoting/base/breakpad_mac.mm ('k') | remoting/base/breakpad_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698