Commit 1bc06660 authored by Giovanni Ortuño Urquidi's avatar Giovanni Ortuño Urquidi Committed by Commit Bot

desktop-pwas: Install placeholder app with right source flag

Adds a method to install finalizer to install policy apps with the
right flags.

Bug: 844278
Change-Id: I144f9f2bf08db4a6add1fef04f2b9b2d343ff7de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1547545
Commit-Queue: Giovanni Ortuño Urquidi <ortuno@chromium.org>
Reviewed-by: default avatarAlexey Baskakov <loyso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#647120}
parent 7c9e3e69
...@@ -34,6 +34,10 @@ class InstallFinalizer { ...@@ -34,6 +34,10 @@ class InstallFinalizer {
virtual void FinalizeInstall(const WebApplicationInfo& web_app_info, virtual void FinalizeInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) = 0; InstallFinalizedCallback callback) = 0;
// TODO(ortuno): Merge with FinalizeInstall by taking an options argument.
virtual void FinalizePolicyInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) = 0;
virtual bool CanCreateOsShortcuts() const = 0; virtual bool CanCreateOsShortcuts() const = 0;
virtual void CreateOsShortcuts(const AppId& app_id, virtual void CreateOsShortcuts(const AppId& app_id,
CreateOsShortcutsCallback callback) = 0; CreateOsShortcutsCallback callback) = 0;
......
...@@ -96,6 +96,21 @@ void BookmarkAppInstallFinalizer::FinalizeInstall( ...@@ -96,6 +96,21 @@ void BookmarkAppInstallFinalizer::FinalizeInstall(
crx_installer->InstallWebApp(web_app_info); crx_installer->InstallWebApp(web_app_info);
} }
void BookmarkAppInstallFinalizer::FinalizePolicyInstall(
const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) {
scoped_refptr<CrxInstaller> crx_installer =
crx_installer_factory_.Run(profile_);
crx_installer->set_installer_callback(base::BindOnce(
OnExtensionInstalled, web_app_info.app_url, GetLaunchType(web_app_info),
std::move(callback), crx_installer));
crx_installer->set_install_source(Manifest::EXTERNAL_POLICY_DOWNLOAD);
crx_installer->InstallWebApp(web_app_info);
}
bool BookmarkAppInstallFinalizer::CanCreateOsShortcuts() const { bool BookmarkAppInstallFinalizer::CanCreateOsShortcuts() const {
return CanBookmarkAppCreateOsShortcuts(); return CanBookmarkAppCreateOsShortcuts();
} }
......
...@@ -28,6 +28,8 @@ class BookmarkAppInstallFinalizer : public web_app::InstallFinalizer { ...@@ -28,6 +28,8 @@ class BookmarkAppInstallFinalizer : public web_app::InstallFinalizer {
// InstallFinalizer: // InstallFinalizer:
void FinalizeInstall(const WebApplicationInfo& web_app_info, void FinalizeInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override; InstallFinalizedCallback callback) override;
void FinalizePolicyInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override;
bool CanCreateOsShortcuts() const override; bool CanCreateOsShortcuts() const override;
void CreateOsShortcuts(const web_app::AppId& app_id, void CreateOsShortcuts(const web_app::AppId& app_id,
CreateOsShortcutsCallback callback) override; CreateOsShortcutsCallback callback) override;
......
...@@ -20,8 +20,10 @@ ...@@ -20,8 +20,10 @@
#include "chrome/common/web_application_info.h" #include "chrome/common/web_application_info.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/install/crx_install_error.h" #include "extensions/browser/install/crx_install_error.h"
#include "extensions/common/extension_id.h" #include "extensions/common/extension_id.h"
#include "extensions/common/manifest.h"
namespace extensions { namespace extensions {
...@@ -202,4 +204,28 @@ TEST_F(BookmarkAppInstallFinalizerTest, ConcurrentInstallSucceeds) { ...@@ -202,4 +204,28 @@ TEST_F(BookmarkAppInstallFinalizerTest, ConcurrentInstallSucceeds) {
EXPECT_TRUE(callback2_called); EXPECT_TRUE(callback2_called);
} }
TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstallSucceeds) {
BookmarkAppInstallFinalizer installer(profile());
auto info = std::make_unique<WebApplicationInfo>();
info->app_url = GURL(kWebAppUrl);
info->title = base::ASCIIToUTF16(kWebAppTitle);
base::RunLoop run_loop;
installer.FinalizePolicyInstall(
*info,
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::IsPolicyLocation(extension->location()));
run_loop.Quit();
}));
run_loop.Run();
}
} // namespace extensions } // namespace extensions
...@@ -86,7 +86,7 @@ void BookmarkAppInstallationTask::InstallPlaceholder(ResultCallback callback) { ...@@ -86,7 +86,7 @@ void BookmarkAppInstallationTask::InstallPlaceholder(ResultCallback callback) {
break; break;
} }
install_finalizer_->FinalizeInstall( install_finalizer_->FinalizePolicyInstall(
web_app_info, web_app_info,
base::BindOnce(&BookmarkAppInstallationTask::OnWebAppInstalled, base::BindOnce(&BookmarkAppInstallationTask::OnWebAppInstalled,
weak_ptr_factory_.GetWeakPtr(), true /* is_placeholder */, weak_ptr_factory_.GetWeakPtr(), true /* is_placeholder */,
......
...@@ -474,6 +474,7 @@ TEST_F(BookmarkAppInstallationTaskTest, InstallPlaceholder) { ...@@ -474,6 +474,7 @@ TEST_F(BookmarkAppInstallationTaskTest, InstallPlaceholder) {
EXPECT_TRUE(IsPlaceholderApp(profile(), app_url())); EXPECT_TRUE(IsPlaceholderApp(profile(), app_url()));
EXPECT_TRUE(finalizer_ptr->finalized_policy_install());
std::unique_ptr<WebApplicationInfo> web_app_info = std::unique_ptr<WebApplicationInfo> web_app_info =
finalizer_ptr->web_app_info(); finalizer_ptr->web_app_info();
......
...@@ -35,11 +35,19 @@ void TestInstallFinalizer::FinalizeInstall( ...@@ -35,11 +35,19 @@ void TestInstallFinalizer::FinalizeInstall(
// Store a copy for inspecting in tests. // Store a copy for inspecting in tests.
web_app_info_copy_ = std::make_unique<WebApplicationInfo>(web_app_info); web_app_info_copy_ = std::make_unique<WebApplicationInfo>(web_app_info);
finalized_policy_install_ = false;
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), app_id, code)); FROM_HERE, base::BindOnce(std::move(callback), app_id, code));
} }
void TestInstallFinalizer::FinalizePolicyInstall(
const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) {
FinalizeInstall(web_app_info, std::move(callback));
finalized_policy_install_ = true;
}
bool TestInstallFinalizer::CanCreateOsShortcuts() const { bool TestInstallFinalizer::CanCreateOsShortcuts() const {
return true; return true;
} }
......
...@@ -23,6 +23,8 @@ class TestInstallFinalizer final : public InstallFinalizer { ...@@ -23,6 +23,8 @@ class TestInstallFinalizer final : public InstallFinalizer {
// InstallFinalizer: // InstallFinalizer:
void FinalizeInstall(const WebApplicationInfo& web_app_info, void FinalizeInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override; InstallFinalizedCallback callback) override;
void FinalizePolicyInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override;
bool CanCreateOsShortcuts() const override; bool CanCreateOsShortcuts() const override;
void CreateOsShortcuts(const AppId& app_id, void CreateOsShortcuts(const AppId& app_id,
CreateOsShortcutsCallback callback) override; CreateOsShortcutsCallback callback) override;
...@@ -42,6 +44,8 @@ class TestInstallFinalizer final : public InstallFinalizer { ...@@ -42,6 +44,8 @@ class TestInstallFinalizer final : public InstallFinalizer {
return std::move(web_app_info_copy_); return std::move(web_app_info_copy_);
} }
bool finalized_policy_install() { return finalized_policy_install_.value(); }
int num_create_os_shortcuts_calls() { return num_create_os_shortcuts_calls_; } int num_create_os_shortcuts_calls() { return num_create_os_shortcuts_calls_; }
int num_reparent_tab_calls() { return num_reparent_tab_calls_; } int num_reparent_tab_calls() { return num_reparent_tab_calls_; }
int num_reveal_appshim_calls() { return num_reveal_appshim_calls_; } int num_reveal_appshim_calls() { return num_reveal_appshim_calls_; }
...@@ -49,6 +53,7 @@ class TestInstallFinalizer final : public InstallFinalizer { ...@@ -49,6 +53,7 @@ class TestInstallFinalizer final : public InstallFinalizer {
private: private:
std::unique_ptr<WebApplicationInfo> web_app_info_copy_; std::unique_ptr<WebApplicationInfo> web_app_info_copy_;
base::Optional<bool> finalized_policy_install_;
base::Optional<AppId> next_app_id_; base::Optional<AppId> next_app_id_;
base::Optional<InstallResultCode> next_result_code_; base::Optional<InstallResultCode> next_result_code_;
......
...@@ -80,6 +80,12 @@ void WebAppInstallFinalizer::FinalizeInstall( ...@@ -80,6 +80,12 @@ void WebAppInstallFinalizer::FinalizeInstall(
std::move(web_app))); std::move(web_app)));
} }
void WebAppInstallFinalizer::FinalizePolicyInstall(
const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) {
NOTIMPLEMENTED();
}
void WebAppInstallFinalizer::OnDataWritten(InstallFinalizedCallback callback, void WebAppInstallFinalizer::OnDataWritten(InstallFinalizedCallback callback,
std::unique_ptr<WebApp> web_app, std::unique_ptr<WebApp> web_app,
bool success) { bool success) {
......
...@@ -28,6 +28,8 @@ class WebAppInstallFinalizer final : public InstallFinalizer { ...@@ -28,6 +28,8 @@ class WebAppInstallFinalizer final : public InstallFinalizer {
// InstallFinalizer: // InstallFinalizer:
void FinalizeInstall(const WebApplicationInfo& web_app_info, void FinalizeInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override; InstallFinalizedCallback callback) override;
void FinalizePolicyInstall(const WebApplicationInfo& web_app_info,
InstallFinalizedCallback callback) override;
bool CanCreateOsShortcuts() const override; bool CanCreateOsShortcuts() const override;
void CreateOsShortcuts(const AppId& app_id, void CreateOsShortcuts(const AppId& app_id,
CreateOsShortcutsCallback callback) override; CreateOsShortcutsCallback callback) override;
......
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