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

Side by Side Diff: chrome/browser/ui/webui/extensions/chromeos/kiosk_apps_handler.cc

Issue 15966004: cros: Move kiosk settings to extensions page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and remove temp flag 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/options/chromeos/kiosk_apps_handler.h" 5 #include "chrome/browser/ui/webui/extensions/chromeos/kiosk_apps_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/lazy_instance.h" 13 #include "base/chromeos/chromeos_version.h"
14 #include "base/command_line.h"
14 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
15 #include "base/observer_list.h"
16 #include "base/string_util.h"
17 #include "base/values.h" 16 #include "base/values.h"
18 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 17 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
18 #include "chrome/browser/chromeos/login/user_manager.h"
19 #include "chrome/browser/chromeos/settings/cros_settings.h"
20 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
19 #include "chrome/common/extensions/extension.h" 21 #include "chrome/common/extensions/extension.h"
20 #include "content/public/browser/browser_thread.h" 22 #include "chromeos/chromeos_switches.h"
21 #include "content/public/browser/web_ui.h" 23 #include "content/public/browser/web_ui.h"
24 #include "content/public/browser/web_ui_data_source.h"
22 #include "googleurl/src/gurl.h" 25 #include "googleurl/src/gurl.h"
23 #include "grit/chromium_strings.h" 26 #include "grit/chromium_strings.h"
24 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
25 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
26 #include "ui/webui/web_ui_util.h" 29 #include "ui/webui/web_ui_util.h"
27 30
28 namespace chromeos { 31 namespace chromeos {
29 namespace options {
30 32
31 namespace { 33 namespace {
32 34
33 // Populates app info dictionary with |app_data|. 35 // Populates app info dictionary with |app_data|.
34 void PopulateAppDict(const KioskAppManager::App& app_data, 36 void PopulateAppDict(const KioskAppManager::App& app_data,
35 base::DictionaryValue* app_dict) { 37 base::DictionaryValue* app_dict) {
36 std::string icon_url("chrome://theme/IDR_APP_DEFAULT_ICON"); 38 std::string icon_url("chrome://theme/IDR_APP_DEFAULT_ICON");
37 39
38 // TODO(xiyuan): Replace data url with a URLDataSource. 40 // TODO(xiyuan): Replace data url with a URLDataSource.
39 if (!app_data.icon.isNull()) 41 if (!app_data.icon.isNull())
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 : kiosk_app_manager_(KioskAppManager::Get()), 92 : kiosk_app_manager_(KioskAppManager::Get()),
91 initialized_(false) { 93 initialized_(false) {
92 kiosk_app_manager_->AddObserver(this); 94 kiosk_app_manager_->AddObserver(this);
93 } 95 }
94 96
95 KioskAppsHandler::~KioskAppsHandler() { 97 KioskAppsHandler::~KioskAppsHandler() {
96 kiosk_app_manager_->RemoveObserver(this); 98 kiosk_app_manager_->RemoveObserver(this);
97 } 99 }
98 100
99 void KioskAppsHandler::RegisterMessages() { 101 void KioskAppsHandler::RegisterMessages() {
100 web_ui()->RegisterMessageCallback("getKioskApps", 102 web_ui()->RegisterMessageCallback("getKioskAppSettings",
101 base::Bind(&KioskAppsHandler::HandleGetKioskApps, 103 base::Bind(&KioskAppsHandler::HandleGetKioskAppSettings,
102 base::Unretained(this))); 104 base::Unretained(this)));
103 web_ui()->RegisterMessageCallback("addKioskApp", 105 web_ui()->RegisterMessageCallback("addKioskApp",
104 base::Bind(&KioskAppsHandler::HandleAddKioskApp, 106 base::Bind(&KioskAppsHandler::HandleAddKioskApp,
105 base::Unretained(this))); 107 base::Unretained(this)));
106 web_ui()->RegisterMessageCallback("removeKioskApp", 108 web_ui()->RegisterMessageCallback("removeKioskApp",
107 base::Bind(&KioskAppsHandler::HandleRemoveKioskApp, 109 base::Bind(&KioskAppsHandler::HandleRemoveKioskApp,
108 base::Unretained(this))); 110 base::Unretained(this)));
109 web_ui()->RegisterMessageCallback("enableKioskAutoLaunch", 111 web_ui()->RegisterMessageCallback("enableKioskAutoLaunch",
110 base::Bind(&KioskAppsHandler::HandleEnableKioskAutoLaunch, 112 base::Bind(&KioskAppsHandler::HandleEnableKioskAutoLaunch,
111 base::Unretained(this))); 113 base::Unretained(this)));
112 web_ui()->RegisterMessageCallback("disableKioskAutoLaunch", 114 web_ui()->RegisterMessageCallback("disableKioskAutoLaunch",
113 base::Bind(&KioskAppsHandler::HandleDisableKioskAutoLaunch, 115 base::Bind(&KioskAppsHandler::HandleDisableKioskAutoLaunch,
114 base::Unretained(this))); 116 base::Unretained(this)));
117 web_ui()->RegisterMessageCallback("setDisableBailoutShortcut",
118 base::Bind(&KioskAppsHandler::HandleSetDisableBailoutShortcut,
119 base::Unretained(this)));
115 } 120 }
116 121
117 void KioskAppsHandler::GetLocalizedValues( 122 void KioskAppsHandler::GetLocalizedValues(content::WebUIDataSource* source) {
118 base::DictionaryValue* localized_strings) { 123 source->AddBoolean(
119 DCHECK(localized_strings); 124 "enableKiosk",
120 125 !CommandLine::ForCurrentProcess()->HasSwitch(
Dan Beam 2013/05/30 21:14:55 nit: indent off
xiyuan 2013/05/30 23:03:38 Done.
121 RegisterTitle(localized_strings, 126 chromeos::switches::kDisableAppMode) &&
122 "kioskOverlayTitle", 127 (chromeos::UserManager::Get()->IsCurrentUserOwner() ||
123 IDS_OPTIONS_KIOSK_OVERLAY_TITLE); 128 !base::chromeos::IsRunningOnChromeOS()));
124 129 source->AddString(
125 localized_strings->SetString( 130 "addKioskAppButton",
131 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ADD_KIOSK_APP_BUTTON));
132 source->AddString(
133 "kioskOverlayTitle",
134 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_OVERLAY_TITLE));
135 source->AddString(
126 "addKioskApp", 136 "addKioskApp",
127 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ADD_APP)); 137 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ADD_APP));
128 localized_strings->SetString( 138 source->AddString(
129 "kioskAppIdEditHint", 139 "kioskAppIdEditHint",
130 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ADD_APP_HINT)); 140 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ADD_APP_HINT));
131 localized_strings->SetString( 141 source->AddString(
132 "enableAutoLaunchButton", 142 "enableAutoLaunchButton",
133 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ENABLE_AUTO_LAUNCH)); 143 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_ENABLE_AUTO_LAUNCH));
134 localized_strings->SetString( 144 source->AddString(
135 "disableAutoLaunchButton", 145 "disableAutoLaunchButton",
136 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_DISABLE_AUTO_LAUNCH)); 146 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_DISABLE_AUTO_LAUNCH));
137 localized_strings->SetString( 147 source->AddString(
138 "autoLaunch", 148 "autoLaunch",
139 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_AUTO_LAUNCH)); 149 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_AUTO_LAUNCH));
140 localized_strings->SetString( 150 source->AddString(
141 "invalidApp", 151 "invalidApp",
142 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_INVALID_APP)); 152 l10n_util::GetStringUTF16(IDS_OPTIONS_KIOSK_INVALID_APP));
143 localized_strings->SetString( 153 source->AddString(
144 "kioskDiableBailoutShortcutLabel", 154 "kioskDiableBailoutShortcutLabel",
145 l10n_util::GetStringUTF16( 155 l10n_util::GetStringUTF16(
146 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_LABEL)); 156 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_LABEL));
147 localized_strings->SetString( 157 source->AddString(
148 "kioskDisableBailoutShortcutWarningBold", 158 "kioskDisableBailoutShortcutWarningBold",
149 l10n_util::GetStringUTF16( 159 l10n_util::GetStringUTF16(
150 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_WARNING_BOLD)); 160 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_WARNING_BOLD));
151 const string16 product_os_name = 161 const string16 product_os_name =
152 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME); 162 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME);
153 localized_strings->SetString( 163 source->AddString(
154 "kioskDisableBailoutShortcutWarning", 164 "kioskDisableBailoutShortcutWarning",
155 l10n_util::GetStringFUTF16( 165 l10n_util::GetStringFUTF16(
156 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_WARNING_FORMAT, 166 IDS_OPTIONS_KIOSK_DISABLE_BAILOUT_SHORTCUT_WARNING_FORMAT,
157 product_os_name)); 167 product_os_name));
158 localized_strings->SetString( 168 source->AddString(
159 "kioskDisableBailoutShortcutConfirm", 169 "kioskDisableBailoutShortcutConfirm",
160 l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL)); 170 l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL));
161 localized_strings->SetString( 171 source->AddString(
162 "kioskDisableBailoutShortcutCancel", 172 "kioskDisableBailoutShortcutCancel",
163 l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL)); 173 l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL));
174 source->AddString(
175 "done",
176 l10n_util::GetStringUTF16(IDS_DONE));
Dan Beam 2013/05/30 21:14:55 nit: this could probably fit in one line
xiyuan 2013/05/30 23:03:38 Done.
164 } 177 }
165 178
166 void KioskAppsHandler::OnKioskAppDataChanged(const std::string& app_id) { 179 void KioskAppsHandler::OnKioskAppDataChanged(const std::string& app_id) {
167 KioskAppManager::App app_data; 180 KioskAppManager::App app_data;
168 if (!kiosk_app_manager_->GetApp(app_id, &app_data)) 181 if (!kiosk_app_manager_->GetApp(app_id, &app_data))
169 return; 182 return;
170 183
171 base::DictionaryValue app_dict; 184 base::DictionaryValue app_dict;
172 PopulateAppDict(app_data, &app_dict); 185 PopulateAppDict(app_data, &app_dict);
173 186
174 web_ui()->CallJavascriptFunction("options.KioskAppsOverlay.updateApp", 187 web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.updateApp",
175 app_dict); 188 app_dict);
176 } 189 }
177 190
178 void KioskAppsHandler::OnKioskAppDataLoadFailure(const std::string& app_id) { 191 void KioskAppsHandler::OnKioskAppDataLoadFailure(const std::string& app_id) {
179 base::StringValue app_id_value(app_id); 192 base::StringValue app_id_value(app_id);
180 web_ui()->CallJavascriptFunction("options.KioskAppsOverlay.showError", 193 web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.showError",
181 app_id_value); 194 app_id_value);
182 } 195 }
183 196
184 void KioskAppsHandler::SendKioskApps() { 197 void KioskAppsHandler::OnKioskAppsSettingsChanged() {
198 SendKioskAppSettings();
199 }
200
201 void KioskAppsHandler::SendKioskAppSettings() {
185 if (!initialized_) 202 if (!initialized_)
186 return; 203 return;
187 204
205 bool enable_bailout_shortcut;
206 if (!CrosSettings::Get()->GetBoolean(
207 kAccountsPrefDeviceLocalAccountAutoLoginBailoutEnabled,
208 &enable_bailout_shortcut)) {
209 enable_bailout_shortcut = true;
210 }
211
212 base::DictionaryValue settings;
213 settings.SetBoolean("disableBailout", !enable_bailout_shortcut);
214
188 KioskAppManager::Apps apps; 215 KioskAppManager::Apps apps;
189 kiosk_app_manager_->GetApps(&apps); 216 kiosk_app_manager_->GetApps(&apps);
190 217
191 base::ListValue apps_list; 218 scoped_ptr<base::ListValue> apps_list(new base::ListValue);
192 for (size_t i = 0; i < apps.size(); ++i) { 219 for (size_t i = 0; i < apps.size(); ++i) {
193 const KioskAppManager::App& app_data = apps[i]; 220 const KioskAppManager::App& app_data = apps[i];
194 221
195 scoped_ptr<base::DictionaryValue> app_info(new base::DictionaryValue); 222 scoped_ptr<base::DictionaryValue> app_info(new base::DictionaryValue);
196 PopulateAppDict(app_data, app_info.get()); 223 PopulateAppDict(app_data, app_info.get());
197 apps_list.Append(app_info.release()); 224 apps_list->Append(app_info.release());
198 } 225 }
226 settings.SetWithoutPathExpansion("apps", apps_list.release());
199 227
200 web_ui()->CallJavascriptFunction("options.KioskAppsOverlay.setApps", 228 web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.setSettings",
201 apps_list); 229 settings);
202 } 230 }
203 231
204 void KioskAppsHandler::HandleGetKioskApps(const base::ListValue* args) { 232 void KioskAppsHandler::HandleGetKioskAppSettings(const base::ListValue* args) {
205 initialized_ = true; 233 initialized_ = true;
206 SendKioskApps(); 234 SendKioskAppSettings();
207 } 235 }
208 236
209 void KioskAppsHandler::HandleAddKioskApp(const base::ListValue* args) { 237 void KioskAppsHandler::HandleAddKioskApp(const base::ListValue* args) {
210 std::string input; 238 std::string input;
211 CHECK(args->GetString(0, &input)); 239 CHECK(args->GetString(0, &input));
212 240
213 std::string app_id; 241 std::string app_id;
214 if (!ExtractsAppIdFromInput(input, &app_id)) { 242 if (!ExtractsAppIdFromInput(input, &app_id)) {
215 OnKioskAppDataLoadFailure(input); 243 OnKioskAppDataLoadFailure(input);
216 return; 244 return;
(...skipping 22 matching lines...) Expand all
239 std::string app_id; 267 std::string app_id;
240 CHECK(args->GetString(0, &app_id)); 268 CHECK(args->GetString(0, &app_id));
241 269
242 std::string startup_app_id = kiosk_app_manager_->GetAutoLaunchApp(); 270 std::string startup_app_id = kiosk_app_manager_->GetAutoLaunchApp();
243 if (startup_app_id != app_id) 271 if (startup_app_id != app_id)
244 return; 272 return;
245 273
246 kiosk_app_manager_->SetAutoLaunchApp(""); 274 kiosk_app_manager_->SetAutoLaunchApp("");
247 } 275 }
248 276
249 } // namespace options 277 void KioskAppsHandler::HandleSetDisableBailoutShortcut(
278 const base::ListValue* args) {
279 bool disable_bailout_shortcut;
280 CHECK(args->GetBoolean(0, &disable_bailout_shortcut));
281
282 CrosSettings::Get()->SetBoolean(
283 kAccountsPrefDeviceLocalAccountAutoLoginBailoutEnabled,
284 !disable_bailout_shortcut);
285 }
286
250 } // namespace chromeos 287 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698