summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorrsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 20:40:08 +0000
committerrsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 20:40:08 +0000
commit1b9575b6c17f75992713555056dceadf4770c565 (patch)
tree1dd5274380adfb20545affdd9a67a0353c8cb9dd /chrome
parenteb1b21a1d1425b5da525ba18946ba94454509ccb (diff)
downloadchromium_src-1b9575b6c17f75992713555056dceadf4770c565.zip
chromium_src-1b9575b6c17f75992713555056dceadf4770c565.tar.gz
chromium_src-1b9575b6c17f75992713555056dceadf4770c565.tar.bz2
Revert 101372 - Linux: Add more information to crash reports:
Reason for revert: Broke clang compile. - number of extensions - up to 10 extension IDs - number of views - number of switches - up to 15 switches BUG=60993,82977 TEST=none Review URL: http://codereview.chromium.org/7886057 TBR=thestig@chromium.org Review URL: http://codereview.chromium.org/7915004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101373 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/breakpad_linux.cc163
-rw-r--r--chrome/app/breakpad_win.cc5
-rw-r--r--chrome/common/child_process_logging.h20
-rw-r--r--chrome/common/child_process_logging_linux.cc50
4 files changed, 42 insertions, 196 deletions
diff --git a/chrome/app/breakpad_linux.cc b/chrome/app/breakpad_linux.cc
index 31294c6..1e518c7 100644
--- a/chrome/app/breakpad_linux.cc
+++ b/chrome/app/breakpad_linux.cc
@@ -144,14 +144,12 @@ class MimeWriter {
}
// Append key/value pair, splitting value into chunks no larger than
- // |chunk_size|. |chunk_size| cannot be greater than |kMaxCrashChunkSize|.
- // The msg_type string will have a counter suffix to distinguish each chunk.
+ // kMaxCrashChunkSize. The msg_type string will have a counter suffix to
+ // distinguish each chunk.
void AddPairDataInChunks(const char* msg_type,
size_t msg_type_size,
const char* msg_data,
- size_t msg_data_size,
- size_t chunk_size,
- bool strip_trailing_spaces);
+ size_t msg_data_size);
// Add binary file dump. Currently this is only done once, so the name is
// fixed.
@@ -170,7 +168,6 @@ class MimeWriter {
void AddString(const char* str) {
AddItem(str, my_strlen(str));
}
- void AddItemWithoutTrailingSpaces(const void* base, size_t size);
struct kernel_iovec iov_[kIovCapacity];
int iov_index_;
@@ -219,12 +216,7 @@ void MimeWriter::AddPairData(const char* msg_type,
void MimeWriter::AddPairDataInChunks(const char* msg_type,
size_t msg_type_size,
const char* msg_data,
- size_t msg_data_size,
- size_t chunk_size,
- bool strip_trailing_spaces) {
- if (chunk_size > kMaxCrashChunkSize)
- return;
-
+ size_t msg_data_size) {
unsigned i = 0;
size_t done = 0, msg_length = msg_data_size;
@@ -233,7 +225,7 @@ void MimeWriter::AddPairDataInChunks(const char* msg_type,
const unsigned num_len = my_int_len(++i);
my_itos(num, i, num_len);
- size_t chunk_len = std::min(chunk_size, msg_length);
+ size_t chunk_len = std::min((size_t)kMaxCrashChunkSize, msg_length);
AddString(g_form_data_msg);
AddItem(msg_type, msg_type_size);
@@ -241,11 +233,7 @@ void MimeWriter::AddPairDataInChunks(const char* msg_type,
AddString(g_quote_msg);
AddString(g_rn);
AddString(g_rn);
- if (strip_trailing_spaces) {
- AddItemWithoutTrailingSpaces(msg_data + done, chunk_len);
- } else {
- AddItem(msg_data + done, chunk_len);
- }
+ AddItem(msg_data + done, chunk_len);
AddString(g_rn);
AddBoundary();
Flush();
@@ -277,16 +265,6 @@ void MimeWriter::AddItem(const void* base, size_t size) {
++iov_index_;
}
-void MimeWriter::AddItemWithoutTrailingSpaces(const void* base, size_t size) {
- while (size > 0) {
- const char* c = static_cast<const char*>(base) + size - 1;
- if (*c != ' ')
- break;
- size--;
- }
- AddItem(base, size);
-}
-
} // namespace
pid_t HandleCrashDump(const BreakpadInfo& info) {
@@ -411,57 +389,35 @@ pid_t HandleCrashDump(const BreakpadInfo& info) {
// abcdef \r\n
// BOUNDARY \r\n
//
- // zero or one:
- // Content-Disposition: form-data; name="num-views" \r\n \r\n
- // 3 \r\n
- // BOUNDARY \r\n
- //
- // zero or one:
- // Content-Disposition: form-data; name="num-extensions" \r\n \r\n
- // 5 \r\n
- // BOUNDARY \r\n
- //
- // zero to 10:
- // Content-Disposition: form-data; name="extension-1" \r\n \r\n
- // abcdefghijklmnopqrstuvwxyzabcdef \r\n
- // BOUNDARY \r\n
- //
- // zero or one:
- // Content-Disposition: form-data; name="num-switches" \r\n \r\n
- // 5 \r\n
- // BOUNDARY \r\n
- //
- // zero to 15:
- // Content-Disposition: form-data; name="switch-1" \r\n \r\n
- // --foo \r\n
- // BOUNDARY \r\n
- //
// Content-Disposition: form-data; name="dump"; filename="dump" \r\n
// Content-Type: application/octet-stream \r\n \r\n
// <dump contents>
// \r\n BOUNDARY -- \r\n
+ #if defined(OS_CHROMEOS)
+ static const char chrome_product_msg[] = "Chrome_ChromeOS";
+ #else // OS_LINUX
+ static const char chrome_product_msg[] = "Chrome_Linux";
+ #endif
+ static const char version_msg[] = PRODUCT_VERSION;
+ static const char prod_msg[] = "prod";
+ static const char ver_msg[] = "ver";
+ static const char guid_msg[] = "guid";
+ static const char url_chunk_msg[] = "url-chunk-";
+ static const char process_time_msg[] = "ptime";
+ static const char process_type_msg[] = "ptype";
+ static const char distro_msg[] = "lsb-release";
+
MimeWriter writer(fd, mime_boundary);
- {
-#if defined(OS_CHROMEOS)
- static const char chrome_product_msg[] = "Chrome_ChromeOS";
-#else // OS_LINUX
- static const char chrome_product_msg[] = "Chrome_Linux";
-#endif
- static const char version_msg[] = PRODUCT_VERSION;
- static const char prod_msg[] = "prod";
- static const char ver_msg[] = "ver";
- static const char guid_msg[] = "guid";
- writer.AddBoundary();
- writer.AddPairString(prod_msg, chrome_product_msg);
- writer.AddBoundary();
- writer.AddPairString(ver_msg, version_msg);
- writer.AddBoundary();
- writer.AddPairString(guid_msg, info.guid);
- writer.AddBoundary();
- writer.Flush();
- }
+ writer.AddBoundary();
+ writer.AddPairString(prod_msg, chrome_product_msg);
+ writer.AddBoundary();
+ writer.AddPairString(ver_msg, version_msg);
+ writer.AddBoundary();
+ writer.AddPairString(guid_msg, info.guid);
+ writer.AddBoundary();
+ writer.Flush();
if (info.process_start_time > 0) {
struct kernel_timeval tv;
@@ -473,7 +429,6 @@ pid_t HandleCrashDump(const BreakpadInfo& info) {
const unsigned time_len = my_uint64_len(time);
my_uint64tos(time_str, time, time_len);
- static const char process_time_msg[] = "ptime";
writer.AddPairData(process_time_msg, sizeof(process_time_msg) - 1,
time_str, time_len);
writer.AddBoundary();
@@ -483,7 +438,6 @@ pid_t HandleCrashDump(const BreakpadInfo& info) {
}
if (info.process_type_length) {
- static const char process_type_msg[] = "ptype";
writer.AddPairString(process_type_msg, info.process_type);
writer.AddBoundary();
writer.Flush();
@@ -512,73 +466,16 @@ pid_t HandleCrashDump(const BreakpadInfo& info) {
}
if (info.distro_length) {
- static const char distro_msg[] = "lsb-release";
writer.AddPairString(distro_msg, info.distro);
writer.AddBoundary();
writer.Flush();
}
- // For renderers and plugins.
+ // For rendererers and plugins.
if (info.crash_url_length) {
- static const char url_chunk_msg[] = "url-chunk-";
static const unsigned kMaxUrlLength = 8 * MimeWriter::kMaxCrashChunkSize;
writer.AddPairDataInChunks(url_chunk_msg, sizeof(url_chunk_msg) - 1,
- info.crash_url, std::min(info.crash_url_length, kMaxUrlLength),
- MimeWriter::kMaxCrashChunkSize, false /* Don't strip whitespaces. */);
- }
-
- unsigned num_views_len = my_strlen(child_process_logging::g_num_views);
- if (num_views_len) {
- static const char num_views_msg[] = "num-views";
- writer.AddPairString(num_views_msg, child_process_logging::g_num_views);
- writer.AddBoundary();
- writer.Flush();
- }
-
- unsigned num_extensions_len =
- my_strlen(child_process_logging::g_num_extensions);
- if (num_extensions_len) {
- static const char num_extensions_msg[] = "num-extensions";
- writer.AddPairString(num_extensions_msg,
- child_process_logging::g_num_extensions);
- writer.AddBoundary();
- writer.Flush();
- }
-
- unsigned extension_ids_len =
- my_strlen(child_process_logging::g_extension_ids);
- if (extension_ids_len) {
- static const char extension_msg[] = "extension-";
- static const unsigned kMaxExtensionsLen =
- kMaxReportedActiveExtensions * child_process_logging::kExtensionLen;
- writer.AddPairDataInChunks(extension_msg, sizeof(extension_msg) - 1,
- child_process_logging::g_extension_ids,
- std::min(extension_ids_len, kMaxExtensionsLen),
- child_process_logging::kExtensionLen,
- false /* Don't strip whitespace. */);
- }
-
- unsigned num_switches_len =
- my_strlen(child_process_logging::g_num_switches);
- if (num_switches_len) {
- static const char num_switches_msg[] = "num-switches";
- writer.AddPairString(num_switches_msg,
- child_process_logging::g_num_switches);
- writer.AddBoundary();
- writer.Flush();
- }
-
- unsigned switches_len =
- my_strlen(child_process_logging::g_switches);
- if (switches_len) {
- static const char switch_msg[] = "switch-";
- static const unsigned kMaxSwitchLen =
- kMaxSwitches * child_process_logging::kSwitchLen;
- writer.AddPairDataInChunks(switch_msg, sizeof(switch_msg) - 1,
- child_process_logging::g_switches,
- std::min(switches_len, kMaxSwitchLen),
- child_process_logging::kSwitchLen,
- true /* Strip whitespace since switches are padded to kSwitchLen. */);
+ info.crash_url, std::min(info.crash_url_length, kMaxUrlLength));
}
writer.AddFileDump(dump_data, st.st_size);
diff --git a/chrome/app/breakpad_win.cc b/chrome/app/breakpad_win.cc
index 3b5da1c..63014d5 100644
--- a/chrome/app/breakpad_win.cc
+++ b/chrome/app/breakpad_win.cc
@@ -75,6 +75,11 @@ static size_t g_num_of_views_offset;
static size_t g_num_switches_offset;
static size_t g_switches_offset;
+// The maximum number of command line switches to include in the crash
+// report's metadata. Note that the mini-dump itself will also contain the
+// (original) command line arguments within the PEB.
+const size_t kMaxSwitches = 15;
+
// Dumps the current process memory.
extern "C" void __declspec(dllexport) __cdecl DumpProcess() {
if (g_breakpad)
diff --git a/chrome/common/child_process_logging.h b/chrome/common/child_process_logging.h
index 7117962..1269ecf 100644
--- a/chrome/common/child_process_logging.h
+++ b/chrome/common/child_process_logging.h
@@ -16,17 +16,12 @@
class CommandLine;
struct GPUInfo;
+#if defined(OS_WIN) || defined(OS_MACOSX)
// The maximum number of active extensions we will report.
// Also used in chrome/app, but we define it here to avoid a common->app
// dependency.
static const int kMaxReportedActiveExtensions = 10;
-
-// The maximum number of command line switches to include in the crash
-// report's metadata. Note that the mini-dump itself will also contain the
-// (original) command line arguments within the PEB.
-// Also used in chrome/app, but we define it here to avoid a common->app
-// dependency.
-static const size_t kMaxSwitches = 15;
+#endif
namespace child_process_logging {
@@ -35,22 +30,11 @@ namespace child_process_logging {
// compromised context without going through the standard library.
extern char g_active_url[];
extern char g_client_id[];
-extern char g_extension_ids[];
extern char g_gpu_vendor_id[];
extern char g_gpu_device_id[];
extern char g_gpu_driver_ver[];
extern char g_gpu_ps_ver[];
extern char g_gpu_vs_ver[];
-extern char g_num_extensions[];
-extern char g_num_switches[];
-extern char g_num_views[];
-extern char g_switches[];
-
-// Assume IDs are 32 bytes long.
-static const size_t kExtensionLen = 32;
-
-// Assume command line switches are less than 64 chars.
-static const size_t kSwitchLen = 64;
#endif
// Sets the URL that is logged if the child process crashes. Use GURL() to clear
diff --git a/chrome/common/child_process_logging_linux.cc b/chrome/common/child_process_logging_linux.cc
index 185da04..28b9a2e 100644
--- a/chrome/common/child_process_logging_linux.cc
+++ b/chrome/common/child_process_logging_linux.cc
@@ -4,8 +4,6 @@
#include "chrome/common/child_process_logging.h"
-#include "base/command_line.h"
-#include "base/format_macros.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
@@ -33,19 +31,6 @@ char g_gpu_driver_ver[kGpuStringSize] = "";
char g_gpu_ps_ver[kGpuStringSize] = "";
char g_gpu_vs_ver[kGpuStringSize] = "";
-static const size_t kNumSize = 32;
-char g_num_extensions[kNumSize] = "";
-char g_num_switches[kNumSize] = "";
-char g_num_views[kNumSize] = "";
-
-static const size_t kMaxExtensionSize =
- kExtensionLen * kMaxReportedActiveExtensions + 1;
-char g_extension_ids[kMaxExtensionSize] = "";
-
-// Assume command line switches are less than 64 chars.
-static const size_t kMaxSwitchesSize = kSwitchLen * kMaxSwitches + 1;
-char g_switches[kMaxSwitchesSize] = "";
-
void SetActiveURL(const GURL& url) {
base::strlcpy(g_active_url,
url.possibly_invalid_spec().c_str(),
@@ -69,18 +54,7 @@ std::string GetClientId() {
}
void SetActiveExtensions(const std::set<std::string>& extension_ids) {
- snprintf(g_num_extensions, kNumSize - 1, "%" PRIuS, extension_ids.size());
- g_num_extensions[kNumSize - 1] = '\0';
-
- std::string extension_str;
- std::set<std::string>::const_iterator iter = extension_ids.begin();
- for (int i = 0;
- i < kMaxReportedActiveExtensions && iter != extension_ids.end();
- ++i, ++iter) {
- extension_str += *iter;
- }
- strncpy(g_extension_ids, extension_str.c_str(), kMaxExtensionSize - 1);
- g_extension_ids[kMaxExtensionSize - 1] = '\0';
+ // TODO(port)
}
void SetGpuInfo(const GPUInfo& gpu_info) {
@@ -101,26 +75,12 @@ void SetGpuInfo(const GPUInfo& gpu_info) {
}
void SetNumberOfViews(int number_of_views) {
- snprintf(g_num_views, kNumSize - 1, "%d", number_of_views);
- g_num_views[kNumSize - 1] = '\0';
+ // TODO(port)
}
-void SetCommandLine(const CommandLine* command_line) {
- const CommandLine::StringVector& argv = command_line->argv();
-
- snprintf(g_num_switches, kNumSize - 1, "%lu", argv.size() - 1);
- g_num_switches[kNumSize - 1] = '\0';
-
- std::string command_line_str;
- for (size_t argv_i = 1;
- argv_i < argv.size() && argv_i <= kMaxSwitches;
- ++argv_i) {
- command_line_str += argv[argv_i];
- // Truncate long switches, align short ones with spaces to be trimmed later.
- command_line_str.resize(argv_i * kSwitchLen, ' ');
- }
- strncpy(g_switches, command_line_str.c_str(), kMaxSwitchesSize - 1);
- g_switches[kMaxSwitchesSize - 1] = '\0';
+void SetCommandLine(const CommandLine*) {
+ // TODO: http://crbug.com/60993
+ NOTIMPLEMENTED();
}
} // namespace child_process_logging