123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright 2022 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/core/ipcz_api.h"
- #include "base/check_op.h"
- #include "mojo/core/ipcz_driver/driver.h"
- #include "third_party/ipcz/include/ipcz/ipcz.h"
- #include "third_party/ipcz/src/api.h"
- namespace mojo::core {
- namespace {
- class IpczAPIInitializer {
- public:
- explicit IpczAPIInitializer(IpczAPI& api) {
- IpczResult result = IpczGetAPI(&api);
- CHECK_EQ(result, IPCZ_RESULT_OK);
- }
- };
- IpczHandle g_node = IPCZ_INVALID_HANDLE;
- IpczNodeOptions g_options = {.is_broker = false,
- .use_local_shared_memory_allocation = false};
- } // namespace
- const IpczAPI& GetIpczAPI() {
- static IpczAPI api = {sizeof(api)};
- static IpczAPIInitializer initializer(api);
- return api;
- }
- IpczHandle GetIpczNode() {
- return g_node;
- }
- bool InitializeIpczNodeForProcess(const IpczNodeOptions& options) {
- g_options = options;
- IpczCreateNodeFlags flags =
- options.is_broker ? IPCZ_CREATE_NODE_AS_BROKER : IPCZ_NO_FLAGS;
- IpczResult result =
- GetIpczAPI().CreateNode(&ipcz_driver::kDriver, IPCZ_INVALID_DRIVER_HANDLE,
- flags, nullptr, &g_node);
- return result == IPCZ_RESULT_OK;
- }
- void DestroyIpczNodeForProcess() {
- CHECK(g_node);
- GetIpczAPI().Close(g_node, IPCZ_NO_FLAGS, nullptr);
- g_node = IPCZ_INVALID_HANDLE;
- }
- const IpczNodeOptions& GetIpczNodeOptions() {
- return g_options;
- }
- } // namespace mojo::core
|