diff options
Diffstat (limited to 'chromium/mojo/public/cpp/system/functions.cc')
-rw-r--r-- | chromium/mojo/public/cpp/system/functions.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/chromium/mojo/public/cpp/system/functions.cc b/chromium/mojo/public/cpp/system/functions.cc new file mode 100644 index 00000000000..74aee1a0973 --- /dev/null +++ b/chromium/mojo/public/cpp/system/functions.cc @@ -0,0 +1,36 @@ +// Copyright 2020 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 "mojo/public/cpp/system/functions.h" + +#include "base/callback.h" +#include "base/no_destructor.h" + +namespace mojo { + +namespace { + +DefaultProcessErrorHandler& GetDefaultProcessErrorHandler() { + static base::NoDestructor<DefaultProcessErrorHandler> handler; + return *handler; +} + +void HandleError(const MojoProcessErrorDetails* details) { + const DefaultProcessErrorHandler& handler = GetDefaultProcessErrorHandler(); + handler.Run( + std::string(details->error_message, details->error_message_length)); +} + +} // namespace + +void SetDefaultProcessErrorHandler(DefaultProcessErrorHandler handler) { + // Ensure any previously set handler is wiped out. + MojoSetDefaultProcessErrorHandler(nullptr, nullptr); + auto& global_handler = GetDefaultProcessErrorHandler(); + global_handler = std::move(handler); + if (global_handler) + MojoSetDefaultProcessErrorHandler(&HandleError, nullptr); +} + +} // namespace mojo |