blob: 3c53d086d30fbe93a52550b42eb692fa245bf347 [file] [log] [blame]
// Copyright 2022 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_WEB_APPLICATIONS_COMMANDS_WEB_APP_UNINSTALL_COMMAND_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_WEB_APP_UNINSTALL_COMMAND_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/values.h"
#include "chrome/browser/web_applications/commands/web_app_command.h"
#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
#include "chrome/browser/web_applications/web_app_id.h"
#include "third_party/blink/public/mojom/manifest/manifest.mojom-forward.h"
class Profile;
class PrefService;
namespace webapps {
enum class UninstallResultCode;
enum class WebappUninstallSource;
} // namespace webapps
namespace web_app {
class OsIntegrationManager;
class WebAppIconManager;
class WebAppInstallManager;
class WebAppInstallFinalizer;
class WebAppRegistrar;
class WebAppSyncBridge;
class WebAppTranslationManager;
// Uninstall the web app.
class WebAppUninstallCommand : public WebAppCommand {
public:
using UninstallWebAppCallback =
base::OnceCallback<void(webapps::UninstallResultCode)>;
WebAppUninstallCommand(const AppId& app_id,
const url::Origin& app_origin,
Profile* profile,
OsIntegrationManager* os_integration_manager,
WebAppSyncBridge* sync_bridge,
WebAppIconManager* icon_manager,
WebAppRegistrar* registrar,
WebAppInstallManager* install_manager,
WebAppInstallFinalizer* install_finalizer,
WebAppTranslationManager* translation_manager,
webapps::WebappUninstallSource source,
UninstallWebAppCallback callback);
~WebAppUninstallCommand() override;
void Start() override;
void OnSyncSourceRemoved() override;
void OnShutdown() override;
base::Value ToDebugValue() const override;
private:
void Abort(webapps::UninstallResultCode code);
void OnSubAppUninstalled(webapps::UninstallResultCode code);
void OnOsHooksUninstalled(OsHooksErrors errors);
void OnIconDataDeleted(bool success);
void OnTranslationDataDeleted(bool success);
void MaybeFinishUninstall();
enum class State {
kNotStarted = 0,
kPendingDataDeletion = 1,
kDone = 2,
} state_ = State::kNotStarted;
AppId app_id_;
url::Origin app_origin_;
webapps::WebappUninstallSource source_;
UninstallWebAppCallback callback_;
raw_ptr<OsIntegrationManager> os_integration_manager_;
raw_ptr<WebAppSyncBridge> sync_bridge_;
raw_ptr<WebAppIconManager> icon_manager_;
raw_ptr<WebAppRegistrar> registrar_;
raw_ptr<WebAppInstallManager> install_manager_;
raw_ptr<WebAppInstallFinalizer> install_finalizer_;
raw_ptr<WebAppTranslationManager> translation_manager_;
raw_ptr<PrefService> profile_prefs_;
size_t num_pending_sub_app_uninstalls_;
bool app_data_deleted_ = false;
bool translation_data_deleted_ = false;
bool hooks_uninstalled_ = false;
bool errors_ = false;
base::WeakPtrFactory<WebAppUninstallCommand> weak_factory_{this};
};
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_WEB_APP_INSTALL_COMMAND_H_