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 f3122881c0af2f3125e81b935d67ddd48c7b4fc1..7502de34f78a7c974e5008b0fab7acb784dc1b58 100644 |
--- a/chrome/browser/extensions/external_provider_impl.cc |
+++ b/chrome/browser/extensions/external_provider_impl.cc |
@@ -35,6 +35,7 @@ |
#include "ui/base/l10n/l10n_util.h" |
#if defined(OS_CHROMEOS) |
+#include "base/prefs/pref_service.h" |
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
#include "chrome/browser/chromeos/customization/customization_document.h" |
#include "chrome/browser/chromeos/extensions/device_local_account_external_policy_loader.h" |
@@ -42,6 +43,7 @@ |
#include "chrome/browser/chromeos/policy/device_local_account.h" |
#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" |
#include "chrome/browser/chromeos/profiles/profile_helper.h" |
+#include "chrome/common/pref_names.h" |
#include "components/user_manager/user.h" |
#else |
#include "chrome/browser/extensions/default_apps.h" |
@@ -66,6 +68,8 @@ const char ExternalProviderImpl::kKeepIfPresent[] = "keep_if_present"; |
const char ExternalProviderImpl::kWasInstalledByOem[] = "was_installed_by_oem"; |
const char ExternalProviderImpl::kSupportedLocales[] = "supported_locales"; |
const char ExternalProviderImpl::kMayBeUntrusted[] = "may_be_untrusted"; |
+const char ExternalProviderImpl::kMinProfileCreatedByVersion[] = |
+ "min_profile_created_by_version"; |
ExternalProviderImpl::ExternalProviderImpl( |
VisitorInterface* service, |
@@ -218,6 +222,7 @@ void ExternalProviderImpl::SetPrefs(base::DictionaryValue* prefs) { |
const Extension* extension = extension_service ? |
extension_service->GetExtensionById(extension_id, true) : NULL; |
if (!extension) { |
+ unsupported_extensions.insert(extension_id); |
VLOG(1) << "Skip installing (or uninstall) external extension: " |
<< extension_id << " because the extension should be kept " |
<< "only if it is already installed."; |
@@ -235,6 +240,26 @@ void ExternalProviderImpl::SetPrefs(base::DictionaryValue* prefs) { |
creation_flags |= Extension::MAY_BE_UNTRUSTED; |
} |
+#if defined(OS_CHROMEOS) |
+ std::string min_profile_created_by_version; |
+ if (profile_ && |
+ extension->GetString(kMinProfileCreatedByVersion, |
+ &min_profile_created_by_version)) { |
+ Version profile_version( |
+ profile_->GetPrefs()->GetString(prefs::kProfileCreatedByVersion)); |
+ Version min_version(min_profile_created_by_version); |
+ if (min_version.IsValid() && profile_version.CompareTo(min_version) < 0) { |
+ unsupported_extensions.insert(extension_id); |
+ VLOG(1) << "Skip installing (or uninstall) external extension: " |
+ << extension_id << " profile.created_by_version: " |
+ << profile_version.GetString() |
+ << " min_profile_created_by_version:" |
+ << min_profile_created_by_version; |
+ continue; |
+ } |
+ } |
+#endif // OS_CHROMEOS |
+ |
asargent_no_longer_on_chrome
2015/05/08 20:53:25
This method is getting really long, so it would be
Dmitry Polukhin
2015/05/09 07:36:50
Done. I just removed #ifdef there is nothing reall
|
std::string install_parameter; |
extension->GetString(kInstallParam, &install_parameter); |