#ifndef REMOTING_TEST_TEST_OAUTH_TOKEN_GETTER_H_
#define REMOTING_TEST_TEST_OAUTH_TOKEN_GETTER_H_
#include <memory>
#include <string>
#include "base/containers/queue.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "remoting/base/oauth_token_getter.h"
namespace network {
class TransitionalURLLoaderFactoryOwner;
}
namespace remoting {
namespace test {
class TestTokenStorage;
class TestOAuthTokenGetter final : public OAuthTokenGetter {
public:
static constexpr char kSwitchNameAuthCode[] = "auth-code";
static bool IsServiceAccount(const std::string& email);
explicit TestOAuthTokenGetter(TestTokenStorage* token_storage);
TestOAuthTokenGetter(const TestOAuthTokenGetter&) = delete;
TestOAuthTokenGetter& operator=(const TestOAuthTokenGetter&) = delete;
~TestOAuthTokenGetter() override;
void Initialize(base::OnceClosure on_done);
void ResetWithAuthenticationFlow(base::OnceClosure on_done);
void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
base::WeakPtr<OAuthTokenGetter> GetWeakPtr() override;
private:
std::unique_ptr<OAuthTokenGetter> CreateWithRefreshToken(
const std::string& refresh_token,
const std::string& email);
void OnCredentialsUpdate(const std::string& user_email,
const std::string& refresh_token);
void OnAccessToken(OAuthTokenGetter::Status status,
const std::string& user_email,
const std::string& access_token,
const std::string& scopes);
void RunAuthenticationDoneCallbacks();
std::unique_ptr<network::TransitionalURLLoaderFactoryOwner>
url_loader_factory_owner_;
raw_ptr<TestTokenStorage> token_storage_ = nullptr;
std::unique_ptr<OAuthTokenGetter> token_getter_;
bool is_authenticating_ = false;
base::queue<base::OnceClosure> on_authentication_done_;
base::WeakPtrFactory<TestOAuthTokenGetter> weak_factory_{this};
};
}
}
#endif