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

Side by Side Diff: chrome/browser/chromeos/policy/login_profile_policy_provider.cc

Issue 16658015: Add device policies to control accessibility settings on the login screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed leaky tests. Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/policy/login_profile_policy_provider.h"
6
7 #include <string>
8
9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/values.h"
12 #include "chrome/browser/policy/policy_bundle.h"
13 #include "chrome/browser/policy/policy_map.h"
14 #include "chrome/browser/policy/policy_types.h"
15 #include "policy/policy_constants.h"
16
17 namespace policy {
18
19 namespace {
20
21 // Applies the value of |device_policy| in |device_policy_map| as the
22 // recommended value of |user_policy| in |user_policy_map|. If the value of
23 // |device_policy| is unset, does nothing.
24 void ApplyDevicePolicy(const std::string& device_policy,
25 const std::string& user_policy,
26 const PolicyMap& device_policy_map,
27 PolicyMap* user_policy_map) {
28 const base::Value* value = device_policy_map.GetValue(device_policy);
29 if (value) {
30 user_policy_map->Set(user_policy,
31 POLICY_LEVEL_RECOMMENDED,
32 POLICY_SCOPE_USER,
33 value->DeepCopy());
34 }
35 }
36
37 } // namespace
38
39 LoginProfilePolicyProvider::LoginProfilePolicyProvider(
40 PolicyService* device_policy_service)
41 : device_policy_service_(device_policy_service),
42 waiting_for_device_policy_refresh_(false),
43 weak_factory_(this) {
44 }
45
46 LoginProfilePolicyProvider::~LoginProfilePolicyProvider() {
47 }
48
49 void LoginProfilePolicyProvider::Init() {
50 ConfigurationPolicyProvider::Init();
51 device_policy_service_->AddObserver(POLICY_DOMAIN_CHROME, this);
52 if (device_policy_service_->IsInitializationComplete(POLICY_DOMAIN_CHROME))
53 UpdateFromDevicePolicy();
54 }
55
56 void LoginProfilePolicyProvider::Shutdown() {
57 device_policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, this);
58 weak_factory_.InvalidateWeakPtrs();
59 ConfigurationPolicyProvider::Shutdown();
60 }
61
62 void LoginProfilePolicyProvider::RefreshPolicies() {
63 waiting_for_device_policy_refresh_ = true;
64 weak_factory_.InvalidateWeakPtrs();
65 device_policy_service_->RefreshPolicies(base::Bind(
66 &LoginProfilePolicyProvider::OnDevicePolicyRefreshDone,
67 weak_factory_.GetWeakPtr()));
68 }
69
70 void LoginProfilePolicyProvider::OnPolicyUpdated(const PolicyNamespace& ns,
71 const PolicyMap& previous,
72 const PolicyMap& current) {
73 if (ns == PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
74 UpdateFromDevicePolicy();
75 }
76
77 void LoginProfilePolicyProvider::OnPolicyServiceInitialized(
78 PolicyDomain domain) {
79 if (domain == POLICY_DOMAIN_CHROME)
80 UpdateFromDevicePolicy();
81 }
82
83 void LoginProfilePolicyProvider::OnDevicePolicyRefreshDone() {
84 waiting_for_device_policy_refresh_ = false;
85 UpdateFromDevicePolicy();
86 }
87
88 void LoginProfilePolicyProvider::UpdateFromDevicePolicy() {
89 // If a policy refresh is in progress, wait for it to finish.
90 if (waiting_for_device_policy_refresh_)
91 return;
92
93 const PolicyNamespace chrome_namespaces(POLICY_DOMAIN_CHROME, std::string());
94 const PolicyMap& device_policy_map =
95 device_policy_service_->GetPolicies(chrome_namespaces);
96 scoped_ptr<PolicyBundle> bundle(new PolicyBundle);
97 PolicyMap& user_policy_map = bundle->Get(chrome_namespaces);
98
99 ApplyDevicePolicy(key::kDeviceLoginScreenDefaultLargeCursorEnabled,
100 key::kLargeCursorEnabled,
101 device_policy_map, &user_policy_map);
102 ApplyDevicePolicy(key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
103 key::kSpokenFeedbackEnabled,
104 device_policy_map, &user_policy_map);
105 ApplyDevicePolicy(key::kDeviceLoginScreenDefaultHighContrastEnabled,
106 key::kHighContrastEnabled,
107 device_policy_map, &user_policy_map);
108 ApplyDevicePolicy(key::kDeviceLoginScreenDefaultScreenMagnifierType,
109 key::kScreenMagnifierType,
110 device_policy_map, &user_policy_map);
111 UpdatePolicy(bundle.Pass());
112 }
113
114 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698