blob: 89934467143e5f0f00a2acd25e4b97896f866aa8 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_ENTERPRISE_COMPANION_ENTERPRISE_COMPANION_CLIENT_H_
#define CHROME_ENTERPRISE_COMPANION_ENTERPRISE_COMPANION_CLIENT_H_
#include <memory>
#include <optional>
#include "base/time/time.h"
#include "chrome/enterprise_companion/mojom/enterprise_companion.mojom.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/platform/named_platform_channel.h"
#include "mojo/public/cpp/system/isolated_connection.h"
// Utilities useful to clients of Chrome Enterprise Companion App.
namespace base {
class Clock;
}
namespace enterprise_companion {
// Controls the transmission of usage stats (i.e. crash reports).
extern const char kEnableUsageStatsSwitch[];
// Returns the server name for establishing IPC via NamedMojoIpcServer.
mojo::NamedPlatformChannel::ServerName GetServerName();
// Connects to the IPC server. `callback` is answered on the calling sequence,
// the IsolationConnection and Remote may be null/invalid if the service could
// not be reached. The returned `Remote` is bound to the calling sequence.
void ConnectToServer(
base::OnceCallback<void(std::unique_ptr<mojo::IsolatedConnection>,
mojo::Remote<mojom::EnterpriseCompanion>)> callback,
const mojo::NamedPlatformChannel::ServerName& server_name =
GetServerName());
// Connects to the IPC server, attempting to launch the installed Chrome
// Enterprise Companion App if necessary. This function repeatedly attempts
// to connect to the server until `timeout` has expired, launching the
// application at most once. `callback` is answered on the calling sequence, the
// IsolationConnection and Remote may be null/invalid if the service could not
// be reached. The returned `Remote` is bound to the calling sequence.
// If the companion app is not already running, `enable_usagestats` controls
// whether the transmission of usage stats is enabled for the lifetime of the
// process.
void ConnectAndLaunchServer(
const base::Clock* clock,
base::TimeDelta timeout,
bool enable_usagestats,
base::OnceCallback<void(std::unique_ptr<mojo::IsolatedConnection>,
mojo::Remote<mojom::EnterpriseCompanion>)> callback,
const mojo::NamedPlatformChannel::ServerName& server_name =
GetServerName());
} // namespace enterprise_companion
#endif // CHROME_ENTERPRISE_COMPANION_ENTERPRISE_COMPANION_CLIENT_H_