1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_util.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector> 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string_util.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/browser_process.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace multi_user_util { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::string GetUserIDFromProfile(Profile* profile) { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetUserIDFromEmail(profile->GetOriginalProfile()->GetProfileName()); 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::string GetUserIDFromEmail(const std::string& email) { 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // |email| and profile name could be empty if not yet logged in or guest mode. 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return email.empty() ? 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) email : gaia::CanonicalizeEmail(gaia::SanitizeEmail(email)); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Profile* GetProfileFromUserID(const std::string& user_id) { 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Unit tests can end up here without a |g_browser_process|. 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!g_browser_process || !g_browser_process->profile_manager()) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return NULL; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::vector<Profile*> profiles = 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_browser_process->profile_manager()->GetLoadedProfiles(); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::vector<Profile*>::const_iterator profile_iterator = profiles.begin(); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; profile_iterator != profiles.end(); ++profile_iterator) { 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (GetUserIDFromProfile(*profile_iterator) == user_id) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return *profile_iterator; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return NULL; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Profile* GetProfileFromWindow(aura::Window* window) { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager* manager = 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager::GetInstance(); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We might come here before the manager got created - or in a unit test. 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!manager) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return NULL; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string user_id = manager->GetUserPresentingWindow(window); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return user_id.empty() ? NULL : 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) multi_user_util::GetProfileFromUserID(user_id); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return NULL; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool IsProfileFromActiveUser(Profile* profile) { 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetUserIDFromProfile(profile) == 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetActiveUser()->email(); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // In non Chrome OS configurations this will be always true since this only 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // makes sense in separate desktop mode. 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return true; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const std::string& GetCurrentUserId() { 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return user_manager::UserManager::Get()->GetActiveUser()->email(); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::EmptyString(); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Move the window to the current user's desktop. 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MoveWindowToCurrentDesktop(aura::Window* window) { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser( 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window, 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetCurrentUserId()); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace multi_user_util 92