summaryrefslogtreecommitdiffstats
path: root/chromium/components/policy/core/common/policy_loader_mac.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/policy/core/common/policy_loader_mac.cc')
-rw-r--r--chromium/components/policy/core/common/policy_loader_mac.cc234
1 files changed, 0 insertions, 234 deletions
diff --git a/chromium/components/policy/core/common/policy_loader_mac.cc b/chromium/components/policy/core/common/policy_loader_mac.cc
deleted file mode 100644
index 6337898555a..00000000000
--- a/chromium/components/policy/core/common/policy_loader_mac.cc
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/policy/core/common/policy_loader_mac.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/file_util.h"
-#include "base/mac/foundation_util.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "base/path_service.h"
-#include "base/platform_file.h"
-#include "base/sequenced_task_runner.h"
-#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/policy_bundle.h"
-#include "components/policy/core/common/policy_load_status.h"
-#include "components/policy/core/common/policy_map.h"
-#include "components/policy/core/common/preferences_mac.h"
-#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,
- MacPreferences* preferences)
- : AsyncPolicyLoader(task_runner),
- preferences_(preferences),
- managed_policy_path_(managed_policy_path) {}
-
-PolicyLoaderMac::~PolicyLoaderMac() {}
-
-void PolicyLoaderMac::InitOnBackgroundThread() {
- if (!managed_policy_path_.empty()) {
- watcher_.Watch(
- managed_policy_path_, false,
- base::Bind(&PolicyLoaderMac::OnFileUpdated, base::Unretained(this)));
- }
-}
-
-scoped_ptr<PolicyBundle> PolicyLoaderMac::Load() {
- preferences_->AppSynchronize(kCFPreferencesCurrentApplication);
- scoped_ptr<PolicyBundle> bundle(new PolicyBundle());
-
- // Load Chrome's policy.
- PolicyMap& chrome_policy =
- bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()));
-
- PolicyLoadStatusSample status;
- bool policy_present = false;
- const Schema* schema =
- schema_map()->GetSchema(PolicyNamespace(POLICY_DOMAIN_CHROME, ""));
- for (Schema::Iterator it = schema->GetPropertiesIterator();
- !it.IsAtEnd(); it.Advance()) {
- base::ScopedCFTypeRef<CFStringRef> name(
- base::SysUTF8ToCFStringRef(it.key()));
- base::ScopedCFTypeRef<CFPropertyListRef> value(
- preferences_->CopyAppValue(name, kCFPreferencesCurrentApplication));
- if (!value.get())
- continue;
- policy_present = true;
- bool forced =
- preferences_->AppValueIsForced(name, kCFPreferencesCurrentApplication);
- 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
- status.Add(POLICY_LOAD_STATUS_PARSE_ERROR);
- }
-
- if (!policy_present)
- status.Add(POLICY_LOAD_STATUS_NO_POLICY);
-
- // Load policy for the registered components.
- LoadPolicyForDomain(POLICY_DOMAIN_EXTENSIONS, "extensions", bundle.get());
-
- return bundle.Pass();
-}
-
-base::Time PolicyLoaderMac::LastModificationTime() {
- base::PlatformFileInfo file_info;
- if (!base::GetFileInfo(managed_policy_path_, &file_info) ||
- file_info.is_directory) {
- return base::Time();
- }
-
- 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,
- PolicyBundle* bundle) {
- std::string id_prefix(base::mac::BaseBundleID());
- id_prefix.append(".").append(domain_name).append(".");
-
- const ComponentMap* components = schema_map()->GetComponents(domain);
- if (!components)
- return;
-
- for (ComponentMap::const_iterator it = components->begin();
- it != components->end(); ++it) {
- PolicyMap policy;
- LoadPolicyForComponent(id_prefix + it->first, it->second, &policy);
- if (!policy.empty())
- bundle->Get(PolicyNamespace(domain, it->first)).Swap(&policy);
- }
-}
-
-void PolicyLoaderMac::LoadPolicyForComponent(
- const std::string& bundle_id_string,
- const Schema& schema,
- PolicyMap* policy) {
- // TODO(joaodasilva): Extensions may be registered in a ComponentMap
- // without a schema, to allow a graceful update of the Legacy Browser Support
- // extension on Windows. Remove this check once that support is removed.
- if (!schema.valid())
- return;
-
- base::ScopedCFTypeRef<CFStringRef> bundle_id(
- base::SysUTF8ToCFStringRef(bundle_id_string));
- preferences_->AppSynchronize(bundle_id);
-
- for (Schema::Iterator it = schema.GetPropertiesIterator();
- !it.IsAtEnd(); it.Advance()) {
- base::ScopedCFTypeRef<CFStringRef> pref_name(
- base::SysUTF8ToCFStringRef(it.key()));
- base::ScopedCFTypeRef<CFPropertyListRef> value(
- preferences_->CopyAppValue(pref_name, bundle_id));
- if (!value.get())
- continue;
- bool forced =
- preferences_->AppValueIsForced(pref_name, bundle_id);
- PolicyLevel level = forced ? POLICY_LEVEL_MANDATORY :
- POLICY_LEVEL_RECOMMENDED;
- scoped_ptr<base::Value> policy_value(CreateValueFromProperty(value));
- if (policy_value) {
- policy->Set(it.key(), level, POLICY_SCOPE_USER,
- policy_value.release(), NULL);
- }
- }
-}
-
-void PolicyLoaderMac::OnFileUpdated(const base::FilePath& path, bool error) {
- if (!error)
- Reload(false);
-}
-
-} // namespace policy