Commit 5d972bb2 authored by Alexey Baskakov's avatar Alexey Baskakov Committed by Commit Bot

WebApp: Expose InstallFinalizer::Source enum and option for FinalizeInstall.

We will need it to implement InstallWebAppWithOptions.

Bug: 901226
Change-Id: I88797140789a06eb9915a22c81b50d0f1bc20471
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1616923
Commit-Queue: Alexey Baskakov <loyso@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#661248}
parent 0f6264c2
......@@ -33,13 +33,20 @@ class InstallFinalizer {
using CreateOsShortcutsCallback =
base::OnceCallback<void(bool shortcuts_created)>;
enum class Source {
kUser,
kDefaultInstalled,
kPolicyInstalled,
kSystemInstalled,
};
struct FinalizeOptions {
// If |force_launch_container| defined as non-kDefault then the installed
// app will launch in |force_launch_container|.
LaunchContainer force_launch_container = LaunchContainer::kDefault;
Source source = Source::kUser;
bool error_on_unsupported_requirements = false;
bool locally_installed = true;
bool policy_installed = false;
bool no_network_install = false;
};
......
......@@ -112,8 +112,28 @@ void BookmarkAppInstallFinalizer::FinalizeInstall(
OnExtensionInstalled, web_app_info.app_url, launch_type,
options.locally_installed, std::move(callback), crx_installer));
if (options.policy_installed)
crx_installer->set_install_source(Manifest::EXTERNAL_POLICY_DOWNLOAD);
switch (options.source) {
case web_app::InstallFinalizer::Source::kDefaultInstalled:
crx_installer->set_install_source(Manifest::EXTERNAL_PREF_DOWNLOAD);
// CrxInstaller::InstallWebApp will OR the creation flags with
// FROM_BOOKMARK.
crx_installer->set_creation_flags(Extension::WAS_INSTALLED_BY_DEFAULT);
break;
case web_app::InstallFinalizer::Source::kPolicyInstalled:
crx_installer->set_install_source(Manifest::EXTERNAL_POLICY_DOWNLOAD);
break;
case web_app::InstallFinalizer::Source::kSystemInstalled:
// System Apps are considered EXTERNAL_COMPONENT as they are downloaded
// from the WebUI they point to. COMPONENT seems like the more correct
// value, but usages (icon loading, filesystem cleanup), are tightly
// coupled to this value, making it unsuitable.
crx_installer->set_install_source(Manifest::EXTERNAL_COMPONENT);
// InstallWebApp will OR the creation flags with FROM_BOOKMARK.
crx_installer->set_creation_flags(Extension::WAS_INSTALLED_BY_DEFAULT);
break;
case web_app::InstallFinalizer::Source::kUser:
break;
}
if (options.no_network_install) {
// Ensure that this app is not synced. A no-network install means we have
......
......@@ -100,7 +100,7 @@ class BookmarkAppInstallFinalizerTest : public ChromeRenderViewHostTestHarness {
info->title = base::ASCIIToUTF16(kWebAppTitle);
web_app::InstallFinalizer::FinalizeOptions options;
options.policy_installed = true;
options.source = web_app::InstallFinalizer::Source::kPolicyInstalled;
web_app::AppId app_id;
base::RunLoop run_loop;
......@@ -252,7 +252,7 @@ TEST_F(BookmarkAppInstallFinalizerTest, ConcurrentInstallSucceeds) {
EXPECT_TRUE(callback2_called);
}
TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstallSucceeds) {
TEST_F(BookmarkAppInstallFinalizerTest, DefaultInstalledSucceeds) {
BookmarkAppInstallFinalizer installer(profile());
auto info = std::make_unique<WebApplicationInfo>();
......@@ -260,7 +260,36 @@ TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstallSucceeds) {
info->title = base::ASCIIToUTF16(kWebAppTitle);
web_app::InstallFinalizer::FinalizeOptions options;
options.policy_installed = true;
options.source = web_app::InstallFinalizer::Source::kDefaultInstalled;
base::RunLoop run_loop;
installer.FinalizeInstall(
*info, options,
base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
web_app::InstallResultCode code) {
EXPECT_EQ(web_app::InstallResultCode::kSuccess, code);
auto* extension =
ExtensionRegistry::Get(profile())->GetInstalledExtension(
installed_app_id);
EXPECT_TRUE(Manifest::IsExternalLocation(extension->location()));
EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, extension->location());
EXPECT_TRUE(extension->was_installed_by_default());
run_loop.Quit();
}));
run_loop.Run();
}
TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstalledSucceeds) {
BookmarkAppInstallFinalizer installer(profile());
auto info = std::make_unique<WebApplicationInfo>();
info->app_url = kWebAppUrl;
info->title = base::ASCIIToUTF16(kWebAppTitle);
web_app::InstallFinalizer::FinalizeOptions options;
options.source = web_app::InstallFinalizer::Source::kPolicyInstalled;
base::RunLoop run_loop;
installer.FinalizeInstall(
......@@ -280,6 +309,35 @@ TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstallSucceeds) {
run_loop.Run();
}
TEST_F(BookmarkAppInstallFinalizerTest, SystemInstalledSucceeds) {
BookmarkAppInstallFinalizer installer(profile());
auto info = std::make_unique<WebApplicationInfo>();
info->app_url = kWebAppUrl;
info->title = base::ASCIIToUTF16(kWebAppTitle);
web_app::InstallFinalizer::FinalizeOptions options;
options.source = web_app::InstallFinalizer::Source::kSystemInstalled;
base::RunLoop run_loop;
installer.FinalizeInstall(
*info, options,
base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
web_app::InstallResultCode code) {
EXPECT_EQ(web_app::InstallResultCode::kSuccess, code);
auto* extension =
ExtensionRegistry::Get(profile())->GetInstalledExtension(
installed_app_id);
EXPECT_TRUE(Manifest::IsExternalLocation(extension->location()));
EXPECT_EQ(Manifest::EXTERNAL_COMPONENT, extension->location());
EXPECT_TRUE(extension->was_installed_by_default());
run_loop.Quit();
}));
run_loop.Run();
}
TEST_F(BookmarkAppInstallFinalizerTest, NoNetworkInstallSucceeds) {
BookmarkAppInstallFinalizer installer(profile());
......
......@@ -154,7 +154,7 @@ void BookmarkAppInstallationTask::InstallPlaceholder(ResultCallback callback) {
}
web_app::InstallFinalizer::FinalizeOptions options;
options.policy_installed = true;
options.source = web_app::InstallFinalizer::Source::kPolicyInstalled;
install_finalizer_->FinalizeInstall(
web_app_info, options,
......
......@@ -655,8 +655,8 @@ TEST_F(BookmarkAppInstallationTaskTest, InstallPlaceholder) {
EXPECT_EQ(1u, install_finalizer()->num_create_os_shortcuts_calls());
EXPECT_EQ(1u, install_finalizer()->finalize_options_list().size());
EXPECT_TRUE(
install_finalizer()->finalize_options_list()[0].policy_installed);
EXPECT_EQ(web_app::InstallFinalizer::Source::kPolicyInstalled,
install_finalizer()->finalize_options_list()[0].source);
const WebApplicationInfo& web_app_info =
install_finalizer()->web_app_info_list().at(0);
......
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