From bd11ba32a3a9844a15ed2a0c2cf6a4140c2853ae Mon Sep 17 00:00:00 2001 From: "jam@chromium.org" Date: Wed, 8 Jul 2009 18:31:20 +0000 Subject: Add the page url to plugin crashes to aid debugging. Review URL: http://codereview.chromium.org/149305 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20173 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/common/child_process_logging_mac.mm | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 chrome/common/child_process_logging_mac.mm (limited to 'chrome/common/child_process_logging_mac.mm') diff --git a/chrome/common/child_process_logging_mac.mm b/chrome/common/child_process_logging_mac.mm new file mode 100644 index 0000000..a05b79d --- /dev/null +++ b/chrome/common/child_process_logging_mac.mm @@ -0,0 +1,71 @@ +// Copyright (c) 2009 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 "chrome/common/child_process_logging.h" + +#import + +#include "base/string_util.h" +#include "googleurl/src/gurl.h" +#import "chrome/app/breakpad_mac.h" + +namespace child_process_logging { + +const int kMaxNumCrashURLChunks = 8; +const int kMaxNumURLChunkValueLength = 255; +const char *kUrlChunkFormatStr = "url-chunk-%d"; + +void SetActiveURLImpl(const GURL& url, + SetCrashKeyValueFuncPtr set_key_func, + ClearCrashKeyValueFuncPtr clear_key_func) { + + NSString *kUrlChunkFormatStr_utf8 = [NSString + stringWithUTF8String:kUrlChunkFormatStr]; + + // First remove any old url chunks we might have lying around. + for (int i = 0; i < kMaxNumCrashURLChunks; i++) { + // On Windows the url-chunk items are 1-based, so match that. + NSString *key = [NSString stringWithFormat:kUrlChunkFormatStr_utf8, i+1]; + clear_key_func(key); + } + + const std::string& raw_url_utf8 = url.possibly_invalid_spec(); + NSString *raw_url = [NSString stringWithUTF8String:raw_url_utf8.c_str()]; + size_t raw_url_length = [raw_url length]; + + // Bail on zero-length URLs. + if (raw_url_length == 0) { + return; + } + + // Parcel the URL up into up to 8, 255 byte segments. + size_t start_ofs = 0; + for (int i = 0; + i < kMaxNumCrashURLChunks && start_ofs < raw_url_length; + ++i) { + + // On Windows the url-chunk items are 1-based, so match that. + NSString *key = [NSString stringWithFormat:kUrlChunkFormatStr_utf8, i+1]; + NSRange range; + range.location = start_ofs; + range.length = std::min((size_t)kMaxNumURLChunkValueLength, + raw_url_length - start_ofs); + NSString *value = [raw_url substringWithRange:range]; + set_key_func(key, value); + + // Next chunk. + start_ofs += kMaxNumURLChunkValueLength; + } +} + +void SetActiveURL(const GURL& url) { + // If Breakpad isn't initialized then bail. + if (IsCrashReporterDisabled()) { + return; + } + + SetActiveURLImpl(url, SetCrashKeyValue, ClearCrashKeyValue); +} + +} // namespace child_process_logging -- cgit v1.1