blob: c92caccbd95e3dfb431e56d7f7b727868c43d938 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_NAMED_MOJO_IPC_SERVER_ENDPOINT_OPTIONS_H_
#define COMPONENTS_NAMED_MOJO_IPC_SERVER_ENDPOINT_OPTIONS_H_
#include <stdint.h>
#include <string>
#include <variant>
#include "build/build_config.h"
#include "mojo/public/c/system/invitation.h"
#include "mojo/public/cpp/platform/named_platform_channel.h"
#if BUILDFLAG(IS_WIN)
#include <string>
#endif
namespace named_mojo_ipc_server {
// Options used by NamedMojoIpcServer to start the server endpoint.
struct EndpointOptions {
using MessagePipeId = std::variant<std::monostate, uint64_t, std::string>;
// DEPRECATED: New callers should not use an isolated connection. Pass a
// valid message pipe ID instead.
static constexpr std::monostate kUseIsolatedConnection;
EndpointOptions();
EndpointOptions(mojo::NamedPlatformChannel::ServerName server_name,
const MessagePipeId& message_pipe_id);
EndpointOptions(mojo::NamedPlatformChannel::ServerName server_name,
const MessagePipeId& message_pipe_id,
MojoSendInvitationFlags extra_send_invitation_flags);
#if BUILDFLAG(IS_WIN)
EndpointOptions(mojo::NamedPlatformChannel::ServerName server_name,
const MessagePipeId& message_pipe_id,
MojoSendInvitationFlags extra_send_invitation_flags,
std::wstring security_descriptor);
#endif
EndpointOptions(EndpointOptions&&);
EndpointOptions(const EndpointOptions&);
~EndpointOptions();
// The server name to start the NamedPlatformChannel. Must not be empty.
mojo::NamedPlatformChannel::ServerName server_name;
// The message pipe ID (either a number or a string). If provided, the client
// must call ExtractMessagePipe() with the same ID. If not provided (or
// kUseIsolatedConnection is used), the client must connect using an isolated
// connection.
// Note that using an isolated connection is DEPRECATED and new callers should
// always pass a valid message pipe ID.
MessagePipeId message_pipe_id = kUseIsolatedConnection;
// Extra flags added when sending the outgoing invitation.
MojoSendInvitationFlags extra_send_invitation_flags =
MOJO_SEND_INVITATION_FLAG_NONE;
#if BUILDFLAG(IS_WIN)
// If non-empty, a security descriptor to use when creating the pipe. If
// empty, a default security descriptor will be used.
std::wstring security_descriptor;
#endif
};
} // namespace named_mojo_ipc_server
#endif // COMPONENTS_NAMED_MOJO_IPC_SERVER_ENDPOINT_OPTIONS_H_