Index: chrome/browser/extensions/extension_management_test_util.cc |
diff --git a/chrome/browser/extensions/extension_management_test_util.cc b/chrome/browser/extensions/extension_management_test_util.cc |
index e60f9fc22bdad25603b132f790d4663362b6b5be..930208db63c9af092d468dc1ee1dfbb669900303 100644 |
--- a/chrome/browser/extensions/extension_management_test_util.cc |
+++ b/chrome/browser/extensions/extension_management_test_util.cc |
@@ -4,7 +4,16 @@ |
#include "chrome/browser/extensions/extension_management_test_util.h" |
+#include <string> |
+ |
#include "components/crx_file/id_util.h" |
+#include "components/policy/core/common/configuration_policy_provider.h" |
+#include "components/policy/core/common/mock_configuration_policy_provider.h" |
+#include "components/policy/core/common/policy_bundle.h" |
+#include "components/policy/core/common/policy_map.h" |
+#include "components/policy/core/common/policy_namespace.h" |
+#include "components/policy/core/common/policy_types.h" |
+#include "policy/policy/policy_constants.h" |
namespace extensions { |
@@ -12,13 +21,13 @@ namespace schema = schema_constants; |
namespace { |
+const char kInstallSourcesPath[] = "*.install_sources"; |
+const char kAllowedTypesPath[] = "*.allowed_types"; |
+ |
std::string make_path(std::string a, std::string b) { |
return a + "." + b; |
} |
-const char kInstallSourcesPath[] = "*.install_sources"; |
-const char kAllowedTypesPath[] = "*.allowed_types"; |
- |
} // namespace |
ExtensionManagementPrefUpdaterBase::ExtensionManagementPrefUpdaterBase() { |
@@ -27,6 +36,8 @@ ExtensionManagementPrefUpdaterBase::ExtensionManagementPrefUpdaterBase() { |
ExtensionManagementPrefUpdaterBase::~ExtensionManagementPrefUpdaterBase() { |
} |
+// Helper functions for per extension settings --------------------------------- |
+ |
void ExtensionManagementPrefUpdaterBase::UnsetPerExtensionSettings( |
const ExtensionId& id) { |
DCHECK(crx_file::id_util::IdIsValid(id)); |
@@ -39,6 +50,8 @@ void ExtensionManagementPrefUpdaterBase::ClearPerExtensionSettings( |
pref_->SetWithoutPathExpansion(id, new base::DictionaryValue()); |
} |
+// Helper functions for 'installation_mode' manipulation ----------------------- |
+ |
void ExtensionManagementPrefUpdaterBase::SetBlacklistedByDefault(bool value) { |
pref_->SetString(make_path(schema::kWildcard, schema::kInstallationMode), |
value ? schema::kBlocked : schema::kAllowed); |
@@ -77,6 +90,8 @@ void ExtensionManagementPrefUpdaterBase::SetIndividualExtensionAutoInstalled( |
pref_->SetString(make_path(id, schema::kUpdateUrl), update_url); |
} |
+// Helper functions for 'install_sources' manipulation ------------------------- |
+ |
void ExtensionManagementPrefUpdaterBase::UnsetInstallSources() { |
pref_->Remove(kInstallSourcesPath, NULL); |
} |
@@ -95,6 +110,8 @@ void ExtensionManagementPrefUpdaterBase::RemoveInstallSource( |
RemoveStringFromList(kInstallSourcesPath, install_source); |
} |
+// Helper functions for 'allowed_types' manipulation --------------------------- |
+ |
void ExtensionManagementPrefUpdaterBase::UnsetAllowedTypes() { |
pref_->Remove(kAllowedTypesPath, NULL); |
} |
@@ -108,10 +125,76 @@ void ExtensionManagementPrefUpdaterBase::AddAllowedType( |
AddStringToList(kAllowedTypesPath, allowed_type); |
} |
+void ExtensionManagementPrefUpdaterBase::RemoveAllowedType( |
+ const std::string& allowed_type) { |
+ RemoveStringFromList(kAllowedTypesPath, allowed_type); |
+} |
+ |
+// Helper functions for 'blocked_permissions' manipulation --------------------- |
+ |
+void ExtensionManagementPrefUpdaterBase::UnsetBlockedPermissions( |
+ const std::string& prefix) { |
+ DCHECK(prefix == schema::kWildcard || crx_file::id_util::IdIsValid(prefix)); |
+ pref_->Remove(make_path(prefix, schema::kBlockedPermissions), NULL); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::ClearBlockedPermissions( |
+ const std::string& prefix) { |
+ DCHECK(prefix == schema::kWildcard || crx_file::id_util::IdIsValid(prefix)); |
+ ClearList(make_path(prefix, schema::kBlockedPermissions)); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::AddBlockedPermission( |
+ const std::string& prefix, |
+ const std::string& permission) { |
+ DCHECK(prefix == schema::kWildcard || crx_file::id_util::IdIsValid(prefix)); |
+ AddStringToList(make_path(prefix, schema::kBlockedPermissions), permission); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::RemoveBlockedPermission( |
+ const std::string& prefix, |
+ const std::string& permission) { |
+ DCHECK(prefix == schema::kWildcard || crx_file::id_util::IdIsValid(prefix)); |
+ RemoveStringFromList(make_path(prefix, schema::kBlockedPermissions), |
+ permission); |
+} |
+ |
+// Helper functions for 'allowed_permissions' manipulation --------------------- |
+ |
+void ExtensionManagementPrefUpdaterBase::UnsetAllowedPermissions( |
+ const std::string& id) { |
+ DCHECK(crx_file::id_util::IdIsValid(id)); |
+ pref_->Remove(make_path(id, schema::kAllowedPermissions), NULL); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::ClearAllowedPermissions( |
+ const std::string& id) { |
+ DCHECK(crx_file::id_util::IdIsValid(id)); |
+ ClearList(make_path(id, schema::kAllowedPermissions)); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::AddAllowedPermission( |
+ const std::string& id, |
+ const std::string& permission) { |
+ DCHECK(crx_file::id_util::IdIsValid(id)); |
+ AddStringToList(make_path(id, schema::kAllowedPermissions), permission); |
+} |
+ |
+void ExtensionManagementPrefUpdaterBase::RemoveAllowedPermission( |
+ const std::string& id, |
+ const std::string& permission) { |
+ DCHECK(crx_file::id_util::IdIsValid(id)); |
+ RemoveStringFromList(make_path(id, schema::kAllowedPermissions), permission); |
+} |
+ |
+// Expose a read-only preference to user --------------------------------------- |
+ |
const base::DictionaryValue* ExtensionManagementPrefUpdaterBase::GetPref() { |
return pref_.get(); |
} |
+// Private section functions --------------------------------------------------- |
+ |
void ExtensionManagementPrefUpdaterBase::SetPref(base::DictionaryValue* pref) { |
pref_.reset(pref); |
} |
@@ -121,11 +204,6 @@ ExtensionManagementPrefUpdaterBase::TakePref() { |
return pref_.Pass(); |
} |
-void ExtensionManagementPrefUpdaterBase::RemoveAllowedType( |
- const std::string& allowd_type) { |
- RemoveStringFromList(kAllowedTypesPath, allowd_type); |
-} |
- |
void ExtensionManagementPrefUpdaterBase::ClearList(const std::string& path) { |
pref_->Set(path, new base::ListValue()); |
} |
@@ -149,4 +227,29 @@ void ExtensionManagementPrefUpdaterBase::RemoveStringFromList( |
CHECK(list_value->Remove(base::StringValue(str), NULL)); |
} |
+// ExtensionManagementPolicyUpdater -------------------------------------------- |
+ |
+ExtensionManagementPolicyUpdater::ExtensionManagementPolicyUpdater( |
+ policy::MockConfigurationPolicyProvider* policy_provider) |
+ : provider_(policy_provider), policies_(new policy::PolicyBundle) { |
+ policies_->CopyFrom(provider_->policies()); |
+ const base::Value* policy_value = |
+ policies_->Get(policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, |
+ std::string())) |
+ .GetValue(policy::key::kExtensionSettings); |
+ const base::DictionaryValue* dict_value = nullptr; |
+ if (policy_value && policy_value->GetAsDictionary(&dict_value)) |
+ SetPref(dict_value->DeepCopy()); |
+ else |
+ SetPref(new base::DictionaryValue); |
+} |
+ |
+ExtensionManagementPolicyUpdater::~ExtensionManagementPolicyUpdater() { |
+ policies_->Get(policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, |
+ std::string())) |
+ .Set(policy::key::kExtensionSettings, policy::POLICY_LEVEL_MANDATORY, |
+ policy::POLICY_SCOPE_USER, TakePref().release(), nullptr); |
+ provider_->UpdatePolicy(policies_.Pass()); |
+} |
+ |
} // namespace extensions |