Commit 06a437db authored by Yann Dago's avatar Yann Dago Committed by Commit Bot

Enable normal installed extensions by default

Extensions installed by policy as "normal_installed" were disabled by
default contrary to what is documented. They are now silently enabled
by default.

Bug: 1029516
Change-Id: I5b11b3fdd85ff39f5bbb9e0505d26294c5c5f935
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2118575
Commit-Queue: Yann Dago <ydago@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758527}
parent 5ec29e3e
......@@ -7642,6 +7642,45 @@ TEST_F(ExtensionServiceTest,
EXPECT_FALSE(policy->UserMayModifySettings(extension, nullptr));
}
TEST_F(ExtensionServiceTest, InstallingUnacknowledgedExternalExtension) {
InitializeEmptyExtensionServiceWithTestingPrefs();
{
ManagementPrefUpdater pref(profile_->GetTestingPrefService());
// Mark good.crx for recommended installation.
pref.SetIndividualExtensionAutoInstalled(
good_crx, "http://example.com/update_url", false);
}
base::FilePath path = data_dir().AppendASCII("good.crx");
std::string version_str = "1.0.0.0";
// Install an external extension.
std::unique_ptr<ExternalInstallInfoFile> info = CreateExternalExtension(
good_crx, version_str, path, Manifest::EXTERNAL_PREF_DOWNLOAD,
Extension::NO_FLAGS);
MockExternalProvider* provider =
AddMockExternalProvider(Manifest::EXTERNAL_PREF_DOWNLOAD);
provider->UpdateOrAddExtension(std::move(info));
WaitForExternalExtensionInstalled();
const Extension* extension =
registry()->enabled_extensions().GetByID(good_crx);
ASSERT_TRUE(extension);
EXPECT_EQ(good_crx, extension->id());
EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, extension->location());
EXPECT_EQ(version_str, extension->VersionString());
ExtensionManagement::InstallationMode installation_mode =
ExtensionManagementFactory::GetForBrowserContext(profile())
->GetInstallationMode(extension);
ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
EXPECT_EQ(ExtensionManagement::INSTALLATION_RECOMMENDED, installation_mode);
EXPECT_TRUE(registry()->enabled_extensions().Contains(good_crx));
EXPECT_TRUE(prefs->IsExternalExtensionAcknowledged(extension->id()));
EXPECT_EQ(disable_reason::DISABLE_NONE, prefs->GetDisableReasons(good_crx));
EXPECT_FALSE(prefs->IsExtensionDisabled(good_crx));
}
// Regression test for crbug.com/460699. Ensure PluginManager doesn't crash even
// if OnExtensionUnloaded is invoked twice in succession.
TEST_F(ExtensionServiceTest, PluginManagerCrash) {
......
......@@ -10,6 +10,7 @@
#include "base/metrics/histogram_macros.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/extension_management.h"
#include "chrome/browser/extensions/external_install_error.h"
#include "chrome/browser/profiles/profile.h"
#include "components/version_info/version_info.h"
......@@ -226,10 +227,17 @@ void ExternalInstallManager::OnExtensionInstalled(
content::BrowserContext* browser_context,
const Extension* extension,
bool is_update) {
ExtensionManagement* settings =
ExtensionManagementFactory::GetForBrowserContext(
Profile::FromBrowserContext(browser_context_));
bool is_recommended_by_policy = settings->GetInstallationMode(extension) ==
ExtensionManagement::INSTALLATION_RECOMMENDED;
// Certain extension locations are specific enough that we can
// auto-acknowledge any extension that came from one of them.
// Extensions recommended by policy can also be auto-acknowledged.
if (Manifest::IsPolicyLocation(extension->location()) ||
extension->location() == Manifest::EXTERNAL_COMPONENT) {
extension->location() == Manifest::EXTERNAL_COMPONENT ||
is_recommended_by_policy) {
AcknowledgeExternalExtension(extension->id());
return;
}
......
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