chromium/chrome/browser/ash/plugin_vm/plugin_vm_test_helper.h

// Copyright 2019 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_PLUGIN_VM_PLUGIN_VM_TEST_HELPER_H_
#define CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_TEST_HELPER_H_

#include "base/memory/raw_ptr.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/ash/components/dbus/concierge/fake_concierge_client.h"
#include "chromeos/ash/components/dbus/vm_applications/apps.pb.h"
#include "components/user_manager/scoped_user_manager.h"

class TestingProfile;

namespace base {
namespace test {
class ScopedRunningOnChromeOS;
}  // namespace test
}  // namespace base

namespace plugin_vm {

void SetupConciergeForSuccessfulDiskImageImport(
    ash::FakeConciergeClient* fake_concierge_client_);

void SetupConciergeForFailedDiskImageImport(
    ash::FakeConciergeClient* fake_concierge_client_,
    vm_tools::concierge::DiskImageStatus status);

void SetupConciergeForCancelDiskImageOperation(
    ash::FakeConciergeClient* fake_concierge_client_,
    bool success);

// A helper class for enabling Plugin VM in unit tests.
class PluginVmTestHelper {
 public:
  explicit PluginVmTestHelper(TestingProfile* testing_profile);

  PluginVmTestHelper(const PluginVmTestHelper&) = delete;
  PluginVmTestHelper& operator=(const PluginVmTestHelper&) = delete;

  ~PluginVmTestHelper();

  void SetPolicyRequirementsToAllowPluginVm();
  void SetUserRequirementsToAllowPluginVm();
  void EnablePluginVmFeature();
  void EnterpriseEnrollDevice();

  // Naming follows plugin_vm_util. Allow indicates Plugin VM can be used, while
  // enable indicates Plugin VM has been installed.
  void AllowPluginVm();
  void EnablePluginVm();

  // Fakes the Plugin VM window being opened or closed.
  void OpenShelfItem();
  void CloseShelfItem();

  // Adds an app in the default container. Replaces an existing app with the
  // same app name if one exists.
  void AddApp(const vm_tools::apps::App& app);

  // Returns the app id that the registry would use for the given app name.
  static std::string GenerateAppId(const std::string& app_name);

 private:
  void UpdateRegistry();

  raw_ptr<TestingProfile> testing_profile_;
  vm_tools::apps::ApplicationList current_apps_;
  std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
  base::test::ScopedFeatureList scoped_feature_list_;
  std::unique_ptr<base::test::ScopedRunningOnChromeOS> running_on_chromeos_;
};

}  // namespace plugin_vm

#endif  // CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_TEST_HELPER_H_