Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/policy/core/browser/configuration_policy_handler.h" | 5 #include "components/policy/core/browser/configuration_policy_handler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 | 144 |
| 145 value = std::min(std::max(value, min_), max_); | 145 value = std::min(std::max(value, min_), max_); |
| 146 } | 146 } |
| 147 | 147 |
| 148 if (output) | 148 if (output) |
| 149 *output = value; | 149 *output = value; |
| 150 return true; | 150 return true; |
| 151 } | 151 } |
| 152 | 152 |
| 153 | 153 |
| 154 // StringToIntEnumListPolicyHandler implementation ----------------------------- | 154 // StringMappingListPolicyHandler implementation ----------------------------- |
| 155 | 155 |
| 156 StringToIntEnumListPolicyHandler::StringToIntEnumListPolicyHandler( | 156 StringMappingListPolicyHandler::MappingEntry::MappingEntry( |
| 157 const char* policy_value, scoped_ptr<base::Value> map) | |
| 158 : enum_value(policy_value), mapped_value(map.release()) {} | |
|
Joao da Silva
2014/06/18 08:45:26
.release() works but I think it's more common to d
| |
| 159 | |
| 160 StringMappingListPolicyHandler::MappingEntry::~MappingEntry() {} | |
| 161 | |
| 162 StringMappingListPolicyHandler::StringMappingListPolicyHandler( | |
| 157 const char* policy_name, | 163 const char* policy_name, |
| 158 const char* pref_path, | 164 const char* pref_path, |
| 159 const MappingEntry* mapping_begin, | 165 GenerateMapCallback callback) |
| 160 const MappingEntry* mapping_end) | |
| 161 : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_LIST), | 166 : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_LIST), |
| 162 pref_path_(pref_path), | 167 pref_path_(pref_path), |
| 163 mapping_begin_(mapping_begin), | 168 map_getter_(callback) {} |
| 164 mapping_end_(mapping_end) {} | |
| 165 | 169 |
| 166 bool StringToIntEnumListPolicyHandler::CheckPolicySettings( | 170 StringMappingListPolicyHandler::~StringMappingListPolicyHandler() {} |
| 171 | |
| 172 bool StringMappingListPolicyHandler::CheckPolicySettings( | |
| 167 const PolicyMap& policies, | 173 const PolicyMap& policies, |
| 168 PolicyErrorMap* errors) { | 174 PolicyErrorMap* errors) { |
| 169 const base::Value* value; | 175 const base::Value* value; |
| 170 return CheckAndGetValue(policies, errors, &value) && | 176 return CheckAndGetValue(policies, errors, &value) && |
| 171 Convert(value, NULL, errors); | 177 Convert(value, NULL, errors); |
| 172 } | 178 } |
| 173 | 179 |
| 174 void StringToIntEnumListPolicyHandler::ApplyPolicySettings( | 180 void StringMappingListPolicyHandler::ApplyPolicySettings( |
| 175 const PolicyMap& policies, | 181 const PolicyMap& policies, |
| 176 PrefValueMap* prefs) { | 182 PrefValueMap* prefs) { |
| 177 if (!pref_path_) | 183 if (!pref_path_) |
| 178 return; | 184 return; |
| 179 const base::Value* value = policies.GetValue(policy_name()); | 185 const base::Value* value = policies.GetValue(policy_name()); |
| 180 scoped_ptr<base::ListValue> list(new base::ListValue()); | 186 scoped_ptr<base::ListValue> list(new base::ListValue()); |
| 181 if (value && Convert(value, list.get(), NULL)) | 187 if (value && Convert(value, list.get(), NULL)) |
| 182 prefs->SetValue(pref_path_, list.release()); | 188 prefs->SetValue(pref_path_, list.release()); |
| 183 } | 189 } |
| 184 | 190 |
| 185 bool StringToIntEnumListPolicyHandler::Convert(const base::Value* input, | 191 bool StringMappingListPolicyHandler::Convert(const base::Value* input, |
| 186 base::ListValue* output, | 192 base::ListValue* output, |
| 187 PolicyErrorMap* errors) { | 193 PolicyErrorMap* errors) { |
| 188 if (!input) | 194 if (!input) |
| 189 return true; | 195 return true; |
| 190 | 196 |
| 191 const base::ListValue* list_value = NULL; | 197 const base::ListValue* list_value = NULL; |
| 192 if (!input->GetAsList(&list_value)) { | 198 if (!input->GetAsList(&list_value)) { |
| 193 NOTREACHED(); | 199 NOTREACHED(); |
| 194 return false; | 200 return false; |
| 195 } | 201 } |
| 196 | 202 |
| 197 for (base::ListValue::const_iterator entry(list_value->begin()); | 203 for (base::ListValue::const_iterator entry(list_value->begin()); |
| 198 entry != list_value->end(); ++entry) { | 204 entry != list_value->end(); ++entry) { |
| 199 std::string entry_value; | 205 std::string entry_value; |
| 200 if (!(*entry)->GetAsString(&entry_value)) { | 206 if (!(*entry)->GetAsString(&entry_value)) { |
| 201 if (errors) { | 207 if (errors) { |
| 202 errors->AddError(policy_name(), | 208 errors->AddError(policy_name(), |
| 203 entry - list_value->begin(), | 209 entry - list_value->begin(), |
| 204 IDS_POLICY_TYPE_ERROR, | 210 IDS_POLICY_TYPE_ERROR, |
| 205 ValueTypeToString(base::Value::TYPE_STRING)); | 211 ValueTypeToString(base::Value::TYPE_STRING)); |
| 206 } | 212 } |
| 207 continue; | 213 continue; |
| 208 } | 214 } |
| 209 bool found = false; | 215 |
| 210 for (const MappingEntry* mapping_entry(mapping_begin_); | 216 scoped_ptr<base::Value> mapped_value = Map(entry_value); |
| 211 mapping_entry != mapping_end_; ++mapping_entry) { | 217 if (mapped_value) { |
| 212 if (mapping_entry->enum_value == entry_value) { | 218 if (output) |
| 213 found = true; | 219 output->Append(mapped_value.release()); |
| 214 if (output) | 220 } else { |
| 215 output->AppendInteger(mapping_entry->int_value); | |
| 216 break; | |
| 217 } | |
| 218 } | |
| 219 if (!found) { | |
| 220 if (errors) { | 221 if (errors) { |
| 221 errors->AddError(policy_name(), | 222 errors->AddError(policy_name(), |
| 222 entry - list_value->begin(), | 223 entry - list_value->begin(), |
| 223 IDS_POLICY_OUT_OF_RANGE_ERROR); | 224 IDS_POLICY_OUT_OF_RANGE_ERROR); |
| 224 } | 225 } |
| 225 } | 226 } |
| 226 } | 227 } |
| 227 | 228 |
| 228 return true; | 229 return true; |
| 229 } | 230 } |
| 230 | 231 |
| 232 scoped_ptr<base::Value> StringMappingListPolicyHandler::Map( | |
| 233 const std::string& entry_value) { | |
| 234 // Lazily generate the map of policy strings to mapped values. | |
| 235 if (map_.empty()) | |
| 236 map_getter_.Run(&map_); | |
| 237 | |
| 238 scoped_ptr<base::Value> return_value; | |
| 239 for (ScopedVector<MappingEntry>::const_iterator it = map_.begin(); | |
| 240 it != map_.end(); ++it) { | |
| 241 const MappingEntry* mapping_entry = *it; | |
| 242 if (mapping_entry->enum_value == entry_value) { | |
| 243 return_value = make_scoped_ptr(mapping_entry->mapped_value->DeepCopy()); | |
| 244 break; | |
| 245 } | |
| 246 } | |
| 247 return return_value.Pass(); | |
| 248 } | |
| 231 | 249 |
| 232 // IntRangePolicyHandler implementation ---------------------------------------- | 250 // IntRangePolicyHandler implementation ---------------------------------------- |
| 233 | 251 |
| 234 IntRangePolicyHandler::IntRangePolicyHandler(const char* policy_name, | 252 IntRangePolicyHandler::IntRangePolicyHandler(const char* policy_name, |
| 235 const char* pref_path, | 253 const char* pref_path, |
| 236 int min, | 254 int min, |
| 237 int max, | 255 int max, |
| 238 bool clamp) | 256 bool clamp) |
| 239 : IntRangePolicyHandlerBase(policy_name, min, max, clamp), | 257 : IntRangePolicyHandlerBase(policy_name, min, max, clamp), |
| 240 pref_path_(pref_path) { | 258 pref_path_(pref_path) { |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 for (handler = legacy_policy_handlers_.begin(); | 482 for (handler = legacy_policy_handlers_.begin(); |
| 465 handler != legacy_policy_handlers_.end(); | 483 handler != legacy_policy_handlers_.end(); |
| 466 ++handler) { | 484 ++handler) { |
| 467 if ((*handler)->CheckPolicySettings(policies, &scoped_errors)) | 485 if ((*handler)->CheckPolicySettings(policies, &scoped_errors)) |
| 468 (*handler)->ApplyPolicySettings(policies, prefs); | 486 (*handler)->ApplyPolicySettings(policies, prefs); |
| 469 } | 487 } |
| 470 } | 488 } |
| 471 } | 489 } |
| 472 | 490 |
| 473 } // namespace policy | 491 } // namespace policy |
| OLD | NEW |