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/restore_after_crash_session_manager_delegate.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/session/user_session_manager.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/profiles/profile.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/chrome_switches.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/audio/cras_audio_handler.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/chromeos_switches.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/notification_service.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace chromeos { 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben MurdochRestoreAfterCrashSessionManagerDelegate:: 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RestoreAfterCrashSessionManagerDelegate(Profile* profile, 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& login_user_id) 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : profile_(profile), login_user_id_(login_user_id) { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben MurdochRestoreAfterCrashSessionManagerDelegate:: 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~RestoreAfterCrashSessionManagerDelegate() { 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid RestoreAfterCrashSessionManagerDelegate::Start() { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch session_manager_->SetSessionState(session_manager::SESSION_STATE_ACTIVE); 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(nkostylev): Identify tests that do not set this kLoginUser flag but 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // still rely on "stub user" session. Keeping existing behavior to avoid 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // breaking tests. 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (command_line->HasSwitch(chromeos::switches::kLoginUser)) { 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This is done in SessionManager::OnProfileCreated during normal login. 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UserSessionManager* user_session_mgr = UserSessionManager::GetInstance(); 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_session_mgr->InitRlz(profile()); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_session_mgr->InitializeCerts(profile()); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Send the PROFILE_PREPARED notification and call SessionStarted() 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // so that the Launcher and other Profile dependent classes are created. 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::NotificationService::current()->Notify( 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::NotificationService::AllSources(), 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::Details<Profile>(profile())); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This call will set session state to SESSION_STATE_ACTIVE (same one). 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->SessionStarted(); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Now is the good time to retrieve other logged in users for this session. 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // First user has been already marked as logged in and active in 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // PreProfileInit(). Restore sessions for other users in the background. 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_session_mgr->RestoreActiveSessions(); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_running_test = command_line->HasSwitch(::switches::kTestName) || 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line->HasSwitch(::switches::kTestType); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!is_running_test) { 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Enable CrasAudioHandler logging when chrome restarts after crashing. 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (chromeos::CrasAudioHandler::IsInitialized()) 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::CrasAudioHandler::Get()->LogErrors(); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We did not log in (we crashed or are debugging), so we need to 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // restore Sync. 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserSessionManager::GetInstance()->RestoreAuthenticationSession(profile()); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace chromeos 74