Commit 5cea53ae authored by Alan Cutter's avatar Alan Cutter Committed by Commit Bot

Remove is_new_install from WebAppInstallFinalizer methods

This CL refactors WebAppInstallFinalizer database write code to not
plumb through bool is_new_install. Instead the database write callsites
encode what they want to happen afterwards as part of the CommitCallback.

This is a refactor only CL in preparation for:
https://chromium-review.googlesource.com/c/chromium/src/+/2216143

Bug: 1084405
Change-Id: Ib71740878d9e339fd8cc6ee73b6bd6fa1b782272
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2217835
Commit-Queue: Alan Cutter <alancutter@chromium.org>
Reviewed-by: default avatarAlexey Baskakov <loyso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#773068}
parent 5a7a88af
...@@ -191,9 +191,12 @@ void WebAppInstallFinalizer::FinalizeInstall( ...@@ -191,9 +191,12 @@ void WebAppInstallFinalizer::FinalizeInstall(
registry_controller().SetExperimentalTabbedWindowMode( registry_controller().SetExperimentalTabbedWindowMode(
app_id, web_app_info.enable_experimental_tabbed_window); app_id, web_app_info.enable_experimental_tabbed_window);
CommitCallback commit_callback = base::BindOnce(
&WebAppInstallFinalizer::OnDatabaseCommitCompletedForInstall,
weak_ptr_factory_.GetWeakPtr(), std::move(callback), app_id);
SetWebAppManifestFieldsAndWriteData(web_app_info, std::move(web_app), SetWebAppManifestFieldsAndWriteData(web_app_info, std::move(web_app),
/*is_new_install=*/true, std::move(commit_callback));
std::move(callback));
} }
void WebAppInstallFinalizer::FinalizeFallbackInstallAfterSync( void WebAppInstallFinalizer::FinalizeFallbackInstallAfterSync(
...@@ -240,13 +243,17 @@ void WebAppInstallFinalizer::FinalizeFallbackInstallAfterSync( ...@@ -240,13 +243,17 @@ void WebAppInstallFinalizer::FinalizeFallbackInstallAfterSync(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
app_in_sync_install->app_id(), std::move(callback)); app_in_sync_install->app_id(), std::move(callback));
CommitCallback commit_callback = base::BindOnce(
&WebAppInstallFinalizer::OnDatabaseCommitCompletedForInstall,
weak_ptr_factory_.GetWeakPtr(), std::move(fallback_install_callback),
app_id);
icon_manager_->WriteData( icon_manager_->WriteData(
std::move(app_id), std::move(icon_bitmaps), std::move(app_id), std::move(icon_bitmaps),
base::BindOnce(&WebAppInstallFinalizer::OnIconsDataWritten, base::BindOnce(&WebAppInstallFinalizer::OnIconsDataWritten,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(), std::move(commit_callback),
std::move(fallback_install_callback), std::move(web_app), std::move(web_app),
std::vector<std::map<SquareSizePx, SkBitmap>>(), std::vector<std::map<SquareSizePx, SkBitmap>>()));
/*is_new_install=*/true));
} }
void WebAppInstallFinalizer::FinalizeUninstallAfterSync( void WebAppInstallFinalizer::FinalizeUninstallAfterSync(
...@@ -345,9 +352,12 @@ void WebAppInstallFinalizer::FinalizeUpdate( ...@@ -345,9 +352,12 @@ void WebAppInstallFinalizer::FinalizeUpdate(
// Prepare copy-on-write to update existing app. // Prepare copy-on-write to update existing app.
auto web_app = std::make_unique<WebApp>(*existing_web_app); auto web_app = std::make_unique<WebApp>(*existing_web_app);
CommitCallback commit_callback = base::BindOnce(
&WebAppInstallFinalizer::OnDatabaseCommitCompletedForUpdate,
weak_ptr_factory_.GetWeakPtr(), std::move(callback), app_id);
SetWebAppManifestFieldsAndWriteData(web_app_info, std::move(web_app), SetWebAppManifestFieldsAndWriteData(web_app_info, std::move(web_app),
/*is_new_install=*/false, std::move(commit_callback));
std::move(callback));
} }
void WebAppInstallFinalizer::Start() { void WebAppInstallFinalizer::Start() {
...@@ -405,8 +415,7 @@ void WebAppInstallFinalizer::UninstallWebAppOrRemoveSource( ...@@ -405,8 +415,7 @@ void WebAppInstallFinalizer::UninstallWebAppOrRemoveSource(
void WebAppInstallFinalizer::SetWebAppManifestFieldsAndWriteData( void WebAppInstallFinalizer::SetWebAppManifestFieldsAndWriteData(
const WebApplicationInfo& web_app_info, const WebApplicationInfo& web_app_info,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
bool is_new_install, CommitCallback commit_callback) {
InstallFinalizedCallback callback) {
web_app->SetName(base::UTF16ToUTF8(web_app_info.title)); web_app->SetName(base::UTF16ToUTF8(web_app_info.title));
web_app->SetDisplayMode(web_app_info.display_mode); web_app->SetDisplayMode(web_app_info.display_mode);
web_app->SetDescription(base::UTF16ToUTF8(web_app_info.description)); web_app->SetDescription(base::UTF16ToUTF8(web_app_info.description));
...@@ -450,44 +459,42 @@ void WebAppInstallFinalizer::SetWebAppManifestFieldsAndWriteData( ...@@ -450,44 +459,42 @@ void WebAppInstallFinalizer::SetWebAppManifestFieldsAndWriteData(
icon_manager_->WriteData( icon_manager_->WriteData(
std::move(app_id), web_app_info.icon_bitmaps, std::move(app_id), web_app_info.icon_bitmaps,
base::BindOnce(&WebAppInstallFinalizer::OnIconsDataWritten, base::BindOnce(&WebAppInstallFinalizer::OnIconsDataWritten,
weak_ptr_factory_.GetWeakPtr(), std::move(callback), weak_ptr_factory_.GetWeakPtr(), std::move(commit_callback),
std::move(web_app), std::move(web_app),
std::move(shortcuts_menu_icons_bitmaps), is_new_install)); std::move(shortcuts_menu_icons_bitmaps)));
} }
void WebAppInstallFinalizer::OnIconsDataWritten( void WebAppInstallFinalizer::OnIconsDataWritten(
InstallFinalizedCallback callback, CommitCallback commit_callback,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
std::vector<std::map<SquareSizePx, SkBitmap>> shortcuts_menu_icons, std::vector<std::map<SquareSizePx, SkBitmap>> shortcuts_menu_icons,
bool is_new_install,
bool success) { bool success) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!success) { if (!success) {
std::move(callback).Run(AppId(), InstallResultCode::kWriteDataFailed); std::move(commit_callback).Run(success);
return; return;
} }
if (shortcuts_menu_icons.empty()) { if (shortcuts_menu_icons.empty()) {
OnShortcutsMenuIconsDataWritten(std::move(callback), std::move(web_app), OnShortcutsMenuIconsDataWritten(std::move(commit_callback),
is_new_install, success); std::move(web_app), success);
} else { } else {
AppId app_id = web_app->app_id(); AppId app_id = web_app->app_id();
icon_manager_->WriteShortcutsMenuIconsData( icon_manager_->WriteShortcutsMenuIconsData(
app_id, shortcuts_menu_icons, app_id, shortcuts_menu_icons,
base::BindOnce(&WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten, base::BindOnce(&WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten,
weak_ptr_factory_.GetWeakPtr(), std::move(callback), weak_ptr_factory_.GetWeakPtr(),
std::move(web_app), is_new_install)); std::move(commit_callback), std::move(web_app)));
} }
} }
void WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten( void WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten(
InstallFinalizedCallback callback, CommitCallback commit_callback,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
bool is_new_install,
bool success) { bool success) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!success) { if (!success) {
std::move(callback).Run(AppId(), InstallResultCode::kWriteDataFailed); std::move(commit_callback).Run(success);
return; return;
} }
...@@ -503,10 +510,7 @@ void WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten( ...@@ -503,10 +510,7 @@ void WebAppInstallFinalizer::OnShortcutsMenuIconsDataWritten(
update->CreateApp(std::move(web_app)); update->CreateApp(std::move(web_app));
registry_controller().AsWebAppSyncBridge()->CommitUpdate( registry_controller().AsWebAppSyncBridge()->CommitUpdate(
std::move(update), std::move(update), std::move(commit_callback));
base::BindOnce(&WebAppInstallFinalizer::OnDatabaseCommitCompleted,
weak_ptr_factory_.GetWeakPtr(), std::move(callback),
std::move(app_id), is_new_install));
} }
void WebAppInstallFinalizer::OnIconsDataDeleted( void WebAppInstallFinalizer::OnIconsDataDeleted(
...@@ -516,10 +520,9 @@ void WebAppInstallFinalizer::OnIconsDataDeleted( ...@@ -516,10 +520,9 @@ void WebAppInstallFinalizer::OnIconsDataDeleted(
std::move(callback).Run(success); std::move(callback).Run(success);
} }
void WebAppInstallFinalizer::OnDatabaseCommitCompleted( void WebAppInstallFinalizer::OnDatabaseCommitCompletedForInstall(
InstallFinalizedCallback callback, InstallFinalizedCallback callback,
const AppId& app_id, AppId app_id,
bool is_new_install,
bool success) { bool success) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!success) { if (!success) {
...@@ -527,12 +530,21 @@ void WebAppInstallFinalizer::OnDatabaseCommitCompleted( ...@@ -527,12 +530,21 @@ void WebAppInstallFinalizer::OnDatabaseCommitCompleted(
return; return;
} }
if (is_new_install) registrar().NotifyWebAppInstalled(app_id);
registrar().NotifyWebAppInstalled(app_id); std::move(callback).Run(app_id, InstallResultCode::kSuccessNewInstall);
}
void WebAppInstallFinalizer::OnDatabaseCommitCompletedForUpdate(
InstallFinalizedCallback callback,
AppId app_id,
bool success) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!success) {
std::move(callback).Run(AppId(), InstallResultCode::kWriteDataFailed);
return;
}
std::move(callback).Run( std::move(callback).Run(app_id, InstallResultCode::kSuccessAlreadyInstalled);
app_id, is_new_install ? InstallResultCode::kSuccessNewInstall
: InstallResultCode::kSuccessAlreadyInstalled);
} }
void WebAppInstallFinalizer::OnFallbackInstallFinalized( void WebAppInstallFinalizer::OnFallbackInstallFinalized(
......
...@@ -55,6 +55,8 @@ class WebAppInstallFinalizer final : public InstallFinalizer { ...@@ -55,6 +55,8 @@ class WebAppInstallFinalizer final : public InstallFinalizer {
void Shutdown() override; void Shutdown() override;
private: private:
using CommitCallback = base::OnceCallback<void(bool success)>;
void UninstallWebApp(const AppId& app_id, UninstallWebAppCallback callback); void UninstallWebApp(const AppId& app_id, UninstallWebAppCallback callback);
void UninstallWebAppOrRemoveSource(const AppId& app_id, void UninstallWebAppOrRemoveSource(const AppId& app_id,
Source::Type source, Source::Type source,
...@@ -63,28 +65,27 @@ class WebAppInstallFinalizer final : public InstallFinalizer { ...@@ -63,28 +65,27 @@ class WebAppInstallFinalizer final : public InstallFinalizer {
void SetWebAppManifestFieldsAndWriteData( void SetWebAppManifestFieldsAndWriteData(
const WebApplicationInfo& web_app_info, const WebApplicationInfo& web_app_info,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
bool is_new_install, CommitCallback commit_callback);
InstallFinalizedCallback callback);
void OnIconsDataWritten( void OnIconsDataWritten(
InstallFinalizedCallback callback, CommitCallback commit_callback,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
std::vector<std::map<SquareSizePx, SkBitmap>> shortcuts_menu_icons, std::vector<std::map<SquareSizePx, SkBitmap>> shortcuts_menu_icons,
bool is_new_install,
bool success); bool success);
void OnShortcutsMenuIconsDataWritten(InstallFinalizedCallback callback, void OnShortcutsMenuIconsDataWritten(CommitCallback commit_callback,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
bool is_new_install,
bool success); bool success);
void OnIconsDataDeleted(const AppId& app_id, void OnIconsDataDeleted(const AppId& app_id,
UninstallWebAppCallback callback, UninstallWebAppCallback callback,
bool success); bool success);
void OnDatabaseCommitCompleted(InstallFinalizedCallback callback, void OnDatabaseCommitCompletedForInstall(InstallFinalizedCallback callback,
const AppId& app_id, AppId app_id,
bool is_new_install, bool success);
bool success); void OnDatabaseCommitCompletedForUpdate(InstallFinalizedCallback callback,
AppId app_id,
bool success);
void OnFallbackInstallFinalized(const AppId& app_in_sync_install_id, void OnFallbackInstallFinalized(const AppId& app_in_sync_install_id,
InstallFinalizedCallback callback, InstallFinalizedCallback callback,
const AppId& installed_app_id, const AppId& installed_app_id,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment