| // 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 |