Commit 741bbcc2 authored by Oleg Davydov's avatar Oleg Davydov Committed by Commit Bot

Fix extension_info.mayDisable flag

Chrome management API (used, for example, by Chrome Web Store) sets
mayDisable flag according to whether requesting extension has access to
modify settings of requested one, but not that requested one can be
disabled at all (eg. if it is extension from force list, it should
always remain enabled).

This commit fixes this behavior.

Also this commit fixes
ExtensionManagementApiTest.ManagementPolicyProhibited test: when
supplying PROHIBIT_MODIFY_STATUS to TestManagementPolicyProvider is't
better to specify why status modification is prohibited.


Bug: 954144
Change-Id: Iaa4a31502dffca45b3d7eca3def56d3281a796e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1823873
Commit-Queue: Oleg Davydov <burunduk@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarIvan Šandrk <isandrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704115}
parent 61795032
......@@ -549,6 +549,53 @@ TEST_F(ManagementApiUnitTest, ExtensionInfo_MayEnable) {
}
}
TEST_F(ManagementApiUnitTest, ExtensionInfo_MayDisable) {
using ExtensionInfo = api::management::ExtensionInfo;
scoped_refptr<const Extension> extension = ExtensionBuilder("Test").Build();
service()->AddExtension(extension.get());
const std::string args =
base::StringPrintf("[\"%s\"]", extension->id().c_str());
// Initially the extension should show as enabled, so it may be disabled
// freely.
EXPECT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
{
scoped_refptr<ExtensionFunction> function = new ManagementGetFunction();
std::unique_ptr<base::Value> value(
extension_function_test_utils::RunFunctionAndReturnSingleResult(
function.get(), args, browser()));
ASSERT_TRUE(value);
std::unique_ptr<ExtensionInfo> info = ExtensionInfo::FromValue(*value);
ASSERT_TRUE(info);
EXPECT_TRUE(info->enabled);
EXPECT_TRUE(info->may_disable);
}
// Simulate forcing the extension and verify that the extension shows with
// a false value of |may_disable|.
ManagementPolicy* policy =
ExtensionSystem::Get(profile())->management_policy();
policy->UnregisterAllProviders();
TestManagementPolicyProvider provider(
TestManagementPolicyProvider::MUST_REMAIN_ENABLED);
policy->RegisterProvider(&provider);
service()->CheckManagementPolicy();
EXPECT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
{
scoped_refptr<ExtensionFunction> function = new ManagementGetFunction();
std::unique_ptr<base::Value> value(
extension_function_test_utils::RunFunctionAndReturnSingleResult(
function.get(), args, browser()));
ASSERT_TRUE(value);
std::unique_ptr<ExtensionInfo> info = ExtensionInfo::FromValue(*value);
ASSERT_TRUE(info);
EXPECT_TRUE(info->enabled);
EXPECT_FALSE(info->may_disable);
}
}
// Tests enabling an extension via management API after it was disabled due to
// permission increase.
TEST_F(ManagementApiUnitTest, SetEnabledAfterIncreasedPermissions) {
......
......@@ -375,7 +375,9 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest,
browser()->profile())->management_policy();
policy->UnregisterAllProviders();
extensions::TestManagementPolicyProvider provider(
extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS |
extensions::TestManagementPolicyProvider::MUST_REMAIN_ENABLED |
extensions::TestManagementPolicyProvider::MUST_REMAIN_INSTALLED);
policy->RegisterProvider(&provider);
ASSERT_TRUE(RunExtensionSubtest("management/management_policy",
"prohibited.html"));
......
......@@ -111,8 +111,8 @@ management::ExtensionInfo CreateExtensionInfo(
info.options_url = OptionsPageInfo::GetOptionsPage(&extension).spec();
info.homepage_url.reset(
new std::string(ManifestURL::GetHomepageURL(&extension).spec()));
info.may_disable = system->management_policy()->ExtensionMayModifySettings(
source_extension, &extension, nullptr);
info.may_disable =
!system->management_policy()->MustRemainEnabled(&extension, nullptr);
info.is_app = extension.is_app();
if (info.is_app) {
if (extension.is_legacy_packaged_app())
......
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