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

Side by Side Diff: chrome/browser/chromeos/settings/kiosk_app_local_settings.cc

Issue 14306004: Put Kiosk App parameters into device settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 7 years, 7 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 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/settings/kiosk_app_local_settings.h"
6
7 #include <set>
8
9 #include "base/prefs/pref_service.h"
10 #include "base/string_util.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
13 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
14 #include "chrome/browser/prefs/scoped_user_pref_update.h"
15
16 namespace chromeos {
17
18 KioskAppLocalSettings::KioskAppLocalSettings(
19 const NotifyObserversCallback& notify_cb)
20 : CrosSettingsProvider(notify_cb),
21 default_auto_launch_(""),
22 default_disable_bailout_shortcut_(false) {
23 // Local state could be NULL in test.
24 if (g_browser_process->local_state())
25 ReadApps();
26 }
27
28 KioskAppLocalSettings::~KioskAppLocalSettings() {}
29
30 void KioskAppLocalSettings::ReadApps() {
31 apps_.Clear();
32
33 PrefService* local_state = g_browser_process->local_state();
34 const base::DictionaryValue* dict =
35 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
36 const base::DictionaryValue* apps_dict;
37 if (!dict->GetDictionary(KioskAppManager::kKeyApps, &apps_dict))
38 return;
39
40 for (base::DictionaryValue::Iterator it(*apps_dict);
41 !it.IsAtEnd();
42 it.Advance()) {
43 apps_.AppendString(it.key());
44 }
45 }
46
47 void KioskAppLocalSettings::WriteApps(const base::Value& value) {
48 std::set<std::string> old_apps;
49 for (base::ListValue::const_iterator it = apps_.begin();
50 it != apps_.end();
51 ++it) {
52 std::string app;
53 CHECK((*it)->GetAsString(&app));
54 old_apps.insert(app);
55 }
56
57 PrefService* local_state = g_browser_process->local_state();
58 DictionaryPrefUpdate dict_update(local_state,
59 KioskAppManager::kKioskDictionaryName);
60 base::DictionaryValue* apps_dict;
61 if (!dict_update->GetDictionary(KioskAppManager::kKeyApps, &apps_dict)) {
62 apps_dict = new base::DictionaryValue;
63 dict_update->Set(KioskAppManager::kKeyApps, apps_dict);
64 }
65
66 const base::ListValue* list_value;
67 CHECK(value.GetAsList(&list_value));
68
69 // Updates "apps" dictionary and |old_apps| set.
70 for (base::ListValue::const_iterator new_it = list_value->begin();
71 new_it != list_value->end();
72 ++new_it) {
73 std::string app;
74 CHECK((*new_it)->GetAsString(&app));
75
76 std::set<std::string>::iterator old_it = old_apps.find(app);
77 if (old_it != old_apps.end())
78 old_apps.erase(old_it);
79 else
80 apps_dict->Set(app, new base::DictionaryValue);
81 }
82
83 const std::string auto_launch_key =
84 std::string(kKioskAutoLaunch).substr(kKioskAppSettingsPrefixLength);
85 std::string auto_launch;
86 dict_update->GetString(auto_launch_key, &auto_launch);
87 bool reset_auto_launch = false;
88
89 // Removes remaining |old_apps|.
90 for (std::set<std::string>::iterator it = old_apps.begin();
91 it != old_apps.end();
92 ++it) {
93 if (*it == auto_launch)
94 reset_auto_launch = true;
95
96 apps_dict->Remove(*it, NULL);
97 }
98
99 if (reset_auto_launch) {
100 dict_update->Remove(auto_launch_key, NULL);
101 NotifyObservers(kKioskAutoLaunch);
102 }
103
104 // Updates cached value.
105 ReadApps();
106 }
107
108 bool KioskAppLocalSettings::IsEligibleAutoLaunchAppId(
109 const base::Value& value) const {
110 if (apps_.Find(value) != apps_.end())
111 return true;
112
113 // Empty string means no auto launch app and considered as an acceptable
114 // value for auto launch setting.
115 const base::StringValue empty("");
116 return value.Equals(&empty);
117 }
118
119 const base::Value* KioskAppLocalSettings::Get(const std::string& path) const {
120 DCHECK(HandlesSetting(path));
121
122 if (path == kKioskApps)
123 return &apps_;
124
125 if (path == kKioskAutoLaunch ||
126 path == kKioskDisableBailoutShortcut) {
127 PrefService* local_state = g_browser_process->local_state();
128 const base::DictionaryValue* dict =
129 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
130
131 const base::Value* value;
132 if (dict->Get(path.substr(kKioskAppSettingsPrefixLength), &value))
133 return value;
134 }
135
136 if (path == kKioskAutoLaunch)
137 return &default_auto_launch_;
138 if (path == kKioskDisableBailoutShortcut)
139 return &default_disable_bailout_shortcut_;
140
141 NOTREACHED() << "Try to get unknown kiosk app setting " << path;
142 return NULL;
143 }
144
145 CrosSettingsProvider::TrustedStatus KioskAppLocalSettings::PrepareTrustedValues(
146 const base::Closure& callback) {
147 return TRUSTED;
148 }
149
150 bool KioskAppLocalSettings::HandlesSetting(const std::string& path) const {
151 return StartsWithASCII(path, kKioskAppSettingsPrefix, true);
152 }
153
154 void KioskAppLocalSettings::DoSet(const std::string& path,
155 const base::Value& in_value) {
156 if (path == kKioskApps) {
157 WriteApps(in_value);
158 } else if (path == kKioskAutoLaunch ||
159 path == kKioskDisableBailoutShortcut) {
160 if (path == kKioskAutoLaunch && !IsEligibleAutoLaunchAppId(in_value))
161 return;
162
163 PrefService* local_state = g_browser_process->local_state();
164 DictionaryPrefUpdate dict_update(local_state,
165 KioskAppManager::kKioskDictionaryName);
166 dict_update->Set(path.substr(kKioskAppSettingsPrefixLength),
167 in_value.DeepCopy());
168 } else {
169 NOTREACHED() << "Try to set unknown kiosk app setting " << path;
170 return;
171 }
172
173 NotifyObservers(path);
174 }
175
176 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698