| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SERVICES_IDENTITY_IDENTITY_ACCESSOR_IMPL_H_ |
| #define SERVICES_IDENTITY_IDENTITY_ACCESSOR_IMPL_H_ |
| |
| #include <map> |
| #include <memory> |
| |
| #include "base/callback_list.h" |
| #include "components/signin/core/browser/account_info.h" |
| #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| #include "mojo/public/cpp/bindings/binding.h" |
| #include "services/identity/public/cpp/account_state.h" |
| #include "services/identity/public/cpp/identity_manager.h" |
| #include "services/identity/public/cpp/scope_set.h" |
| #include "services/identity/public/mojom/identity_accessor.mojom.h" |
| |
| namespace identity { |
| |
| class IdentityAccessorImpl : public mojom::IdentityAccessor, |
| public IdentityManager::Observer { |
| public: |
| static void Create(mojom::IdentityAccessorRequest request, |
| IdentityManager* identity_manager); |
| |
| IdentityAccessorImpl(mojom::IdentityAccessorRequest request, |
| IdentityManager* identity_manager); |
| ~IdentityAccessorImpl() override; |
| |
| private: |
| // Map of outstanding access token requests. |
| using AccessTokenFetchers = |
| std::map<base::UnguessableToken, std::unique_ptr<AccessTokenFetcher>>; |
| |
| // Invoked after access token request completes (successful or not). |
| // Completes the pending access token request by calling back the consumer. |
| void OnTokenRequestCompleted( |
| base::UnguessableToken callback_id, |
| scoped_refptr<base::RefCountedData<bool>> is_callback_done, |
| GetAccessTokenCallback consumer_callback, |
| GoogleServiceAuthError error, |
| AccessTokenInfo access_token_info); |
| |
| // mojom::IdentityAccessor: |
| void GetPrimaryAccountInfo(GetPrimaryAccountInfoCallback callback) override; |
| void GetPrimaryAccountWhenAvailable( |
| GetPrimaryAccountWhenAvailableCallback callback) override; |
| void GetAccessToken(const std::string& account_id, |
| const ScopeSet& scopes, |
| const std::string& consumer_id, |
| GetAccessTokenCallback callback) override; |
| |
| // IdentityManager::Observer: |
| void OnRefreshTokenUpdatedForAccount( |
| const CoreAccountInfo& account_info) override; |
| void OnPrimaryAccountSet(const CoreAccountInfo& account_info) override; |
| |
| // Notified when there is a change in the state of the account |
| // corresponding to |account_id|. |
| void OnAccountStateChange(const std::string& account_id); |
| |
| // Gets the current state of the account represented by |account_info|. |
| AccountState GetStateOfAccount(const CoreAccountInfo& account_info); |
| |
| // Called when |binding_| hits a connection error. Destroys this instance, |
| // since it's no longer needed. |
| void OnConnectionError(); |
| |
| mojo::Binding<mojom::IdentityAccessor> binding_; |
| IdentityManager* identity_manager_; |
| |
| // The set of pending requests for access tokens. |
| AccessTokenFetchers access_token_fetchers_; |
| |
| // List of callbacks that will be notified when the primary account is |
| // available. |
| std::vector<GetPrimaryAccountWhenAvailableCallback> |
| primary_account_available_callbacks_; |
| }; |
| |
| } // namespace identity |
| |
| #endif // SERVICES_IDENTITY_IDENTITY_ACCESSOR_IMPL_H_ |