Index: components/policy/core/common/policy_loader_mac.cc |
diff --git a/components/policy/core/common/policy_loader_mac.cc b/components/policy/core/common/policy_loader_mac.cc |
index 326db7eabc4bf3bb0a686c0305121fad3f28fcc4..91bda0902a566013584048587fc79cea9d5979be 100644 |
--- a/components/policy/core/common/policy_loader_mac.cc |
+++ b/components/policy/core/common/policy_loader_mac.cc |
@@ -16,6 +16,7 @@ |
#include "base/strings/sys_string_conversions.h" |
#include "base/values.h" |
#include "components/policy/core/common/external_data_fetcher.h" |
+#include "components/policy/core/common/mac_util.h" |
#include "components/policy/core/common/policy_bundle.h" |
#include "components/policy/core/common/policy_load_status.h" |
#include "components/policy/core/common/policy_map.h" |
@@ -23,41 +24,10 @@ |
#include "components/policy/core/common/schema.h" |
#include "components/policy/core/common/schema_map.h" |
-using base::mac::CFCast; |
using base::ScopedCFTypeRef; |
namespace policy { |
-namespace { |
- |
-// Callback function for CFDictionaryApplyFunction. |key| and |value| are an |
-// entry of the CFDictionary that should be converted into an equivalent entry |
-// in the DictionaryValue in |context|. |
-void DictionaryEntryToValue(const void* key, const void* value, void* context) { |
- if (CFStringRef cf_key = CFCast<CFStringRef>(key)) { |
- base::Value* converted = |
- PolicyLoaderMac::CreateValueFromProperty( |
- static_cast<CFPropertyListRef>(value)); |
- if (converted) { |
- const std::string string = base::SysCFStringRefToUTF8(cf_key); |
- static_cast<base::DictionaryValue *>(context)->Set(string, converted); |
- } |
- } |
-} |
- |
-// Callback function for CFArrayApplyFunction. |value| is an entry of the |
-// CFArray that should be converted into an equivalent entry in the ListValue |
-// in |context|. |
-void ArrayEntryToValue(const void* value, void* context) { |
- base::Value* converted = |
- PolicyLoaderMac::CreateValueFromProperty( |
- static_cast<CFPropertyListRef>(value)); |
- if (converted) |
- static_cast<base::ListValue *>(context)->Append(converted); |
-} |
- |
-} // namespace |
- |
PolicyLoaderMac::PolicyLoaderMac( |
scoped_refptr<base::SequencedTaskRunner> task_runner, |
const base::FilePath& managed_policy_path, |
@@ -102,11 +72,13 @@ scoped_ptr<PolicyBundle> PolicyLoaderMac::Load() { |
PolicyLevel level = forced ? POLICY_LEVEL_MANDATORY : |
POLICY_LEVEL_RECOMMENDED; |
// TODO(joaodasilva): figure the policy scope. |
- base::Value* policy = CreateValueFromProperty(value); |
- if (policy) |
- chrome_policy.Set(it.key(), level, POLICY_SCOPE_USER, policy, NULL); |
- else |
+ scoped_ptr<base::Value> policy = PropertyToValue(value); |
+ if (policy) { |
+ chrome_policy.Set( |
+ it.key(), level, POLICY_SCOPE_USER, policy.release(), NULL); |
+ } else { |
status.Add(POLICY_LOAD_STATUS_PARSE_ERROR); |
+ } |
} |
if (!policy_present) |
@@ -128,50 +100,6 @@ base::Time PolicyLoaderMac::LastModificationTime() { |
return file_info.last_modified; |
} |
-// static |
-base::Value* PolicyLoaderMac::CreateValueFromProperty( |
- CFPropertyListRef property) { |
- if (CFCast<CFNullRef>(property)) |
- return base::Value::CreateNullValue(); |
- |
- if (CFBooleanRef boolean = CFCast<CFBooleanRef>(property)) |
- return base::Value::CreateBooleanValue(CFBooleanGetValue(boolean)); |
- |
- if (CFNumberRef number = CFCast<CFNumberRef>(property)) { |
- // CFNumberGetValue() converts values implicitly when the conversion is not |
- // lossy. Check the type before trying to convert. |
- if (CFNumberIsFloatType(number)) { |
- double double_value; |
- if (CFNumberGetValue(number, kCFNumberDoubleType, &double_value)) |
- return base::Value::CreateDoubleValue(double_value); |
- } else { |
- int int_value; |
- if (CFNumberGetValue(number, kCFNumberIntType, &int_value)) |
- return base::Value::CreateIntegerValue(int_value); |
- } |
- } |
- |
- if (CFStringRef string = CFCast<CFStringRef>(property)) |
- return base::Value::CreateStringValue(base::SysCFStringRefToUTF8(string)); |
- |
- if (CFDictionaryRef dict = CFCast<CFDictionaryRef>(property)) { |
- base::DictionaryValue* dict_value = new base::DictionaryValue(); |
- CFDictionaryApplyFunction(dict, DictionaryEntryToValue, dict_value); |
- return dict_value; |
- } |
- |
- if (CFArrayRef array = CFCast<CFArrayRef>(property)) { |
- base::ListValue* list_value = new base::ListValue(); |
- CFArrayApplyFunction(array, |
- CFRangeMake(0, CFArrayGetCount(array)), |
- ArrayEntryToValue, |
- list_value); |
- return list_value; |
- } |
- |
- return NULL; |
-} |
- |
void PolicyLoaderMac::LoadPolicyForDomain( |
PolicyDomain domain, |
const std::string& domain_name, |
@@ -218,7 +146,7 @@ void PolicyLoaderMac::LoadPolicyForComponent( |
preferences_->AppValueIsForced(pref_name, bundle_id); |
PolicyLevel level = forced ? POLICY_LEVEL_MANDATORY : |
POLICY_LEVEL_RECOMMENDED; |
- scoped_ptr<base::Value> policy_value(CreateValueFromProperty(value)); |
+ scoped_ptr<base::Value> policy_value = PropertyToValue(value); |
if (policy_value) { |
policy->Set(it.key(), level, POLICY_SCOPE_USER, |
policy_value.release(), NULL); |