// Copyright 2018 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_WEB_APPLICATIONS_EXTERNALLY_MANAGED_APP_MANAGER_H_ #define CHROME_BROWSER_WEB_APPLICATIONS_EXTERNALLY_MANAGED_APP_MANAGER_H_ #include <iosfwd> #include <map> #include <memory> #include <vector> #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/web_applications/external_install_options.h" #include "components/webapps/common/web_app_id.h" #include "url/gurl.h" class GURL; class Profile; namespace base { class Value; } namespace webapps { enum class InstallResultCode; enum class UninstallResultCode; class WebAppUrlLoader; } namespace content { class WebContents; } // namespace content namespace web_app { class AllAppsLock; class ExternallyManagedAppInstallTask; class ExternallyManagedAppRegistrationTaskBase; class WebAppDataRetriever; class WebAppProvider; enum class RegistrationResultCode { … }; // ExternallyManagedAppManager installs, uninstalls, and updates apps that are // externally managed. This means that they are not installed by the user, but // instead through a different system (enterprise installs, device default // installs, etc). See ExternalInstallSource for all of the different externally // managed app types. Typically there is one "manager" class per externally // managed app type that figures out the list of apps to have installed, and // that class will call SynchronizeApps for a given external install type. // // Implementations of this class should perform each set of operations serially // in the order in which they arrive. For example, if an uninstall request gets // queued while an update request for the same app is pending, implementations // should wait for the update request to finish before uninstalling the app. // // This class also supports installing a "placeholder" app by the // |install_placeholder| in ExternalInstallOptions. This placeholder app is // installed if the install url given fails to fully load so a manifest cannot // be resolved, and a placeholder app is installed instead. Every time the user // navigates a page, if that page is ever a URL that a placeholder app is // 'holding' (as the app failed to load originally), then the install is // re-initiated, and if successful, the placeholder app is removed. class ExternallyManagedAppManager { … }; // For logging and testing purposes. std::ostream& operator<<( std::ostream& out, const ExternallyManagedAppManager::InstallResult& install_result); } // namespace web_app #endif // CHROME_BROWSER_WEB_APPLICATIONS_EXTERNALLY_MANAGED_APP_MANAGER_H_