Support 3P oauth flow.

PiperOrigin-RevId: 663964316
This commit is contained in:
Suet-Fei Li
2024-08-16 19:39:13 -07:00
committed by Copybara-Service
parent f1a1c39177
commit a81ce57879
6 changed files with 51 additions and 7 deletions
@@ -55,7 +55,7 @@ class AccountManager {
// Gets current active account. If no login user, return std::nullopt.
virtual std::optional<Account> GetCurrentAccount() = 0;
// Initializes the login process for a Google account.
// Initializes the login process for a Google account from 1P client.
// |login_success_callback| is called when the login succeeded. Account
// information is passed to callback.
// |login_failure_callback| is called when the login fails.
@@ -63,6 +63,17 @@ class AccountManager {
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback) = 0;
// Initializes the login process for a Google account from an oauth client.
// |client_id| GCP client_id of the client
// |client_secret| GCP client_secret of the client
// |login_success_callback| is called when the login succeeded. Account
// information is passed to callback.
// |login_failure_callback| is called when the login fails.
virtual void Login(
absl::string_view client_id, absl::string_view client_secret,
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback) = 0;
// Logs out current active account. |logout_callback| is called when logout is
// completed.
virtual void Logout(
+16
View File
@@ -46,6 +46,22 @@ void FakeAccountManager::Login(
login_failure_callback(absl::InternalError("No account."));
}
void FakeAccountManager::Login(
absl::string_view client_id, absl::string_view client_secret,
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback) {
if (account_.has_value()) {
UpdateCurrentUser(account_->id);
NotifyLogin(account_->id);
// Invoke callback after all operations have been performed since test cases
// may rely on the callback for synchronization.
login_success_callback(*account_);
return;
}
login_failure_callback(absl::InternalError("No account."));
}
void FakeAccountManager::Logout(
absl::AnyInvocable<void(absl::Status)> logout_callback) {
if (is_logout_success_) {
+5
View File
@@ -39,6 +39,11 @@ class FakeAccountManager : public AccountManager {
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback) override;
void Login(
absl::string_view client_id, absl::string_view client_secret,
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback) override;
void Logout(absl::AnyInvocable<void(absl::Status)> logout_callback) override;
bool GetAccessToken(
+5
View File
@@ -32,6 +32,11 @@ class MockAccountManager : public AccountManager {
(absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback),
(override));
MOCK_METHOD(void, Login,
(absl::string_view client_id, absl::string_view client_secret,
absl::AnyInvocable<void(Account)> login_success_callback,
absl::AnyInvocable<void(absl::Status)> login_failure_callback),
(override));
MOCK_METHOD(void, Logout,
(absl::AnyInvocable<void(absl::Status)> logout_callback),
(override));