chromium/chrome/browser/ash/guest_os/public/guest_os_service.h

// 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 CHROME_BROWSER_ASH_GUEST_OS_PUBLIC_GUEST_OS_SERVICE_H_
#define CHROME_BROWSER_ASH_GUEST_OS_PUBLIC_GUEST_OS_SERVICE_H_

#include <memory>

#include "chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry.h"
#include "chrome/browser/ash/guest_os/public/guest_os_sk_forwarder.h"
#include "chrome/browser/ash/guest_os/public/guest_os_terminal_provider_registry.h"
#include "components/keyed_service/core/keyed_service.h"

class Profile;

namespace guest_os {

class GuestOsWaylandServer;

// A service to hold the subservices that make up the Guest OS API surface.
// NOTE: We don't start at browser startup, instead being created on-demand. At
// some point we may change that, but for now creating is cheap, we won't always
// be used (e.g. if the guest os flag isn't set), and we don't need to listen
// for events - everything we care about knows how to access us via KeyedService
// machinery.
class GuestOsService : public KeyedService {
 public:
  explicit GuestOsService(Profile* profile);
  ~GuestOsService() override;

  // Helper method to get the service instance for the given profile.
  static GuestOsService* GetForProfile(Profile* profile);

  GuestOsMountProviderRegistry* MountProviderRegistry();
  GuestOsTerminalProviderRegistry* TerminalProviderRegistry();

  GuestOsWaylandServer* WaylandServer();

  GuestOsSkForwarder* SkForwarder();

 private:
  GuestOsMountProviderRegistry mount_provider_registry_;
  GuestOsTerminalProviderRegistry terminal_provider_registry_;
  std::unique_ptr<GuestOsWaylandServer> wayland_server_;
  GuestOsSkForwarder guest_os_sk_forwarder_;
};

}  // namespace guest_os

#endif  // CHROME_BROWSER_ASH_GUEST_OS_PUBLIC_GUEST_OS_SERVICE_H_