1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/chrome_session_manager.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/logging.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/sys_info.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/kiosk_auto_launcher_session_manager_delegate.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/login_oobe_session_manager_delegate.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/restore_after_crash_session_manager_delegate.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/stub_login_session_manager_delegate.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/profiles/profile.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/chromeos_switches.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/user_names.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace chromeos { 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ShouldAutoLaunchKioskApp(const base::CommandLine& command_line) { 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KioskAppManager* app_manager = KioskAppManager::Get(); 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return command_line.HasSwitch(switches::kLoginManager) && 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !command_line.HasSwitch(switches::kForceLoginManagerInTests) && 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch app_manager->IsAutoLaunchEnabled() && 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KioskAppLaunchError::Get() == KioskAppLaunchError::NONE; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_ptr<session_manager::SessionManager> 37116680a4aac90f2aa7413d9095a592090648e557Ben MurdochChromeSessionManager::CreateSessionManager( 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& parsed_command_line, 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_running_test) { 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Tests should be able to tune login manager before showing it. Thus only 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // show login UI (login and out-of-box) in normal (non-testing) mode with 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // --login-manager switch and if test passed --force-login-manager-in-tests. 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool force_login_screen_in_test = 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parsed_command_line.HasSwitch(switches::kForceLoginManagerInTests); 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string login_user_id = 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parsed_command_line.GetSwitchValueASCII(switches::kLoginUser); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ShouldAutoLaunchKioskApp(parsed_command_line)) { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "Starting Chrome with KioskAutoLauncherSessionManagerDelegate"; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<session_manager::SessionManager>(new ChromeSessionManager( 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new KioskAutoLauncherSessionManagerDelegate())); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else if (parsed_command_line.HasSwitch(switches::kLoginManager) && 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (!is_running_test || force_login_screen_in_test)) { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "Starting Chrome with LoginOobeSessionManagerDelegate"; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<session_manager::SessionManager>( 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new ChromeSessionManager(new LoginOobeSessionManagerDelegate())); 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else if (!base::SysInfo::IsRunningOnChromeOS() && 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch login_user_id == login::kStubUser) { 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "Starting Chrome with StubLoginSessionManagerDelegate"; 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<session_manager::SessionManager>(new ChromeSessionManager( 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new StubLoginSessionManagerDelegate(profile, login_user_id))); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else { 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "Starting Chrome with RestoreAfterCrashSessionManagerDelegate"; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Restarting Chrome inside existing user session. Possible cases: 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 1. Chrome is restarted after crash. 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 2. Chrome is started in browser_tests skipping the login flow. 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 3. Chrome is started on dev machine i.e. not on Chrome OS device w/o 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // login flow. In that case --login-user=[chromeos::login::kStubUser] is 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // added. See PreEarlyInitialization(). 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<session_manager::SessionManager>(new ChromeSessionManager( 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new RestoreAfterCrashSessionManagerDelegate(profile, login_user_id))); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77116680a4aac90f2aa7413d9095a592090648e557Ben MurdochChromeSessionManager::ChromeSessionManager( 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch session_manager::SessionManagerDelegate* delegate) { 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Initialize(delegate); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 82116680a4aac90f2aa7413d9095a592090648e557Ben MurdochChromeSessionManager::~ChromeSessionManager() { 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace chromeos 86