Index: chrome/browser/extensions/extension_management_unittest.cc |
diff --git a/chrome/browser/extensions/extension_management_unittest.cc b/chrome/browser/extensions/extension_management_unittest.cc |
index b5a9690dee6cf05efd9b3ad2ae3427723c7378a0..1db99a0f03cce66509943eb40a193d53dec78095 100644 |
--- a/chrome/browser/extensions/extension_management_unittest.cc |
+++ b/chrome/browser/extensions/extension_management_unittest.cc |
@@ -43,6 +43,7 @@ const char kExampleDictPreference[] = |
" \"abcdefghijklmnopabcdefghijklmnop\": {" // kTargetExtension |
" \"installation_mode\": \"allowed\"," |
" \"blocked_permissions\": [\"fileSystem\", \"bookmarks\"]," |
+ " \"minimum_version_required\": \"1.1.0\"," |
" }," |
" \"bcdefghijklmnopabcdefghijklmnopa\": {" // kTargetExtension2 |
" \"installation_mode\": \"force_installed\"," |
@@ -158,34 +159,54 @@ class ExtensionManagementServiceTest : public testing::Test { |
SetPref(true, pref_names::kExtensionManagement, parsed.release()); |
} |
+ // Wrapper of ExtensionManagement::GetInstallationMode, |id| and |
+ // |update_url| are used to construct an Extension for testing. |
ExtensionManagement::InstallationMode GetInstallationMode( |
const std::string& id, |
const std::string& update_url) { |
scoped_refptr<const Extension> extension = |
- CreateExtensionWithIdAndUpdateUrl(Manifest::UNPACKED, id, update_url); |
+ CreateExtension(Manifest::UNPACKED, "0.1", id, update_url); |
return extension_management_->GetInstallationMode(extension.get()); |
} |
+ // Wrapper of ExtensionManagement::GetBlockedAPIPermissions, |id| and |
+ // |update_url| are used to construct an Extension for testing. |
APIPermissionSet GetBlockedAPIPermissions(const std::string& id, |
const std::string& update_url) { |
scoped_refptr<const Extension> extension = |
- CreateExtensionWithIdAndUpdateUrl(Manifest::UNPACKED, id, update_url); |
+ CreateExtension(Manifest::UNPACKED, "0.1", id, update_url); |
return extension_management_->GetBlockedAPIPermissions(extension.get()); |
} |
+ // Wrapper of ExtensionManagement::CheckMinimumVersion, |id| and |
+ // |version| are used to construct an Extension for testing. |
+ bool CheckMinimumVersion(const std::string& id, const std::string& version) { |
+ scoped_refptr<const Extension> extension = |
+ CreateExtension(Manifest::UNPACKED, version, id, kNonExistingUpdateUrl); |
+ std::string minimum_version_required; |
+ bool ret = extension_management_->CheckMinimumVersion( |
+ extension.get(), &minimum_version_required); |
+ EXPECT_EQ(ret, minimum_version_required.empty()); |
+ EXPECT_EQ(ret, extension_management_->CheckMinimumVersion(extension.get(), |
+ nullptr)); |
+ return ret; |
+ } |
+ |
protected: |
scoped_ptr<TestingPrefServiceSimple> pref_service_; |
scoped_ptr<ExtensionManagement> extension_management_; |
private: |
- // Create an extension with specified |location|, |id| and |update_url|. |
- scoped_refptr<const Extension> CreateExtensionWithIdAndUpdateUrl( |
+ // Create an extension with specified |location|, |version|, |id| and |
+ // |update_url|. |
+ scoped_refptr<const Extension> CreateExtension( |
Manifest::Location location, |
+ const std::string& version, |
const std::string& id, |
const std::string& update_url) { |
base::DictionaryValue manifest_dict; |
manifest_dict.SetString(manifest_keys::kName, "test"); |
- manifest_dict.SetString(manifest_keys::kVersion, "0.1"); |
+ manifest_dict.SetString(manifest_keys::kVersion, version); |
manifest_dict.SetString(manifest_keys::kUpdateURL, update_url); |
std::string error; |
scoped_refptr<const Extension> extension = |
@@ -449,6 +470,11 @@ TEST_F(ExtensionManagementServiceTest, PreferenceParsing) { |
api_permission_set.insert(APIPermission::kBookmark); |
EXPECT_EQ(api_permission_set, |
GetBlockedAPIPermissionsByUpdateUrl(kExampleUpdateUrl)); |
+ |
+ // Verifies minimum version settings. |
+ EXPECT_FALSE(CheckMinimumVersion(kTargetExtension, "1.0.99")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "1.1")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "1.1.0.1")); |
} |
// Tests the handling of installation mode in case it's specified in both |
@@ -497,6 +523,24 @@ TEST_F(ExtensionManagementServiceTest, BlockedPermissionsConflictHandling) { |
GetBlockedAPIPermissions(kTargetExtension3, kExampleUpdateUrl)); |
} |
+// Tests the 'minimum_version_required' settings of extension management. |
+TEST_F(ExtensionManagementServiceTest, kMinimumVersionRequired) { |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "0.0")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "3.0.0")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "9999.0")); |
+ |
+ { |
+ PrefUpdater pref(pref_service_.get()); |
+ pref.SetMinimumVersionRequired(kTargetExtension, "3.0"); |
+ } |
+ |
+ EXPECT_FALSE(CheckMinimumVersion(kTargetExtension, "0.0")); |
+ EXPECT_FALSE(CheckMinimumVersion(kTargetExtension, "2.99")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "3.0.0")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "3.0.1")); |
+ EXPECT_TRUE(CheckMinimumVersion(kTargetExtension, "4.0")); |
+} |
+ |
// Tests functionality of new preference as to deprecate legacy |
// ExtensionInstallSources policy. |
TEST_F(ExtensionManagementServiceTest, NewInstallSources) { |