blob: eae240320c05e5d83b1b9f928afe5fb457cfcebe [file] [log] [blame]
// Copyright (c) 2013 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/crash_keys.h"
#if defined(OS_MACOSX)
#include "breakpad/src/common/simple_string_dictionary.h"
#elif defined(OS_WIN)
#include "breakpad/src/client/windows/common/ipc_protocol.h"
#endif
namespace crash_keys {
// A small crash key, guaranteed to never be split into multiple pieces.
const size_t kSmallSize = 63;
// A medium crash key, which will be chunked on certain platforms but not
// others. Guaranteed to never be more than four chunks.
const size_t kMediumSize = kSmallSize * 4;
// A large crash key, which will be chunked on all platforms. This should be
// used sparingly.
const size_t kLargeSize = kSmallSize * 16;
// The maximum lengths specified by breakpad include the trailing NULL, so
// the actual length of the string is one less.
#if defined(OS_MACOSX)
static const size_t kSingleChunkLength =
google_breakpad::SimpleStringDictionary::value_size - 1;
#elif defined(OS_WIN)
static const size_t kSingleChunkLength =
google_breakpad::CustomInfoEntry::kValueMaxLength - 1;
#else
static const size_t kSingleChunkLength = 63;
#endif
// Guarantees for crash key sizes.
COMPILE_ASSERT(kSmallSize <= kSingleChunkLength,
crash_key_chunk_size_too_small);
#if defined(OS_MACOSX)
COMPILE_ASSERT(kMediumSize <= kSingleChunkLength,
mac_has_medium_size_crash_key_chunks);
#endif
size_t RegisterChromeCrashKeys() {
base::debug::CrashKey keys[] = {
{ kActiveURL, kLargeSize },
// content/:
{ "ppapi_path", kMediumSize },
{ "subresource_url", kLargeSize },
#if defined(OS_MACOSX)
{ mac::kFirstNSException, kMediumSize },
{ mac::kFirstNSExceptionTrace, kMediumSize },
{ mac::kLastNSException, kMediumSize },
{ mac::kLastNSExceptionTrace, kMediumSize },
{ mac::kNSException, kMediumSize },
{ mac::kNSExceptionTrace, kMediumSize },
{ mac::kSendAction, kMediumSize },
{ mac::kZombie, kMediumSize },
{ mac::kZombieTrace, kMediumSize },
// content/:
{ "channel_error_bt", kMediumSize },
{ "remove_route_bt", kMediumSize },
{ "rwhvm_window", kMediumSize },
// media/:
{ "VideoCaptureDeviceQTKit", kSmallSize },
#endif
};
return base::debug::InitCrashKeys(keys, arraysize(keys), kSingleChunkLength);
}
const char kActiveURL[] = "url-chunk";
#if defined(OS_MACOSX)
namespace mac {
const char kFirstNSException[] = "firstexception";
const char kFirstNSExceptionTrace[] = "firstexception_bt";
const char kLastNSException[] = "lastexception";
const char kLastNSExceptionTrace[] = "lastexception_bt";
const char kNSException[] = "nsexception";
const char kNSExceptionTrace[] = "nsexception_bt";
const char kSendAction[] = "sendaction";
const char kZombie[] = "zombie";
const char kZombieTrace[] = "zombie_dealloc_bt";
} // namespace mac
#endif
} // namespace crash_keys