| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_CROSTINI_CROSTINI_TEST_HELPER_H_ |
| #define CHROME_BROWSER_ASH_CROSTINI_CROSTINI_TEST_HELPER_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "base/test/scoped_feature_list.h" |
| #include "chrome/browser/ash/crostini/crostini_util.h" |
| #include "chromeos/dbus/vm_applications/apps.pb.h" |
| |
| class TestingProfile; |
| |
| namespace user_manager { |
| class ScopedUserManager; |
| } // namespace user_manager |
| |
| namespace crostini { |
| |
| // This class is used to help test Crostini app integration by providing a |
| // simple interface to add, update, and remove apps from the registry. |
| class CrostiniTestHelper { |
| public: |
| // For convenience, instantiating this allows Crostini, and enables it |
| // unless enable_crostini is false. The destructor resets these. |
| explicit CrostiniTestHelper(TestingProfile* profile, |
| bool enable_crostini = true); |
| ~CrostiniTestHelper(); |
| |
| // Creates the apps named "dummy1" and "dummy2" in the default container. |
| void SetupDummyApps(); |
| // Returns the |i|th app from the current list of apps. |
| vm_tools::apps::App GetApp(int i); |
| // Adds an app in the default container. Replaces an existing app with the |
| // same desktop file id if one exists. |
| void AddApp(const vm_tools::apps::App& app); |
| // Removes the |i|th app from the current list of apps. |
| void RemoveApp(int i); |
| // Updates the Keywords field in an app |
| void UpdateAppKeywords( |
| vm_tools::apps::App& app, |
| const std::map<std::string, std::set<std::string>>& keywords); |
| |
| // When the App Service is enabled, the timing of when Profile-related and |
| // Profile-creation-triggered initialization occurs means that the App |
| // Service has to be re-initialized with Crostini's testing fakes. This |
| // method does that re-initialization. |
| void ReInitializeAppServiceIntegration(); |
| |
| // Set/unset the the CrostiniEnabled pref |
| static void EnableCrostini(TestingProfile* profile); |
| static void DisableCrostini(TestingProfile* profile); |
| |
| // Returns the app id that the registry would use for the given desktop file. |
| static std::string GenerateAppId( |
| const std::string& desktop_file_id, |
| const std::string& vm_name = kCrostiniDefaultVmName, |
| const std::string& container_name = kCrostiniDefaultContainerName); |
| |
| // Returns an App with the desktop file id, default name, and no_display |
| // as provided. |
| static vm_tools::apps::App BasicApp(const std::string& desktop_file_id, |
| const std::string& name = "", |
| bool no_display = false); |
| |
| // Returns an ApplicationList with a single desktop file. |
| static vm_tools::apps::ApplicationList BasicAppList( |
| const std::string& desktop_file_id, |
| const std::string& vm_name, |
| const std::string& container_name); |
| |
| private: |
| void UpdateRegistry(); |
| |
| TestingProfile* profile_; |
| vm_tools::apps::ApplicationList current_apps_; |
| |
| // This are used to allow Crostini. |
| std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; |
| base::test::ScopedFeatureList scoped_feature_list_; |
| }; |
| |
| } // namespace crostini |
| |
| #endif // CHROME_BROWSER_ASH_CROSTINI_CROSTINI_TEST_HELPER_H_ |