Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(658)

Unified Diff: chrome/browser/policy/device_policy_cache.cc

Issue 6705031: Send policy blobs to session_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/device_policy_cache.cc
diff --git a/chrome/browser/policy/device_policy_cache.cc b/chrome/browser/policy/device_policy_cache.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f5a5129d8bbcdffb9b98a474cc44891fa0518988
--- /dev/null
+++ b/chrome/browser/policy/device_policy_cache.cc
@@ -0,0 +1,159 @@
+// Copyright (c) 2011 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 "chrome/browser/policy/device_policy_cache.h"
+
+#include "base/file_util.h"
+#include "base/logging.h"
+#include "base/task.h"
+#include "base/values.h"
+#include "content/browser/browser_thread.h"
+#include "chrome/browser/policy/configuration_policy_pref_store.h"
+#include "chrome/browser/policy/policy_map.h"
+#include "chrome/browser/policy/proto/cloud_policy.pb.h"
+#include "chrome/browser/policy/proto/device_management_constants.h"
+#include "chrome/browser/policy/proto/device_management_local.pb.h"
+#include "policy/configuration_policy_type.h"
+
+using google::protobuf::RepeatedPtrField;
+
+namespace policy {
+
+// Lives in <generated code output directory>/policy/cloud_policy_generated.cc.
+void DecodeIntegerValue(google::protobuf::int64 value);
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 We shouldn't make use of this here, since this cla
Jakob Kummerow 2011/03/28 13:53:53 Done (has become a moot point since we've scratche
+
+DevicePolicyCache::DevicePolicyCache()
+ : signed_settings_helper_(chromeos::SignedSettingsHelper::Get()) {
+}
+
+DevicePolicyCache::DevicePolicyCache(
+ chromeos::SignedSettingsHelper* signed_settings_helper)
+ : signed_settings_helper_(signed_settings_helper) {
+}
+
+DevicePolicyCache::~DevicePolicyCache() {
+ signed_settings_helper_->CancelCallback(this);
+}
+
+void DevicePolicyCache::Load() {
+ // TODO(jkummerow): check if we're unmanaged; if so, set is_unmanaged_ = true
+ // and return immediately.
+
+ signed_settings_helper_->StartRetrievePolicyOp(this);
+}
+
+void DevicePolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) {
+ std::string data;
+ if (!policy.SerializeToString(&data)) {
+ LOG(WARNING) << "Failed to serialize policy data.";
+ return;
+ }
+ signed_settings_helper_->StartStorePolicyOp(data, this);
+}
+
+void DevicePolicyCache::SetUnmanaged() {
+ LOG(WARNING) << "Tried to set DevicePolicyCache to 'unmanaged'!";
+ // This is not supported for DevicePolicyCache.
+}
+
+void DevicePolicyCache::OnRetrievePolicyCompleted(
+ chromeos::SignedSettings::ReturnCode code,
+ const std::string& value) {
+ DCHECK(CalledOnValidThread());
+ if (code != chromeos::SignedSettings::SUCCESS) {
+ // TODO(jkummerow): error handling?
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 Maybe make this comment a bit more elaborate, some
Jakob Kummerow 2011/03/28 13:53:53 Done.
+ return;
+ }
+ em::PolicyFetchResponse policy;
+ if (!policy.ParseFromArray(value.c_str(), value.size())) {
+ LOG(WARNING) << "Failed to parse policy blob fetched from SignedSettings!";
+ return;
+ }
+ SetPolicyInternal(policy);
+}
+
+void DevicePolicyCache::OnStorePolicyCompleted(
+ chromeos::SignedSettings::ReturnCode code) {
+ if (code != chromeos::SignedSettings::SUCCESS) {
+ // TODO(jkummerow): error handling?
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 Same here.
Jakob Kummerow 2011/03/28 13:53:53 Done.
+ return;
+ }
+ Load();
+}
+
+bool DevicePolicyCache::DecodePolicyData(const em::PolicyData& policy_data,
+ PolicyMap* mandatory,
+ PolicyMap* recommended) {
+ em::ChromeDeviceSettingsProto policy;
+ if (!policy.ParseFromString(policy_data.policy_value())) {
+ LOG(WARNING) << "Failed to parse ChromeDeviceSettingsProto.";
+ return false;
+ }
+ DecodeDevicePolicy(policy, mandatory, recommended);
+ return true;
+}
+
+// static
+void DevicePolicyCache::DecodeDevicePolicy(
+ const em::ChromeDeviceSettingsProto& policy,
+ PolicyMap* mandatory,
+ PolicyMap* recommended) {
+ DCHECK(mandatory);
+ // |recommended| isn't used yet; it is passed in for consistency with
+ // user-level policy, and for future extensibility.
+ if (policy.has_policy_refresh_rate()) {
+ const em::DevicePolicyRefreshRateProto& refresh_rate =
+ policy.policy_refresh_rate();
+ if (refresh_rate.has_policy_refresh_rate()) {
+ // TODO(jkummerow): define kPolicyDevicePolicyRefreshRate.
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 So why not do it?
Jakob Kummerow 2011/03/28 13:53:53 As discussed, let's remove all of this protobuf-de
+ // mandatory->Set(kPolicyDevicePolicyRefreshRate,
+ // DecodeIntegerValue(refresh_rate.policy_refresh_rate()));
+ }
+ }
+ if (policy.has_user_whitelist()) {
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 I guess we don't need the user whitelist in prefs
Jakob Kummerow 2011/03/28 13:53:53 As discussed, let's remove all of this protobuf-de
+ const em::UserWhitelistProto user_whitelist = policy.user_whitelist();
+ ListValue* list = new ListValue();
+ RepeatedPtrField<std::string>::const_iterator entry;
+ for (entry = user_whitelist.user_whitelist().begin();
+ entry != user_whitelist.user_whitelist().end(); ++entry) {
+ list->Append(Value::CreateStringValue(*entry));
+ }
+ if (!list->empty()) {
+ // TODO(jkummerow): define kPolicyUserWhitelist.
+ // mandatory->Set(kPolicyUserWhitelist, list);
+ }
+ // TODO(jkummerow): remove this when |mandatory->Set()| is enabled.
Mattias Nissler (ping if slow) 2011/03/24 18:55:57 If list is empty, you still need to delete!
Jakob Kummerow 2011/03/28 13:53:53 Good point. Solved by using a scoped_ptr.
+ delete list;
+ }
+ if (policy.has_guest_mode_enabled()) {
+ const em::GuestModeEnabledProto guest_mode = policy.guest_mode_enabled();
+ if (guest_mode.has_guest_mode_enabled()) {
+ // TODO(jkummerow): define kPolicyGuestModeEnabled.
+ // mandatory->Set(
+ // kPolicyGuestModeEnabled,
+ // Value::CreateBooleanValue(guest_mode.guest_mode_enabled()));
+ }
+ }
+ if (policy.has_device_proxy_settings()) {
+ const em::DeviceProxySettingsProto proxy = policy.device_proxy_settings();
+ if (proxy.has_proxy_mode()) {
+ Value* value = Value::CreateStringValue(proxy.proxy_mode());
+ mandatory->Set(kPolicyProxyMode, value);
+ }
+ if (proxy.has_proxy_server()) {
+ Value* value = Value::CreateStringValue(proxy.proxy_server());
+ mandatory->Set(kPolicyProxyServer, value);
+ }
+ if (proxy.has_proxy_pac_url()) {
+ Value* value = Value::CreateStringValue(proxy.proxy_pac_url());
+ mandatory->Set(kPolicyProxyPacUrl, value);
+ }
+ if (proxy.has_proxy_bypass_list()) {
+ Value* value = Value::CreateStringValue(proxy.proxy_bypass_list());
+ mandatory->Set(kPolicyProxyBypassList, value);
+ }
+ }
+}
+
+} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698