| // 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_ |