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/mutable_profile_oauth2_token_service.h"
16 #include "components/signin/core/browser/profile_oauth2_token_service.h"
17 #include "components/signin/core/browser/signin_manager.h"
18 #include "components/user_manager/user.h"
19 #include "google_apis/gaia/gaia_auth_util.h"
23 UserAccountsDelegateChromeOS::UserAccountsDelegateChromeOS(
24 Profile
* user_profile
)
25 : user_profile_(user_profile
) {
26 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
)
30 UserAccountsDelegateChromeOS::~UserAccountsDelegateChromeOS() {
31 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
)
32 ->RemoveObserver(this);
35 std::string
UserAccountsDelegateChromeOS::GetPrimaryAccountId() {
36 return SigninManagerFactory::GetForProfile(user_profile_
)
37 ->GetAuthenticatedAccountId();
40 std::vector
<std::string
>
41 UserAccountsDelegateChromeOS::GetSecondaryAccountIds() {
42 ProfileOAuth2TokenService
* token_service
=
43 ProfileOAuth2TokenServiceFactory::GetForProfile(user_profile_
);
44 std::vector
<std::string
> accounts
= token_service
->GetAccounts();
45 // Filter primary account.
46 std::vector
<std::string
>::iterator it
=
47 std::remove(accounts
.begin(), accounts
.end(), GetPrimaryAccountId());
48 LOG_IF(WARNING
, std::distance(it
, accounts
.end()) != 1)
49 << "Found " << std::distance(it
, accounts
.end())
50 << " primary accounts in the account list.";
51 accounts
.erase(it
, accounts
.end());
55 std::string
UserAccountsDelegateChromeOS::GetAccountDisplayName(
56 const std::string
& account_id
) {
57 user_manager::User
* user
=
58 ProfileHelper::Get()->GetUserByProfile(user_profile_
);
59 if (gaia::AreEmailsSame(user
->email(), account_id
) &&
60 !user
->display_email().empty())
61 return user
->display_email();
65 void UserAccountsDelegateChromeOS::DeleteAccount(
66 const std::string
& account_id
) {
67 MutableProfileOAuth2TokenService
* oauth2_token_service
=
68 ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile(
70 oauth2_token_service
->RevokeCredentials(account_id
);
73 void UserAccountsDelegateChromeOS::LaunchAddAccountDialog() {
74 ui::InlineLoginDialog::Show(user_profile_
);
77 void UserAccountsDelegateChromeOS::OnRefreshTokenAvailable(
78 const std::string
& account_id
) {
79 NotifyAccountListChanged();
82 void UserAccountsDelegateChromeOS::OnRefreshTokenRevoked(
83 const std::string
& account_id
) {
84 NotifyAccountListChanged();
87 } // namespace chromeos