1 // Copyright 2014 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/user_accounts_delegate_chromeos.h"
10 #include "base/logging.h"
11 #include "chrome/browser/chromeos/profiles/profile_helper.h"
12 #include "chrome/browser/chromeos/ui/inline_login_dialog.h"
13 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
14 #include "chrome/browser/signin/signin_manager_factory.h"
15 #include "components/signin/core/browser/profile_oauth2_token_service.h"
16 #include "components/signin/core/browser/signin_manager.h"
17 #include "components/user_manager/user.h"
18 #include "google_apis/gaia/gaia_auth_util.h"
22 UserAccountsDelegateChromeOS::UserAccountsDelegateChromeOS(
23 Profile
* user_profile
)
24 : user_profile_(user_profile
) {
25 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
)
29 UserAccountsDelegateChromeOS::~UserAccountsDelegateChromeOS() {
30 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
)
31 ->RemoveObserver(this);
34 std::string
UserAccountsDelegateChromeOS::GetPrimaryAccountId() {
35 return SigninManagerFactory::GetForProfile(user_profile_
)
36 ->GetAuthenticatedAccountId();
39 std::vector
<std::string
>
40 UserAccountsDelegateChromeOS::GetSecondaryAccountIds() {
41 ProfileOAuth2TokenService
* token_service
=
42 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
);
43 std::vector
<std::string
> accounts
= token_service
->GetAccounts();
44 // Filter primary account.
45 std::vector
<std::string
>::iterator it
=
46 std::remove(accounts
.begin(), accounts
.end(), GetPrimaryAccountId());
47 LOG_IF(WARNING
, std::distance(it
, accounts
.end()) != 1)
48 << "Found " << std::distance(it
, accounts
.end())
49 << " primary accounts in the account list.";
50 accounts
.erase(it
, accounts
.end());
54 std::string
UserAccountsDelegateChromeOS::GetAccountDisplayName(
55 const std::string
& account_id
) {
56 const user_manager::User
* user
=
57 ProfileHelper::Get()->GetUserByProfile(user_profile_
);
58 if (gaia::AreEmailsSame(user
->email(), account_id
) &&
59 !user
->display_email().empty())
60 return user
->display_email();
64 void UserAccountsDelegateChromeOS::DeleteAccount(
65 const std::string
& account_id
) {
66 ProfileOAuth2TokenService
* oauth2_token_service
=
67 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
);
68 oauth2_token_service
->RevokeCredentials(account_id
);
71 void UserAccountsDelegateChromeOS::LaunchAddAccountDialog() {
72 ui::InlineLoginDialog::Show(user_profile_
);
75 void UserAccountsDelegateChromeOS::OnRefreshTokenAvailable(
76 const std::string
& account_id
) {
77 NotifyAccountListChanged();
80 void UserAccountsDelegateChromeOS::OnRefreshTokenRevoked(
81 const std::string
& account_id
) {
82 NotifyAccountListChanged();
85 } // namespace chromeos