| // Copyright (c) 2012 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 "base/debug/crash_logging.h" | 
 |  | 
 | namespace base { | 
 | namespace debug { | 
 |  | 
 | namespace { | 
 |  | 
 | CrashKeyImplementation* g_crash_key_impl = nullptr; | 
 |  | 
 | }  // namespace | 
 |  | 
 | CrashKeyString* AllocateCrashKeyString(const char name[], | 
 |                                        CrashKeySize value_length) { | 
 |   if (!g_crash_key_impl) | 
 |     return nullptr; | 
 |  | 
 |   return g_crash_key_impl->Allocate(name, value_length); | 
 | } | 
 |  | 
 | void SetCrashKeyString(CrashKeyString* crash_key, base::StringPiece value) { | 
 |   if (!g_crash_key_impl || !crash_key) | 
 |     return; | 
 |  | 
 |   g_crash_key_impl->Set(crash_key, value); | 
 | } | 
 |  | 
 | void ClearCrashKeyString(CrashKeyString* crash_key) { | 
 |   if (!g_crash_key_impl || !crash_key) | 
 |     return; | 
 |  | 
 |   g_crash_key_impl->Clear(crash_key); | 
 | } | 
 |  | 
 | ScopedCrashKeyString::ScopedCrashKeyString(CrashKeyString* crash_key, | 
 |                                            base::StringPiece value) | 
 |     : crash_key_(crash_key) { | 
 |   SetCrashKeyString(crash_key_, value); | 
 | } | 
 |  | 
 | ScopedCrashKeyString::~ScopedCrashKeyString() { | 
 |   ClearCrashKeyString(crash_key_); | 
 | } | 
 |  | 
 | void SetCrashKeyImplementation(std::unique_ptr<CrashKeyImplementation> impl) { | 
 |   delete g_crash_key_impl; | 
 |   g_crash_key_impl = impl.release(); | 
 | } | 
 |  | 
 | }  // namespace debug | 
 | }  // namespace base |