Commit 9e5cfed8 authored by Anatoliy Potapchuk's avatar Anatoliy Potapchuk Committed by Commit Bot

[Kiosk] Allow platform apps in web kiosk mode

We need some of these apps like Files app, and possibly in future the
settings app.

Bug: 1047211
Change-Id: I270e9bc86d849f76470e4befb49b2968fc87e3e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2031027
Commit-Queue: Anatoliy Potapchuk <apotapchuk@chromium.org>
Reviewed-by: default avatarSergey Poromov <poromov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737360}
parent 559aedde
...@@ -858,18 +858,15 @@ bool DeviceLocalAccountManagementPolicyProvider::UserMayLoad( ...@@ -858,18 +858,15 @@ bool DeviceLocalAccountManagementPolicyProvider::UserMayLoad(
&& IsSafeForPublicSession(extension)) { && IsSafeForPublicSession(extension)) {
return true; return true;
} }
} else if (account_type_ == policy::DeviceLocalAccount::TYPE_KIOSK_APP) { } else if (account_type_ == policy::DeviceLocalAccount::TYPE_KIOSK_APP ||
// For single-app kiosk sessions, allow platform apps, extesions and shared account_type_ == policy::DeviceLocalAccount::TYPE_WEB_KIOSK_APP) {
// For single-app kiosk sessions, allow platform apps, extensions and shared
// modules. // modules.
if (extension->GetType() == extensions::Manifest::TYPE_PLATFORM_APP || if (extension->GetType() == extensions::Manifest::TYPE_PLATFORM_APP ||
extension->GetType() == extensions::Manifest::TYPE_SHARED_MODULE || extension->GetType() == extensions::Manifest::TYPE_SHARED_MODULE ||
extension->GetType() == extensions::Manifest::TYPE_EXTENSION) { extension->GetType() == extensions::Manifest::TYPE_EXTENSION) {
return true; return true;
} }
} else if (account_type_ == policy::DeviceLocalAccount::TYPE_WEB_KIOSK_APP) {
if (extension->GetType() == extensions::Manifest::TYPE_EXTENSION) {
return true;
}
} }
// Disallow all other extensions. // Disallow all other extensions.
......
...@@ -589,50 +589,56 @@ TEST(DeviceLocalAccountManagementPolicyProviderTest, PublicSession) { ...@@ -589,50 +589,56 @@ TEST(DeviceLocalAccountManagementPolicyProviderTest, PublicSession) {
} }
} }
TEST(DeviceLocalAccountManagementPolicyProviderTest, KioskAppSession) { TEST(DeviceLocalAccountManagementPolicyProviderTest, KioskAppSessions) {
DeviceLocalAccountManagementPolicyProvider std::vector<policy::DeviceLocalAccount::Type> types = {
provider(policy::DeviceLocalAccount::TYPE_KIOSK_APP); policy::DeviceLocalAccount::TYPE_KIOSK_APP,
policy::DeviceLocalAccount::TYPE_WEB_KIOSK_APP};
// Verify that a platform app can be installed.
scoped_refptr<const extensions::Extension> extension = CreatePlatformApp(); for (auto type : types) {
ASSERT_TRUE(extension.get()); LOG(INFO) << "Testing device local account type = "<< static_cast<int>(type);
base::string16 error; DeviceLocalAccountManagementPolicyProvider provider(type);
EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
EXPECT_EQ(base::string16(), error); // Verify that a platform app can be installed.
error.clear(); scoped_refptr<const extensions::Extension> extension = CreatePlatformApp();
ASSERT_TRUE(extension.get());
base::string16 error;
EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
EXPECT_EQ(base::string16(), error);
error.clear();
// Verify that an extension whose location has been whitelisted for use in // Verify that an extension whose location has been whitelisted for use in
// other types of device-local accounts cannot be installed in a single-app // other types of device-local accounts cannot be installed in a single-app
// kiosk session. // kiosk session.
extension = CreateExternalComponentExtension(); extension = CreateExternalComponentExtension();
ASSERT_TRUE(extension.get()); ASSERT_TRUE(extension.get());
EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error)); EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
EXPECT_EQ(base::string16(), error); EXPECT_EQ(base::string16(), error);
error.clear(); error.clear();
extension = CreateComponentExtension(); extension = CreateComponentExtension();
ASSERT_TRUE(extension.get()); ASSERT_TRUE(extension.get());
EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error)); EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
EXPECT_EQ(base::string16(), error); EXPECT_EQ(base::string16(), error);
error.clear(); error.clear();
// Verify that an extension whose type has been whitelisted for use in other // Verify that an extension whose type has been whitelisted for use in other
// types of device-local accounts cannot be installed in a single-app kiosk // types of device-local accounts cannot be installed in a single-app kiosk
// session. // session.
extension = CreateHostedApp(); extension = CreateHostedApp();
ASSERT_TRUE(extension.get()); ASSERT_TRUE(extension.get());
EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error)); EXPECT_FALSE(provider.UserMayLoad(extension.get(), &error));
EXPECT_NE(base::string16(), error); EXPECT_NE(base::string16(), error);
error.clear(); error.clear();
// Verify that an extension whose ID has been whitelisted for use in other // Verify that an extension whose ID has been whitelisted for use in other
// types of device-local accounts cannot be installed in a single-app kiosk // types of device-local accounts cannot be installed in a single-app kiosk
// session. // session.
extension = CreateRegularExtension(kWhitelistedId); extension = CreateRegularExtension(kWhitelistedId);
ASSERT_TRUE(extension.get()); ASSERT_TRUE(extension.get());
EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error)); EXPECT_TRUE(provider.UserMayLoad(extension.get(), &error));
EXPECT_EQ(base::string16(), error); EXPECT_EQ(base::string16(), error);
error.clear(); error.clear();
}
} }
TEST(DeviceLocalAccountManagementPolicyProviderTest, IsWhitelisted) { TEST(DeviceLocalAccountManagementPolicyProviderTest, IsWhitelisted) {
......
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