OLD | NEW |
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/chromeos/login/app_launch_controller.h" | 5 #include "chrome/browser/chromeos/login/app_launch_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 } else { | 228 } else { |
229 // If kiosk mode was configured through enterprise policy, we may | 229 // If kiosk mode was configured through enterprise policy, we may |
230 // not have an owner user. | 230 // not have an owner user. |
231 // TODO(tengs): We need to figure out the appropriate security meausres | 231 // TODO(tengs): We need to figure out the appropriate security meausres |
232 // for this case. | 232 // for this case. |
233 NOTREACHED(); | 233 NOTREACHED(); |
234 } | 234 } |
235 } | 235 } |
236 | 236 |
237 void AppLaunchController::OnOwnerSigninSuccess() { | 237 void AppLaunchController::OnOwnerSigninSuccess() { |
238 app_launch_splash_screen_actor_->ShowNetworkConfigureUI(); | 238 ShowNetworkConfigureUIWhenReady(); |
239 signin_screen_.reset(); | 239 signin_screen_.reset(); |
240 } | 240 } |
241 | 241 |
242 void AppLaunchController::Observe( | 242 void AppLaunchController::Observe( |
243 int type, | 243 int type, |
244 const content::NotificationSource& source, | 244 const content::NotificationSource& source, |
245 const content::NotificationDetails& details) { | 245 const content::NotificationDetails& details) { |
246 DCHECK_EQ(chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, type); | 246 DCHECK_EQ(chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, type); |
247 DCHECK(!webui_visible_); | 247 DCHECK(!webui_visible_); |
248 webui_visible_ = true; | 248 webui_visible_ = true; |
249 launch_splash_start_time_ = base::TimeTicks::Now().ToInternalValue(); | 249 launch_splash_start_time_ = base::TimeTicks::Now().ToInternalValue(); |
250 if (launcher_ready_) | 250 if (launcher_ready_) |
251 OnReadyToLaunch(); | 251 OnReadyToLaunch(); |
252 } | 252 } |
253 | 253 |
254 void AppLaunchController::OnCancelAppLaunch() { | 254 void AppLaunchController::OnCancelAppLaunch() { |
255 if (KioskAppManager::Get()->GetDisableBailoutShortcut()) | 255 if (KioskAppManager::Get()->GetDisableBailoutShortcut()) |
256 return; | 256 return; |
257 | 257 |
258 OnLaunchFailed(KioskAppLaunchError::USER_CANCEL); | 258 OnLaunchFailed(KioskAppLaunchError::USER_CANCEL); |
259 } | 259 } |
260 | 260 |
261 void AppLaunchController::OnNetworkConfigRequested(bool requested) { | 261 void AppLaunchController::OnNetworkConfigRequested(bool requested) { |
262 network_config_requested_ = requested; | 262 network_config_requested_ = requested; |
263 if (requested) | 263 if (requested) { |
264 MaybeShowNetworkConfigureUI(); | 264 MaybeShowNetworkConfigureUI(); |
265 else | 265 } else { |
| 266 app_launch_splash_screen_actor_->UpdateAppLaunchState( |
| 267 AppLaunchSplashScreenActor::APP_LAUNCH_STATE_PREPARING_NETWORK); |
266 startup_app_launcher_->RestartLauncher(); | 268 startup_app_launcher_->RestartLauncher(); |
| 269 } |
267 } | 270 } |
268 | 271 |
269 void AppLaunchController::OnNetworkStateChanged(bool online) { | 272 void AppLaunchController::OnNetworkStateChanged(bool online) { |
270 if (!waiting_for_network_) | 273 if (!waiting_for_network_) |
271 return; | 274 return; |
272 | 275 |
273 if (online && !network_config_requested_) | 276 if (online && !network_config_requested_) |
274 startup_app_launcher_->ContinueWithNetworkReady(); | 277 startup_app_launcher_->ContinueWithNetworkReady(); |
275 else if (network_wait_timedout_) | 278 else if (network_wait_timedout_) |
276 MaybeShowNetworkConfigureUI(); | 279 MaybeShowNetworkConfigureUI(); |
277 } | 280 } |
278 | 281 |
279 void AppLaunchController::OnProfileLoaded(Profile* profile) { | 282 void AppLaunchController::OnProfileLoaded(Profile* profile) { |
280 DVLOG(1) << "Profile loaded... Starting app launch."; | 283 DVLOG(1) << "Profile loaded... Starting app launch."; |
281 profile_ = profile; | 284 profile_ = profile; |
282 | 285 |
283 // This is needed to trigger input method extensions being loaded. | 286 // This is needed to trigger input method extensions being loaded. |
284 profile_->InitChromeOSPreferences(); | 287 profile_->InitChromeOSPreferences(); |
285 | 288 |
286 kiosk_profile_loader_.reset(); | 289 kiosk_profile_loader_.reset(); |
287 startup_app_launcher_.reset( | 290 startup_app_launcher_.reset( |
288 new StartupAppLauncher(profile_, app_id_, diagnostic_mode_, this)); | 291 new StartupAppLauncher(profile_, app_id_, diagnostic_mode_, this)); |
289 startup_app_launcher_->Initialize(); | 292 startup_app_launcher_->Initialize(); |
| 293 |
| 294 if (show_network_config_ui_after_profile_load_) |
| 295 ShowNetworkConfigureUIWhenReady(); |
290 } | 296 } |
291 | 297 |
292 void AppLaunchController::OnProfileLoadFailed( | 298 void AppLaunchController::OnProfileLoadFailed( |
293 KioskAppLaunchError::Error error) { | 299 KioskAppLaunchError::Error error) { |
294 OnLaunchFailed(error); | 300 OnLaunchFailed(error); |
295 } | 301 } |
296 | 302 |
297 void AppLaunchController::ClearNetworkWaitTimer() { | 303 void AppLaunchController::ClearNetworkWaitTimer() { |
298 waiting_for_network_ = false; | 304 waiting_for_network_ = false; |
299 network_wait_timer_.Stop(); | 305 network_wait_timer_.Stop(); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 } | 359 } |
354 | 360 |
355 void AppLaunchController::MaybeShowNetworkConfigureUI() { | 361 void AppLaunchController::MaybeShowNetworkConfigureUI() { |
356 if (CanConfigureNetwork()) { | 362 if (CanConfigureNetwork()) { |
357 if (NeedOwnerAuthToConfigureNetwork()) { | 363 if (NeedOwnerAuthToConfigureNetwork()) { |
358 if (network_config_requested_) | 364 if (network_config_requested_) |
359 OnConfigureNetwork(); | 365 OnConfigureNetwork(); |
360 else | 366 else |
361 app_launch_splash_screen_actor_->ToggleNetworkConfig(true); | 367 app_launch_splash_screen_actor_->ToggleNetworkConfig(true); |
362 } else { | 368 } else { |
363 showing_network_dialog_ = true; | 369 ShowNetworkConfigureUIWhenReady(); |
364 app_launch_splash_screen_actor_->ShowNetworkConfigureUI(); | |
365 } | 370 } |
366 } else { | 371 } else { |
367 app_launch_splash_screen_actor_->UpdateAppLaunchState( | 372 app_launch_splash_screen_actor_->UpdateAppLaunchState( |
368 AppLaunchSplashScreenActor::APP_LAUNCH_STATE_NETWORK_WAIT_TIMEOUT); | 373 AppLaunchSplashScreenActor::APP_LAUNCH_STATE_NETWORK_WAIT_TIMEOUT); |
369 } | 374 } |
370 } | 375 } |
371 | 376 |
| 377 void AppLaunchController::ShowNetworkConfigureUIWhenReady() { |
| 378 if (!profile_) { |
| 379 show_network_config_ui_after_profile_load_ = true; |
| 380 app_launch_splash_screen_actor_->UpdateAppLaunchState( |
| 381 AppLaunchSplashScreenActor:: |
| 382 APP_LAUNCH_STATE_SHOWING_NETWORK_CONFIGURE_UI); |
| 383 return; |
| 384 } |
| 385 |
| 386 show_network_config_ui_after_profile_load_ = false; |
| 387 showing_network_dialog_ = true; |
| 388 app_launch_splash_screen_actor_->ShowNetworkConfigureUI(); |
| 389 } |
| 390 |
372 void AppLaunchController::InitializeNetwork() { | 391 void AppLaunchController::InitializeNetwork() { |
373 // Show the network configuration dialog if network is not initialized | 392 // Show the network configuration dialog if network is not initialized |
374 // after a brief wait time. | 393 // after a brief wait time. |
375 waiting_for_network_ = true; | 394 waiting_for_network_ = true; |
376 network_wait_timer_.Start( | 395 network_wait_timer_.Start( |
377 FROM_HERE, | 396 FROM_HERE, |
378 base::TimeDelta::FromSeconds(network_wait_time_), | 397 base::TimeDelta::FromSeconds(network_wait_time_), |
379 this, &AppLaunchController::OnNetworkWaitTimedout); | 398 this, &AppLaunchController::OnNetworkWaitTimedout); |
380 | 399 |
381 app_launch_splash_screen_actor_->UpdateAppLaunchState( | 400 app_launch_splash_screen_actor_->UpdateAppLaunchState( |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 KioskAppLaunchError::Save(error); | 483 KioskAppLaunchError::Save(error); |
465 chrome::AttemptUserExit(); | 484 chrome::AttemptUserExit(); |
466 CleanUp(); | 485 CleanUp(); |
467 } | 486 } |
468 | 487 |
469 bool AppLaunchController::IsShowingNetworkConfigScreen() { | 488 bool AppLaunchController::IsShowingNetworkConfigScreen() { |
470 return network_config_requested_; | 489 return network_config_requested_; |
471 } | 490 } |
472 | 491 |
473 } // namespace chromeos | 492 } // namespace chromeos |
OLD | NEW |