| Index: chrome/browser/policy/configuration_policy_handler.cc
|
| diff --git a/chrome/browser/policy/configuration_policy_handler.cc b/chrome/browser/policy/configuration_policy_handler.cc
|
| index a8e1122fc19142e1d9cd7efbfb5b66503776da56..7dd32ddc168511e187a19014b2d251061e8a5901 100644
|
| --- a/chrome/browser/policy/configuration_policy_handler.cc
|
| +++ b/chrome/browser/policy/configuration_policy_handler.cc
|
| @@ -26,6 +26,7 @@
|
| #include "chrome/browser/search_engines/template_url.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "chrome/common/content_settings.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "grit/generated_resources.h"
|
| @@ -204,6 +205,80 @@ bool TypeCheckingPolicyHandler::CheckAndGetValue(const PolicyMap& policies,
|
| return true;
|
| }
|
|
|
| +// ExtensionListPolicyHandler implementation -----------------------------------
|
| +
|
| +ExtensionListPolicyHandler::ExtensionListPolicyHandler(const char* policy_name,
|
| + const char* pref_path,
|
| + bool allow_wildcards)
|
| + : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_LIST),
|
| + pref_path_(pref_path),
|
| + allow_wildcards_(allow_wildcards) {}
|
| +
|
| +ExtensionListPolicyHandler::~ExtensionListPolicyHandler() {}
|
| +
|
| +bool ExtensionListPolicyHandler::CheckPolicySettings(
|
| + const PolicyMap& policies,
|
| + PolicyErrorMap* errors) {
|
| + return CheckAndGetList(policies, errors, NULL);
|
| +}
|
| +
|
| +void ExtensionListPolicyHandler::ApplyPolicySettings(
|
| + const PolicyMap& policies,
|
| + PrefValueMap* prefs) {
|
| + const Value* value = policies.GetValue(policy_name());
|
| + if (value)
|
| + prefs->SetValue(pref_path(), value->DeepCopy());
|
| +}
|
| +
|
| +const char* ExtensionListPolicyHandler::pref_path() const {
|
| + return pref_path_;
|
| +}
|
| +
|
| +bool ExtensionListPolicyHandler::CheckAndGetList(
|
| + const PolicyMap& policies,
|
| + PolicyErrorMap* errors,
|
| + const base::ListValue** extension_ids) {
|
| + if (extension_ids)
|
| + *extension_ids = NULL;
|
| +
|
| + const base::Value* value = NULL;
|
| + if (!CheckAndGetValue(policies, errors, &value))
|
| + return false;
|
| +
|
| + if (!value)
|
| + return true;
|
| +
|
| + const base::ListValue* list_value = NULL;
|
| + if (!value->GetAsList(&list_value)) {
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +
|
| + // Check that the list contains valid extension ID strings only.
|
| + for (base::ListValue::const_iterator entry(list_value->begin());
|
| + entry != list_value->end(); ++entry) {
|
| + std::string id;
|
| + if (!(*entry)->GetAsString(&id)) {
|
| + errors->AddError(policy_name(),
|
| + entry - list_value->begin(),
|
| + IDS_POLICY_TYPE_ERROR,
|
| + ValueTypeToString(base::Value::TYPE_STRING));
|
| + return false;
|
| + }
|
| + if (!(allow_wildcards_ && id == "*") && !Extension::IdIsValid(id)) {
|
| + errors->AddError(policy_name(),
|
| + entry - list_value->begin(),
|
| + IDS_POLICY_VALUE_FORMAT_ERROR);
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + if (extension_ids)
|
| + *extension_ids = list_value;
|
| +
|
| + return true;
|
| +}
|
| +
|
| // SimplePolicyHandler implementation ------------------------------------------
|
|
|
| SimplePolicyHandler::SimplePolicyHandler(
|
|
|