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

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
162 // NetworkScreenHandler, private: ---------------------------------------------- 183 // NetworkScreenHandler, private: ----------------------------------------------
163 184
164 void NetworkScreenHandler::HandleOnExit() { 185 void NetworkScreenHandler::HandleOnExit() {
186 detector_.reset();
165 ClearErrors(); 187 ClearErrors();
166 if (screen_) 188 if (screen_)
167 screen_->OnContinuePressed(); 189 screen_->OnContinuePressed();
168 } 190 }
169 191
170 struct NetworkScreenHandlerOnLanguageChangedCallbackData { 192 struct NetworkScreenHandlerOnLanguageChangedCallbackData {
171 explicit NetworkScreenHandlerOnLanguageChangedCallbackData( 193 explicit NetworkScreenHandlerOnLanguageChangedCallbackData(
172 base::WeakPtr<NetworkScreenHandler>& handler) 194 base::WeakPtr<NetworkScreenHandler>& handler)
173 : handler_(handler) {} 195 : handler_(handler) {}
174 196
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 252
231 CrosSettings::Get()->SetString(kSystemTimezone, timezone_id); 253 CrosSettings::Get()->SetString(kSystemTimezone, timezone_id);
232 } 254 }
233 255
234 void NetworkScreenHandler::OnSystemTimezoneChanged() { 256 void NetworkScreenHandler::OnSystemTimezoneChanged() {
235 std::string current_timezone_id; 257 std::string current_timezone_id;
236 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id); 258 CrosSettings::Get()->GetString(kSystemTimezone, &current_timezone_id);
237 CallJS("setTimezone", current_timezone_id); 259 CallJS("setTimezone", current_timezone_id);
238 } 260 }
239 261
262 void NetworkScreenHandler::StartIdleDetection() {
263 if (!detector_.get()) {
264 detector_.reset(
265 new IdleDetector(base::Closure(),
266 base::Bind(&NetworkScreenHandler::OnIdle,
267 weak_ptr_factory_.GetWeakPtr())));
268 }
269
270 detector_->Start(
271 is_derelict_ ? derelict_idle_timeout_ : derelict_detection_timeout_);
272 }
273
274 void NetworkScreenHandler::OnIdle() {
275 if (is_derelict_) {
276 LoginDisplayHost* host = LoginDisplayHostImpl::default_host();
277 host->StartDemoAppLaunch();
278 } else {
279 is_derelict_ = true;
280 PrefService* prefs = g_browser_process->local_state();
281 prefs->SetBoolean(prefs::kDerelictMachine, true);
282
283 StartIdleDetection();
284 }
285 }
286
287 void NetworkScreenHandler::SetupTimeouts() {
288 CommandLine* command_line = CommandLine::ForCurrentProcess();
289 DCHECK(command_line);
290
291 PrefService* prefs = g_browser_process->local_state();
292 DCHECK(prefs);
293 is_derelict_ = prefs->GetBoolean(prefs::kDerelictMachine);
294
295 int64 derelict_detection_timeout;
296 if (command_line->HasSwitch(switches::kDerelictDetectionTimeout)) {
297 if (!base::StringToInt64(
298 command_line->GetSwitchValueASCII(switches::kDerelictDetectionTimeout),
299 &derelict_detection_timeout))
300 derelict_detection_timeout = kDerelectDetectionTimeoutSeconds;
xiyuan 2014/02/11 04:47:45 nit: Optimize a little bit to avoid duplicate code
rkc 2014/02/11 19:44:50 Fixed, here and below. Done.
301 } else {
302 derelict_detection_timeout = kDerelectDetectionTimeoutSeconds;
303 }
304 derelict_detection_timeout_ =
305 base::TimeDelta::FromSeconds(derelict_detection_timeout);
306
307 int64 derelict_idle_timeout;
308 if (command_line->HasSwitch(switches::kDerelictIdleTimeout)) {
309 if (!base::StringToInt64(
310 command_line->GetSwitchValueASCII(switches::kDerelictIdleTimeout),
311 &derelict_idle_timeout))
312 derelict_idle_timeout = kDerelectIdleTimeoutSeconds;
313 } else {
314 derelict_idle_timeout = kDerelectIdleTimeoutSeconds;
315 }
316 derelict_idle_timeout_ = base::TimeDelta::FromSeconds(derelict_idle_timeout);
317 }
318
240 // static 319 // static
241 base::ListValue* NetworkScreenHandler::GetLanguageList() { 320 base::ListValue* NetworkScreenHandler::GetLanguageList() {
242 const std::string app_locale = g_browser_process->GetApplicationLocale(); 321 const std::string app_locale = g_browser_process->GetApplicationLocale();
243 input_method::InputMethodManager* manager = 322 input_method::InputMethodManager* manager =
244 input_method::InputMethodManager::Get(); 323 input_method::InputMethodManager::Get();
245 // GetSupportedInputMethods() never returns NULL. 324 // GetSupportedInputMethods() never returns NULL.
246 scoped_ptr<input_method::InputMethodDescriptors> descriptors( 325 scoped_ptr<input_method::InputMethodDescriptors> descriptors(
247 manager->GetSupportedInputMethods()); 326 manager->GetSupportedInputMethods());
248 base::ListValue* languages_list = 327 base::ListValue* languages_list =
249 options::CrosLanguageOptionsHandler::GetUILanguageList(*descriptors); 328 options::CrosLanguageOptionsHandler::GetUILanguageList(*descriptors);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 timezone_option->SetString("value", timezone_id); 418 timezone_option->SetString("value", timezone_id);
340 timezone_option->SetString("title", timezone_name); 419 timezone_option->SetString("title", timezone_name);
341 timezone_option->SetBoolean("selected", timezone_id == current_timezone_id); 420 timezone_option->SetBoolean("selected", timezone_id == current_timezone_id);
342 timezone_list->Append(timezone_option.release()); 421 timezone_list->Append(timezone_option.release());
343 } 422 }
344 423
345 return timezone_list.release(); 424 return timezone_list.release();
346 } 425 }
347 426
348 } // namespace chromeos 427 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/network_screen_handler.h ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698