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

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc

Issue 156493004: Add the ability to show a demo app on OOBE if a machine is derelict. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chromeos/login/network_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h"
9 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
11 #include "base/prefs/pref_registry_simple.h"
12 #include "base/prefs/pref_service.h"
13 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
11 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h" 16 #include "base/values.h"
13 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
14 #include "chrome/browser/chromeos/base/locale_util.h" 19 #include "chrome/browser/chromeos/base/locale_util.h"
20 #include "chrome/browser/chromeos/idle_detector.h"
15 #include "chrome/browser/chromeos/input_method/input_method_util.h" 21 #include "chrome/browser/chromeos/input_method/input_method_util.h"
16 #include "chrome/browser/chromeos/login/input_events_blocker.h" 22 #include "chrome/browser/chromeos/login/input_events_blocker.h"
23 #include "chrome/browser/chromeos/login/login_display_host_impl.h"
17 #include "chrome/browser/chromeos/login/screens/core_oobe_actor.h" 24 #include "chrome/browser/chromeos/login/screens/core_oobe_actor.h"
18 #include "chrome/browser/chromeos/system/input_device_settings.h" 25 #include "chrome/browser/chromeos/system/input_device_settings.h"
19 #include "chrome/browser/chromeos/system/timezone_util.h" 26 #include "chrome/browser/chromeos/system/timezone_util.h"
20 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 27 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
21 #include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler .h" 28 #include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler .h"
29 #include "chrome/common/pref_names.h"
30 #include "chromeos/chromeos_switches.h"
22 #include "chromeos/ime/input_method_manager.h" 31 #include "chromeos/ime/input_method_manager.h"
23 #include "grit/chromium_strings.h" 32 #include "grit/chromium_strings.h"
24 #include "grit/generated_resources.h" 33 #include "grit/generated_resources.h"
25 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
26 #include "ui/gfx/rect.h" 35 #include "ui/gfx/rect.h"
27 #include "ui/views/layout/fill_layout.h" 36 #include "ui/views/layout/fill_layout.h"
28 #include "ui/views/widget/widget.h" 37 #include "ui/views/widget/widget.h"
29 38
30 namespace { 39 namespace {
31 40
32 const char kJsScreenPath[] = "login.NetworkScreen"; 41 const char kJsScreenPath[] = "login.NetworkScreen";
33 42
34 // JS API callbacks names. 43 // JS API callbacks names.
35 const char kJsApiNetworkOnExit[] = "networkOnExit"; 44 const char kJsApiNetworkOnExit[] = "networkOnExit";
36 const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged"; 45 const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged";
37 const char kJsApiNetworkOnInputMethodChanged[] = "networkOnInputMethodChanged"; 46 const char kJsApiNetworkOnInputMethodChanged[] = "networkOnInputMethodChanged";
38 const char kJsApiNetworkOnTimezoneChanged[] = "networkOnTimezoneChanged"; 47 const char kJsApiNetworkOnTimezoneChanged[] = "networkOnTimezoneChanged";
39 48
40 const char kUSlayout[] = "xkb:us::eng"; 49 const char kUSlayout[] = "xkb:us::eng";
41 50
51 const int64 kDerelectDetectionTimeoutSeconds = 8 * 60 * 60; // 8 hours.
52 const int64 kDerelectIdleTimeoutSeconds = 5 * 60; // 5 minutes.
53
42 } // namespace 54 } // namespace
43 55
44 namespace chromeos { 56 namespace chromeos {
45 57
46 // NetworkScreenHandler, public: ----------------------------------------------- 58 // NetworkScreenHandler, public: -----------------------------------------------
47 59
48 NetworkScreenHandler::NetworkScreenHandler(CoreOobeActor* core_oobe_actor) 60 NetworkScreenHandler::NetworkScreenHandler(CoreOobeActor* core_oobe_actor)
49 : BaseScreenHandler(kJsScreenPath), 61 : BaseScreenHandler(kJsScreenPath),
50 screen_(NULL), 62 screen_(NULL),
51 core_oobe_actor_(core_oobe_actor), 63 core_oobe_actor_(core_oobe_actor),
52 is_continue_enabled_(false), 64 is_continue_enabled_(false),
65 is_derelict_(false),
53 show_on_init_(false), 66 show_on_init_(false),
54 weak_ptr_factory_(this) { 67 weak_ptr_factory_(this) {
55 DCHECK(core_oobe_actor_); 68 DCHECK(core_oobe_actor_);
69 SetupTimeouts();
56 } 70 }
57 71
58 NetworkScreenHandler::~NetworkScreenHandler() { 72 NetworkScreenHandler::~NetworkScreenHandler() {
59 if (screen_) 73 if (screen_)
60 screen_->OnActorDestroyed(this); 74 screen_->OnActorDestroyed(this);
61 } 75 }
62 76
63 // NetworkScreenHandler, NetworkScreenActor implementation: -------------------- 77 // NetworkScreenHandler, NetworkScreenActor implementation: --------------------
64 78
65 void NetworkScreenHandler::SetDelegate(NetworkScreenActor::Delegate* screen) { 79 void NetworkScreenHandler::SetDelegate(NetworkScreenActor::Delegate* screen) {
66 screen_ = screen; 80 screen_ = screen;
67 } 81 }
68 82
69 void NetworkScreenHandler::PrepareToShow() { 83 void NetworkScreenHandler::PrepareToShow() {
70 } 84 }
71 85
72 void NetworkScreenHandler::Show() { 86 void NetworkScreenHandler::Show() {
73 if (!page_is_ready()) { 87 if (!page_is_ready()) {
74 show_on_init_ = true; 88 show_on_init_ = true;
75 return; 89 return;
76 } 90 }
77 91
78 ShowScreen(OobeUI::kScreenOobeNetwork, NULL); 92 ShowScreen(OobeUI::kScreenOobeNetwork, NULL);
93 StartIdleDetection();
79 } 94 }
80 95
81 void NetworkScreenHandler::Hide() { 96 void NetworkScreenHandler::Hide() {
82 } 97 }
83 98
84 void NetworkScreenHandler::ShowError(const base::string16& message) { 99 void NetworkScreenHandler::ShowError(const base::string16& message) {
85 CallJS("showError", message); 100 CallJS("showError", message);
86 } 101 }
87 102
88 void NetworkScreenHandler::ClearErrors() { 103 void NetworkScreenHandler::ClearErrors() {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 void NetworkScreenHandler::RegisterMessages() { 167 void NetworkScreenHandler::RegisterMessages() {
153 AddCallback(kJsApiNetworkOnExit, &NetworkScreenHandler::HandleOnExit); 168 AddCallback(kJsApiNetworkOnExit, &NetworkScreenHandler::HandleOnExit);
154 AddCallback(kJsApiNetworkOnLanguageChanged, 169 AddCallback(kJsApiNetworkOnLanguageChanged,
155 &NetworkScreenHandler::HandleOnLanguageChanged); 170 &NetworkScreenHandler::HandleOnLanguageChanged);
156 AddCallback(kJsApiNetworkOnInputMethodChanged, 171 AddCallback(kJsApiNetworkOnInputMethodChanged,
157 &NetworkScreenHandler::HandleOnInputMethodChanged); 172 &NetworkScreenHandler::HandleOnInputMethodChanged);
158 AddCallback(kJsApiNetworkOnTimezoneChanged, 173 AddCallback(kJsApiNetworkOnTimezoneChanged,
159 &NetworkScreenHandler::HandleOnTimezoneChanged); 174 &NetworkScreenHandler::HandleOnTimezoneChanged);
160 } 175 }
161 176
177
178 // static
179 void NetworkScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
180 registry->RegisterBooleanPref(prefs::kDerelictMachine, false);
181 }
182
183
xiyuan 2014/02/11 03:42:45 nit: nuke one empty line
rkc 2014/02/11 04:35:57 Done.
162 // NetworkScreenHandler, private: ---------------------------------------------- 184 // NetworkScreenHandler, private: ----------------------------------------------
163 185
164 void NetworkScreenHandler::HandleOnExit() { 186 void NetworkScreenHandler::HandleOnExit() {
187 detector_.reset();
165 ClearErrors(); 188 ClearErrors();
166 if (screen_) 189 if (screen_)
167 screen_->OnContinuePressed(); 190 screen_->OnContinuePressed();
168 } 191 }
169 192
170 struct NetworkScreenHandlerOnLanguageChangedCallbackData { 193 struct NetworkScreenHandlerOnLanguageChangedCallbackData {
171 explicit NetworkScreenHandlerOnLanguageChangedCallbackData( 194 explicit NetworkScreenHandlerOnLanguageChangedCallbackData(
172 base::WeakPtr<NetworkScreenHandler>& handler) 195 base::WeakPtr<NetworkScreenHandler>& handler)
173 : handler_(handler) {} 196 : handler_(handler) {}
174 197
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 253
231 CrosSettings::Get()->SetString(kSystemTimezone, timezone_id); 254 CrosSettings::Get()->SetString(kSystemTimezone, timezone_id);
232 } 255 }
233 256
234 void NetworkScreenHandler::OnSystemTimezoneChanged() { 257 void NetworkScreenHandler::OnSystemTimezoneChanged() {
235 std::string current_timezone_id; 258 std::string current_timezone_id;
236 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id); 259 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id);
237 CallJS("setTimezone", current_timezone_id); 260 CallJS("setTimezone", current_timezone_id);
238 } 261 }
239 262
263 void NetworkScreenHandler::StartIdleDetection() {
264 if (!detector_.get()) {
265 detector_.reset(
266 new IdleDetector(base::Bind(&base::DoNothing),
xiyuan 2014/02/11 03:42:45 Think we should use a base::Closure() instead of D
rkc 2014/02/11 04:35:57 Done.
267 base::Bind(&NetworkScreenHandler::OnIdle,
268 weak_ptr_factory_.GetWeakPtr())));
269 }
270
271 if (is_derelict_) {
272 detector_->Start(derelict_idle_timeout_);
273 } else {
274 detector_->Start(derelict_detection_timeout_);
xiyuan 2014/02/11 03:42:45 nit: simplify to detector_->Start(is_derelict_ ? d
rkc 2014/02/11 04:35:57 Done.
275 }
276 }
277
278 void NetworkScreenHandler::OnIdle() {
279 if (is_derelict_) {
280 LoginDisplayHost* host = LoginDisplayHostImpl::default_host();
281 host->StartDemoAppLaunch();
282 } else {
283 is_derelict_ = true;
284 PrefService* prefs = g_browser_process->local_state();
285 prefs->SetBoolean(prefs::kDerelictMachine, true);
286
287 StartIdleDetection();
288 }
289 }
290
291 void NetworkScreenHandler::SetupTimeouts() {
292 CommandLine* command_line = CommandLine::ForCurrentProcess();
293 DCHECK(command_line);
294
295 PrefService* prefs = g_browser_process->local_state();
296 DCHECK(prefs);
297 is_derelict_ = prefs->GetBoolean(prefs::kDerelictMachine);
298
299 int64 derelict_detection_timeout;
300 if (command_line->HasSwitch(switches::kDerelictDetectionTimeout)) {
301 base::StringToInt64(
xiyuan 2014/02/11 03:42:45 nit: Handle StringToInt64 failure.
rkc 2014/02/11 04:35:57 Handled here and below. Done.
302 command_line->GetSwitchValueASCII(switches::kDerelictDetectionTimeout),
303 &derelict_detection_timeout);
304 } else {
305 derelict_detection_timeout = kDerelectDetectionTimeoutSeconds;
306 }
307 derelict_detection_timeout_ =
308 base::TimeDelta::FromSeconds(derelict_detection_timeout);
309
310 int64 derelict_idle_timeout;
311 if (command_line->HasSwitch(switches::kDerelictIdleTimeout)) {
312 base::StringToInt64(
313 command_line->GetSwitchValueASCII(switches::kDerelictIdleTimeout),
314 &derelict_idle_timeout);
315 } else {
316 derelict_idle_timeout = kDerelectIdleTimeoutSeconds;
317 }
318 derelict_idle_timeout_ = base::TimeDelta::FromSeconds(derelict_idle_timeout);
319 }
320
240 // static 321 // static
241 base::ListValue* NetworkScreenHandler::GetLanguageList() { 322 base::ListValue* NetworkScreenHandler::GetLanguageList() {
242 const std::string app_locale = g_browser_process->GetApplicationLocale(); 323 const std::string app_locale = g_browser_process->GetApplicationLocale();
243 input_method::InputMethodManager* manager = 324 input_method::InputMethodManager* manager =
244 input_method::InputMethodManager::Get(); 325 input_method::InputMethodManager::Get();
245 // GetSupportedInputMethods() never returns NULL. 326 // GetSupportedInputMethods() never returns NULL.
246 scoped_ptr<input_method::InputMethodDescriptors> descriptors( 327 scoped_ptr<input_method::InputMethodDescriptors> descriptors(
247 manager->GetSupportedInputMethods()); 328 manager->GetSupportedInputMethods());
248 base::ListValue* languages_list = 329 base::ListValue* languages_list =
249 options::CrosLanguageOptionsHandler::GetUILanguageList(*descriptors); 330 options::CrosLanguageOptionsHandler::GetUILanguageList(*descriptors);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 // "xkb:us::eng" should always be in the list of available layouts. 387 // "xkb:us::eng" should always be in the list of available layouts.
307 if (!default_us_layout_added) { 388 if (!default_us_layout_added) {
308 const input_method::InputMethodDescriptor* us_eng_descriptor = 389 const input_method::InputMethodDescriptor* us_eng_descriptor =
309 util->GetInputMethodDescriptorFromId(kUSlayout); 390 util->GetInputMethodDescriptorFromId(kUSlayout);
310 DCHECK(us_eng_descriptor != NULL); 391 DCHECK(us_eng_descriptor != NULL);
311 base::DictionaryValue* input_method = new base::DictionaryValue; 392 base::DictionaryValue* input_method = new base::DictionaryValue;
312 input_method->SetString("value", kUSlayout); 393 input_method->SetString("value", kUSlayout);
313 input_method->SetString("title", 394 input_method->SetString("title",
314 util->GetInputMethodLongName(*us_eng_descriptor)); 395 util->GetInputMethodLongName(*us_eng_descriptor));
315 input_methods_list->Append(input_method); 396 input_methods_list->Append(input_method);
397 input_methods_list->Append(input_method);
xiyuan 2014/02/11 03:42:45 This does not look like intended.
rkc 2014/02/11 04:35:57 Weird, not sure where that came from. Fixed.
316 } 398 }
317 return input_methods_list; 399 return input_methods_list;
318 } 400 }
319 401
320 // static 402 // static
321 base::ListValue* NetworkScreenHandler::GetTimezoneList() { 403 base::ListValue* NetworkScreenHandler::GetTimezoneList() {
322 std::string current_timezone_id; 404 std::string current_timezone_id;
323 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id); 405 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id);
324 406
325 scoped_ptr<base::ListValue> timezone_list(new base::ListValue); 407 scoped_ptr<base::ListValue> timezone_list(new base::ListValue);
(...skipping 13 matching lines...) Expand all
339 timezone_option->SetString("value", timezone_id); 421 timezone_option->SetString("value", timezone_id);
340 timezone_option->SetString("title", timezone_name); 422 timezone_option->SetString("title", timezone_name);
341 timezone_option->SetBoolean("selected", timezone_id == current_timezone_id); 423 timezone_option->SetBoolean("selected", timezone_id == current_timezone_id);
342 timezone_list->Append(timezone_option.release()); 424 timezone_list->Append(timezone_option.release());
343 } 425 }
344 426
345 return timezone_list.release(); 427 return timezone_list.release();
346 } 428 }
347 429
348 } // namespace chromeos 430 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698