| Index: chrome/browser/extensions/external_provider_impl.cc
|
| diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
|
| index 12ab37ed85d7438b951be9c2668a21c4055e5555..cd7f17ddc8ee54bd7e6ca8bb35f6912d0d20ad4c 100644
|
| --- a/chrome/browser/extensions/external_provider_impl.cc
|
| +++ b/chrome/browser/extensions/external_provider_impl.cc
|
| @@ -43,6 +43,8 @@
|
| #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
|
| +#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
|
| +#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
|
| #include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "components/user_manager/user.h"
|
| #else
|
| @@ -229,19 +231,18 @@ void ExternalProviderImpl::SetPrefs(base::DictionaryValue* prefs) {
|
| continue;
|
| }
|
| }
|
| - bool was_installed_by_oem = false;
|
| - if (extension->GetBoolean(kWasInstalledByOem, &was_installed_by_oem) &&
|
| - was_installed_by_oem) {
|
| - creation_flags |= Extension::WAS_INSTALLED_BY_OEM;
|
| - }
|
| + if (!HandleInstalledByOem(extension, extension_id, &unsupported_extensions,
|
| + &creation_flags))
|
| + continue;
|
| +
|
| bool may_be_untrusted = false;
|
| if (extension->GetBoolean(kMayBeUntrusted, &may_be_untrusted) &&
|
| may_be_untrusted) {
|
| creation_flags |= Extension::MAY_BE_UNTRUSTED;
|
| }
|
|
|
| - if (!ExternalProviderImpl::HandleMinProfileVersion(extension, extension_id,
|
| - &unsupported_extensions))
|
| + if (!HandleMinProfileVersion(extension, extension_id,
|
| + &unsupported_extensions))
|
| continue;
|
|
|
| std::string install_parameter;
|
| @@ -393,6 +394,29 @@ bool ExternalProviderImpl::HandleMinProfileVersion(
|
| return true;
|
| }
|
|
|
| +bool ExternalProviderImpl::HandleInstalledByOem(
|
| + const base::DictionaryValue* extension,
|
| + const std::string& extension_id,
|
| + std::set<std::string>* unsupported_extensions,
|
| + int* creation_flags) {
|
| + bool was_installed_by_oem = false;
|
| + if (extension->GetBoolean(kWasInstalledByOem, &was_installed_by_oem) &&
|
| + was_installed_by_oem) {
|
| +#if defined(OS_CHROMEOS)
|
| + policy::UserCloudPolicyManagerChromeOS* policy_manager =
|
| + policy::UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile_);
|
| + if (policy_manager && policy_manager->core()->store()->is_managed()) {
|
| + unsupported_extensions->insert(extension_id);
|
| + VLOG(1) << "Skip installing (or uninstall) external extension "
|
| + << extension_id << " installed by OEM for managed user";
|
| + return false;
|
| + }
|
| +#endif
|
| + *creation_flags |= Extension::WAS_INSTALLED_BY_OEM;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| // static
|
| void ExternalProviderImpl::CreateExternalProviders(
|
| VisitorInterface* service,
|
|
|