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

Unified Diff: chrome/app/breakpad_win.cc

Issue 9432033: Add experiments info to crash dumps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Last Few Nits Created 8 years, 8 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 | « chrome/app/breakpad_win.h ('k') | chrome/app/run_all_unittests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/app/breakpad_win.cc
===================================================================
--- chrome/app/breakpad_win.cc (revision 130670)
+++ chrome/app/breakpad_win.cc (working copy)
@@ -19,11 +19,13 @@
#include "base/memory/scoped_ptr.h"
#include "base/string_split.h"
#include "base/string_util.h"
+#include "base/string16.h"
#include "base/stringprintf.h"
#include "base/utf_string_conversions.h"
#include "base/win/registry.h"
#include "base/win/win_util.h"
#include "breakpad/src/client/windows/handler/exception_handler.h"
+#include "chrome/app/breakpad_field_trial_win.h"
#include "chrome/app/hard_error_handler_win.h"
#include "chrome/common/child_process_logging.h"
#include "chrome/common/chrome_result_codes.h"
@@ -34,6 +36,18 @@
#include "chrome/installer/util/install_util.h"
#include "policy/policy_constants.h"
+namespace breakpad_win {
+
+std::vector<google_breakpad::CustomInfoEntry>* g_custom_entries = NULL;
+size_t g_num_of_experiments_offset = 0;
+size_t g_experiment_chunks_offset = 0;
+
+} // namespace breakpad_win
+
+using breakpad_win::g_custom_entries;
+using breakpad_win::g_experiment_chunks_offset;
+using breakpad_win::g_num_of_experiments_offset;
+
namespace {
// Minidump with stacks, PEB, TEB, and unloaded module list.
@@ -65,19 +79,15 @@
google_breakpad::ExceptionHandler* g_breakpad = NULL;
google_breakpad::ExceptionHandler* g_dumphandler_no_crash = NULL;
-// A pointer to the custom entries that we send in the event of a crash. We need
-// this pointer, along with the offsets into it below, so that we can keep the
-// data updated as the state of the browser changes.
-static std::vector<google_breakpad::CustomInfoEntry>* g_custom_entries = NULL;
-static size_t g_url_chunks_offset;
-static size_t g_num_of_extensions_offset;
-static size_t g_extension_ids_offset;
-static size_t g_client_id_offset;
-static size_t g_gpu_info_offset;
-static size_t g_printer_info_offset;
-static size_t g_num_of_views_offset;
-static size_t g_num_switches_offset;
-static size_t g_switches_offset;
+static size_t g_url_chunks_offset = 0;
+static size_t g_num_of_extensions_offset = 0;
+static size_t g_extension_ids_offset = 0;
+static size_t g_client_id_offset = 0;
+static size_t g_gpu_info_offset = 0;
+static size_t g_printer_info_offset = 0;
+static size_t g_num_of_views_offset = 0;
+static size_t g_num_switches_offset = 0;
+static size_t g_switches_offset = 0;
// Maximum length for plugin path to include in plugin crash reports.
const size_t kMaxPluginPathLength = 256;
@@ -253,9 +263,10 @@
google_breakpad::CustomInfoEntry(L"num-extensions", L"N/A"));
g_extension_ids_offset = g_custom_entries->size();
- for (int i = 0; i < kMaxReportedActiveExtensions; ++i) {
+ // one-based index for the name suffix.
+ for (int i = 1; i <= kMaxReportedActiveExtensions; ++i) {
g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
- base::StringPrintf(L"extension-%i", i + 1).c_str(), L""));
+ base::StringPrintf(L"extension-%i", i).c_str(), L""));
}
// Add empty values for the gpu_info. We'll put the actual values when we
@@ -276,10 +287,11 @@
// Add empty values for the prn_info-*. We'll put the actual values when we
// collect them at this location.
g_printer_info_offset = g_custom_entries->size();
- for (size_t i = 0; i < kMaxReportedPrinterRecords; ++i) {
+ // one-based index for the name suffix.
+ for (size_t i = 1; i <= kMaxReportedPrinterRecords; ++i) {
g_custom_entries->push_back(
google_breakpad::CustomInfoEntry(
- base::StringPrintf(L"prn-info-%d", i + 1).c_str(), L""));
+ base::StringPrintf(L"prn-info-%d", i).c_str(), L""));
}
// Read the id from registry. If reporting has never been enabled
@@ -298,9 +310,10 @@
google_breakpad::CustomInfoEntry(L"num-switches", L""));
g_switches_offset = g_custom_entries->size();
- for (int i = 0; i < kMaxSwitches; ++i) {
+ // one-based index for the name suffix.
+ for (int i = 1; i <= kMaxSwitches; ++i) {
g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
- base::StringPrintf(L"switch-%i", i + 1).c_str(), L""));
+ base::StringPrintf(L"switch-%i", i).c_str(), L""));
}
// Fill in the command line arguments using CommandLine::ForCurrentProcess().
@@ -316,9 +329,10 @@
// characters, which isn't enough for a URL. As a hack we create 8 entries
// and split the URL across the g_custom_entries.
g_url_chunks_offset = g_custom_entries->size();
- for (int i = 0; i < kMaxUrlChunks; ++i) {
+ // one-based index for the name suffix.
+ for (int i = 1; i <= kMaxUrlChunks; ++i) {
g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
- base::StringPrintf(L"url-chunk-%i", i + 1).c_str(), L""));
+ base::StringPrintf(L"url-chunk-%i", i).c_str(), L""));
}
if (type == L"plugin") {
@@ -332,6 +346,21 @@
google_breakpad::CustomInfoEntry(L"num-views", L"N/A"));
}
+ g_num_of_experiments_offset = g_custom_entries->size();
+ g_custom_entries->push_back(
+ google_breakpad::CustomInfoEntry(L"num-experiments", L"N/A"));
+
+ g_experiment_chunks_offset = g_custom_entries->size();
+ // We depend on this in UpdateExperiments...
+ DCHECK_NE(0UL, g_experiment_chunks_offset);
+ // And the test code depends on this.
+ DCHECK_EQ(g_num_of_experiments_offset + 1, g_experiment_chunks_offset);
+ // one-based index for the name suffix.
+ for (int i = 1; i <= kMaxReportedExperimentChunks; ++i) {
+ g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
+ base::StringPrintf(L"experiment-chunk-%i", i).c_str(), L""));
+ }
+
static google_breakpad::CustomClientInfo custom_client_info;
custom_client_info.entries = &g_custom_entries->front();
custom_client_info.count = g_custom_entries->size();
@@ -535,6 +564,15 @@
} // namespace
+namespace testing {
+
+// Access to namespace protected functions for testing purposes.
+void InitCustomInfoEntries() {
+ GetCustomInfo(L"", L"", L"");
+}
+
+} // namespace testing
+
bool WrapMessageBoxWithSEH(const wchar_t* text, const wchar_t* caption,
UINT flags, bool* exit_now) {
// We wrap the call to MessageBoxW with a SEH handler because it some
« no previous file with comments | « chrome/app/breakpad_win.h ('k') | chrome/app/run_all_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698