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
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
9 #include "base/strings/string_util.h"
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "google_apis/gaia/gaia_auth_util.h"
15 #if defined(OS_CHROMEOS)
16 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
17 #include "components/user_manager/user_manager.h"
20 namespace multi_user_util
{
22 std::string
GetUserIDFromProfile(Profile
* profile
) {
23 return GetUserIDFromEmail(profile
->GetOriginalProfile()->GetProfileName());
26 std::string
GetUserIDFromEmail(const std::string
& email
) {
27 // |email| and profile name could be empty if not yet logged in or guest mode.
28 return email
.empty() ?
29 email
: gaia::CanonicalizeEmail(gaia::SanitizeEmail(email
));
32 Profile
* GetProfileFromUserID(const std::string
& user_id
) {
33 // Unit tests can end up here without a |g_browser_process|.
34 if (!g_browser_process
|| !g_browser_process
->profile_manager())
37 std::vector
<Profile
*> profiles
=
38 g_browser_process
->profile_manager()->GetLoadedProfiles();
40 std::vector
<Profile
*>::const_iterator profile_iterator
= profiles
.begin();
41 for (; profile_iterator
!= profiles
.end(); ++profile_iterator
) {
42 if (GetUserIDFromProfile(*profile_iterator
) == user_id
)
43 return *profile_iterator
;
48 Profile
* GetProfileFromWindow(aura::Window
* window
) {
49 #if defined(OS_CHROMEOS)
50 chrome::MultiUserWindowManager
* manager
=
51 chrome::MultiUserWindowManager::GetInstance();
52 // We might come here before the manager got created - or in a unit test.
55 const std::string user_id
= manager
->GetUserPresentingWindow(window
);
56 return user_id
.empty() ? NULL
:
57 multi_user_util::GetProfileFromUserID(user_id
);
63 bool IsProfileFromActiveUser(Profile
* profile
) {
64 #if defined(OS_CHROMEOS)
65 return GetUserIDFromProfile(profile
) ==
66 user_manager::UserManager::Get()->GetActiveUser()->email();
68 // In non Chrome OS configurations this will be always true since this only
69 // makes sense in separate desktop mode.
74 const std::string
& GetCurrentUserId() {
75 #if defined(OS_CHROMEOS)
76 return user_manager::UserManager::Get()->GetActiveUser()->email();
78 return base::EmptyString();
82 // Move the window to the current user's desktop.
83 void MoveWindowToCurrentDesktop(aura::Window
* window
) {
84 #if defined(OS_CHROMEOS)
85 chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser(
91 } // namespace multi_user_util