| 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 cef7903ba20cfcd20b99de9ef4a9d757d5cba2d6..0973df239918d7625810aa814fd79711ed3173f9 100644
|
| --- a/chrome/browser/extensions/external_provider_impl.cc
|
| +++ b/chrome/browser/extensions/external_provider_impl.cc
|
| @@ -27,6 +27,11 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| +#if defined(ENABLE_MANAGED_USERS)
|
| +#include "chrome/browser/managed_mode/managed_user_service.h"
|
| +#include "chrome/browser/managed_mode/managed_user_service_factory.h"
|
| +#endif
|
| +
|
| #if defined(OS_CHROMEOS)
|
| #include "chrome/browser/chromeos/login/user_manager.h"
|
| #include "chrome/browser/policy/app_pack_updater.h"
|
| @@ -356,7 +361,26 @@ void ExternalProviderImpl::CreateExternalProviders(
|
| Extension::WAS_INSTALLED_BY_DEFAULT;
|
| #endif
|
|
|
| - if (!is_chromeos_demo_session) {
|
| + bool is_managed_profile = false;
|
| +#if defined(ENABLE_MANAGED_USERS)
|
| + ManagedUserService* managed_user_service =
|
| + ManagedUserServiceFactory::GetForProfile(profile);
|
| + is_managed_profile = managed_user_service->ProfileIsManaged();
|
| +
|
| + if (is_managed_profile) {
|
| + provider_list->push_back(
|
| + linked_ptr<ExternalProviderInterface>(
|
| + new ExternalProviderImpl(
|
| + service,
|
| + new ExternalPrefLoader(chrome::DIR_MANAGED_USERS_DEFAULT_APPS,
|
| + check_admin_permissions_on_mac),
|
| + Manifest::EXTERNAL_PREF,
|
| + Manifest::EXTERNAL_PREF_DOWNLOAD,
|
| + bundled_extension_creation_flags)));
|
| + }
|
| +#endif
|
| +
|
| + if (!is_chromeos_demo_session && !is_managed_profile) {
|
| provider_list->push_back(
|
| linked_ptr<ExternalProviderInterface>(
|
| new ExternalProviderImpl(
|
| @@ -369,61 +393,72 @@ void ExternalProviderImpl::CreateExternalProviders(
|
| }
|
|
|
| #if defined(OS_CHROMEOS) || defined (OS_MACOSX)
|
| - // Define a per-user source of external extensions.
|
| - // On Chrome OS, this serves as a source for OEM customization.
|
| - provider_list->push_back(
|
| - linked_ptr<ExternalProviderInterface>(
|
| - new ExternalProviderImpl(
|
| - service,
|
| - new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS,
|
| - ExternalPrefLoader::NONE),
|
| - Manifest::EXTERNAL_PREF,
|
| - Manifest::EXTERNAL_PREF_DOWNLOAD,
|
| - Extension::NO_FLAGS)));
|
| + if (!is_managed_profile) {
|
| + // Define a per-user source of external extensions.
|
| + // On Chrome OS, this serves as a source for OEM customization.
|
| + provider_list->push_back(
|
| + linked_ptr<ExternalProviderInterface>(
|
| + new ExternalProviderImpl(
|
| + service,
|
| + new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS,
|
| + ExternalPrefLoader::NONE),
|
| + Manifest::EXTERNAL_PREF,
|
| + Manifest::EXTERNAL_PREF_DOWNLOAD,
|
| + Extension::NO_FLAGS)));
|
| + }
|
| #endif
|
| +
|
| #if defined(OS_WIN)
|
| - provider_list->push_back(
|
| - linked_ptr<ExternalProviderInterface>(
|
| - new ExternalProviderImpl(
|
| - service,
|
| - new ExternalRegistryLoader,
|
| - Manifest::EXTERNAL_REGISTRY,
|
| - Manifest::INVALID_LOCATION,
|
| - Extension::NO_FLAGS)));
|
| + if (!is_managed_profile) {
|
| + provider_list->push_back(
|
| + linked_ptr<ExternalProviderInterface>(
|
| + new ExternalProviderImpl(
|
| + service,
|
| + new ExternalRegistryLoader,
|
| + Manifest::EXTERNAL_REGISTRY,
|
| + Manifest::INVALID_LOCATION,
|
| + Extension::NO_FLAGS)));
|
| + }
|
| #endif
|
|
|
| #if defined(OS_LINUX)
|
| - provider_list->push_back(
|
| - linked_ptr<ExternalProviderInterface>(
|
| - new ExternalProviderImpl(
|
| - service,
|
| - new ExternalPrefLoader(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
|
| - ExternalPrefLoader::NONE),
|
| - Manifest::EXTERNAL_PREF,
|
| - Manifest::EXTERNAL_PREF_DOWNLOAD,
|
| - bundled_extension_creation_flags)));
|
| + if (!is_managed_profile) {
|
| + provider_list->push_back(
|
| + linked_ptr<ExternalProviderInterface>(
|
| + new ExternalProviderImpl(
|
| + service,
|
| + new ExternalPrefLoader(
|
| + chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
|
| + ExternalPrefLoader::NONE),
|
| + Manifest::EXTERNAL_PREF,
|
| + Manifest::EXTERNAL_PREF_DOWNLOAD,
|
| + bundled_extension_creation_flags)));
|
| + }
|
| #endif
|
|
|
| #if !defined(OS_CHROMEOS)
|
| - // The default apps are installed as INTERNAL but use the external
|
| - // extension installer codeflow.
|
| - provider_list->push_back(
|
| - linked_ptr<ExternalProviderInterface>(
|
| - new default_apps::Provider(
|
| - profile,
|
| - service,
|
| - new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS,
|
| - ExternalPrefLoader::NONE),
|
| - Manifest::INTERNAL,
|
| - Manifest::INVALID_LOCATION,
|
| - Extension::FROM_WEBSTORE |
|
| - Extension::WAS_INSTALLED_BY_DEFAULT)));
|
| + if (!is_managed_profile) {
|
| + // The default apps are installed as INTERNAL but use the external
|
| + // extension installer codeflow.
|
| + provider_list->push_back(
|
| + linked_ptr<ExternalProviderInterface>(
|
| + new default_apps::Provider(
|
| + profile,
|
| + service,
|
| + new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS,
|
| + ExternalPrefLoader::NONE),
|
| + Manifest::INTERNAL,
|
| + Manifest::INVALID_LOCATION,
|
| + Extension::FROM_WEBSTORE |
|
| + Extension::WAS_INSTALLED_BY_DEFAULT)));
|
| + }
|
| #endif
|
|
|
| #if defined(OS_CHROMEOS)
|
| policy::BrowserPolicyConnector* connector =
|
| g_browser_process->browser_policy_connector();
|
| - if (is_chromeos_demo_session && connector->GetAppPackUpdater()) {
|
| + if (!is_managed_profile &&
|
| + is_chromeos_demo_session && connector->GetAppPackUpdater()) {
|
| provider_list->push_back(
|
| linked_ptr<ExternalProviderInterface>(
|
| new ExternalProviderImpl(
|
|
|