blob: 929392e56ec76af58ccfada0e941843e79345ccc [file] [log] [blame]
// Copyright 2017 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.
// NOTE: This file is only compiled when Crashpad is used as the crash
// reproter.
#include "components/crash/core/common/crash_key.h"
#include "base/debug/crash_logging.h"
#include "components/crash/core/common/crash_key_base_support.h"
#include "third_party/crashpad/crashpad/client/annotation_list.h"
#include "third_party/crashpad/crashpad/client/crashpad_info.h"
namespace crash_reporter {
void InitializeCrashKeys() {
crashpad::AnnotationList::Register();
InitializeCrashKeyBaseSupport();
}
// Returns a value for the crash key named |key_name|. For Crashpad-based
// clients, this returns the first instance found of the name.
std::string GetCrashKeyValue(const std::string& key_name) {
auto* annotation_list = crashpad::AnnotationList::Get();
if (annotation_list) {
for (crashpad::Annotation* annotation : *annotation_list) {
if (key_name == annotation->name()) {
return std::string(static_cast<const char*>(annotation->value()),
annotation->size());
}
}
}
return std::string();
}
void ResetCrashKeysForTesting() {
// The AnnotationList should not be deleted because the static Annotation
// object data still reference the link nodes.
auto* annotation_list = crashpad::AnnotationList::Get();
if (annotation_list) {
for (crashpad::Annotation* annotation : *annotation_list) {
annotation->Clear();
}
}
base::debug::SetCrashKeyImplementation(nullptr);
}
} // namespace crash_reporter