Commit f7979852 authored by David Roger's avatar David Roger Committed by Commit Bot

[signin] Plumb the multilogin mode to Gaia servers

Fixed: 890321
Change-Id: I58a5f82adb70ceaf47edcc6b45c8ddd499dd357e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1893258
Commit-Queue: David Roger <droger@chromium.org>
Reviewed-by: default avatarMonica Basta <msalama@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712557}
parent 56eadac0
...@@ -54,7 +54,8 @@ void AccountsCookieMutatorImpl::SetAccountsInCookie( ...@@ -54,7 +54,8 @@ void AccountsCookieMutatorImpl::SetAccountsInCookie(
account_id, account_tracker_service_->GetAccountInfo(account_id).gaia)); account_id, account_tracker_service_->GetAccountInfo(account_id).gaia));
} }
gaia_cookie_manager_service_->SetAccountsInCookie( gaia_cookie_manager_service_->SetAccountsInCookie(
accounts, source, std::move(set_accounts_in_cookies_completed_callback)); parameters.mode, accounts, source,
std::move(set_accounts_in_cookies_completed_callback));
} }
void AccountsCookieMutatorImpl::TriggerCookieJarUpdate() { void AccountsCookieMutatorImpl::TriggerCookieJarUpdate() {
......
...@@ -99,31 +99,18 @@ void RecordLogoutRequestState(LogoutRequestState logout_state) { ...@@ -99,31 +99,18 @@ void RecordLogoutRequestState(LogoutRequestState logout_state) {
} // namespace } // namespace
GaiaCookieManagerService::GaiaCookieRequest::SetAccountsParams::
SetAccountsParams() = default;
GaiaCookieManagerService::GaiaCookieRequest::SetAccountsParams::
SetAccountsParams(const SetAccountsParams& other) = default;
GaiaCookieManagerService::GaiaCookieRequest::SetAccountsParams::
~SetAccountsParams() = default;
GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest( GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest(
GaiaCookieRequestType request_type, GaiaCookieRequestType request_type,
gaia::GaiaSource source) gaia::GaiaSource source)
: request_type_(request_type), source_(source) {} : request_type_(request_type), source_(source) {}
GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest(
GaiaCookieRequestType request_type,
const std::vector<AccountIdGaiaIdPair>& accounts,
gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback callback)
: request_type_(request_type),
accounts_(accounts),
source_(source),
set_accounts_in_cookie_completed_callback_(std::move(callback)) {}
GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest(
GaiaCookieRequestType request_type,
const CoreAccountId& account_id,
gaia::GaiaSource source,
AddAccountToCookieCompletedCallback callback)
: request_type_(request_type),
account_id_(account_id),
source_(source),
add_account_to_cookie_completed_callback_(std::move(callback)) {}
GaiaCookieManagerService::GaiaCookieRequest::~GaiaCookieRequest() {} GaiaCookieManagerService::GaiaCookieRequest::~GaiaCookieRequest() {}
GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest( GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest(
...@@ -133,10 +120,24 @@ GaiaCookieManagerService::GaiaCookieRequest& ...@@ -133,10 +120,24 @@ GaiaCookieManagerService::GaiaCookieRequest&
GaiaCookieManagerService::GaiaCookieRequest::operator=(GaiaCookieRequest&&) = GaiaCookieManagerService::GaiaCookieRequest::operator=(GaiaCookieRequest&&) =
default; default;
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>&
GaiaCookieManagerService::GaiaCookieRequest::GetAccounts() const {
DCHECK_EQ(request_type_, GaiaCookieRequestType::SET_ACCOUNTS);
DCHECK(account_id_.empty());
return set_accounts_params_.accounts;
}
gaia::MultiloginMode
GaiaCookieManagerService::GaiaCookieRequest::GetMultiloginMode() const {
DCHECK_EQ(request_type_, GaiaCookieRequestType::SET_ACCOUNTS);
DCHECK(account_id_.empty());
return set_accounts_params_.mode;
}
const CoreAccountId const CoreAccountId
GaiaCookieManagerService::GaiaCookieRequest::GetAccountID() { GaiaCookieManagerService::GaiaCookieRequest::GetAccountID() {
DCHECK_EQ(request_type_, GaiaCookieRequestType::ADD_ACCOUNT); DCHECK_EQ(request_type_, GaiaCookieRequestType::ADD_ACCOUNT);
DCHECK_EQ(0u, accounts_.size()); DCHECK_EQ(0u, set_accounts_params_.accounts.size());
return account_id_; return account_id_;
} }
...@@ -166,20 +167,26 @@ GaiaCookieManagerService::GaiaCookieRequest::CreateAddAccountRequest( ...@@ -166,20 +167,26 @@ GaiaCookieManagerService::GaiaCookieRequest::CreateAddAccountRequest(
const CoreAccountId& account_id, const CoreAccountId& account_id,
gaia::GaiaSource source, gaia::GaiaSource source,
AddAccountToCookieCompletedCallback callback) { AddAccountToCookieCompletedCallback callback) {
return GaiaCookieManagerService::GaiaCookieRequest( GaiaCookieManagerService::GaiaCookieRequest request(
GaiaCookieRequestType::ADD_ACCOUNT, account_id, source, GaiaCookieRequestType::ADD_ACCOUNT, source);
std::move(callback)); request.account_id_ = account_id;
request.add_account_to_cookie_completed_callback_ = std::move(callback);
return request;
} }
// static // static
GaiaCookieManagerService::GaiaCookieRequest GaiaCookieManagerService::GaiaCookieRequest
GaiaCookieManagerService::GaiaCookieRequest::CreateSetAccountsRequest( GaiaCookieManagerService::GaiaCookieRequest::CreateSetAccountsRequest(
gaia::MultiloginMode mode,
const std::vector<AccountIdGaiaIdPair>& accounts, const std::vector<AccountIdGaiaIdPair>& accounts,
gaia::GaiaSource source, gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback callback) { SetAccountsInCookieCompletedCallback callback) {
return GaiaCookieManagerService::GaiaCookieRequest( GaiaCookieManagerService::GaiaCookieRequest request(
GaiaCookieRequestType::SET_ACCOUNTS, accounts, source, GaiaCookieRequestType::SET_ACCOUNTS, source);
std::move(callback)); request.set_accounts_params_.mode = mode;
request.set_accounts_params_.accounts = accounts;
request.set_accounts_in_cookie_completed_callback_ = std::move(callback);
return request;
} }
// static // static
...@@ -473,6 +480,7 @@ void GaiaCookieManagerService::Shutdown() { ...@@ -473,6 +480,7 @@ void GaiaCookieManagerService::Shutdown() {
} }
void GaiaCookieManagerService::SetAccountsInCookie( void GaiaCookieManagerService::SetAccountsInCookie(
gaia::MultiloginMode mode,
const std::vector<AccountIdGaiaIdPair>& accounts, const std::vector<AccountIdGaiaIdPair>& accounts,
gaia::GaiaSource source, gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback SetAccountsInCookieCompletedCallback
...@@ -483,7 +491,8 @@ void GaiaCookieManagerService::SetAccountsInCookie( ...@@ -483,7 +491,8 @@ void GaiaCookieManagerService::SetAccountsInCookie(
VLOG(1) << "GaiaCookieManagerService::SetAccountsInCookie: " VLOG(1) << "GaiaCookieManagerService::SetAccountsInCookie: "
<< base::JoinString(account_ids, " "); << base::JoinString(account_ids, " ");
requests_.push_back(GaiaCookieRequest::CreateSetAccountsRequest( requests_.push_back(GaiaCookieRequest::CreateSetAccountsRequest(
accounts, source, std::move(set_accounts_in_cookies_completed_callback))); mode, accounts, source,
std::move(set_accounts_in_cookies_completed_callback)));
if (!signin_client_->AreSigninCookiesAllowed()) { if (!signin_client_->AreSigninCookiesAllowed()) {
OnSetAccountsFinished(signin::SetAccountsInCookieResult::kPersistentError); OnSetAccountsFinished(signin::SetAccountsInCookieResult::kPersistentError);
return; return;
...@@ -980,7 +989,7 @@ void GaiaCookieManagerService::StartSetAccounts() { ...@@ -980,7 +989,7 @@ void GaiaCookieManagerService::StartSetAccounts() {
DCHECK(!requests_.empty()); DCHECK(!requests_.empty());
DCHECK_EQ(GaiaCookieRequestType::SET_ACCOUNTS, DCHECK_EQ(GaiaCookieRequestType::SET_ACCOUNTS,
requests_.front().request_type()); requests_.front().request_type());
DCHECK(!requests_.front().accounts().empty()); DCHECK(!requests_.front().GetAccounts().empty());
if (!external_cc_result_fetched_ && if (!external_cc_result_fetched_ &&
!external_cc_result_fetcher_.IsRunning()) { !external_cc_result_fetcher_.IsRunning()) {
...@@ -991,7 +1000,8 @@ void GaiaCookieManagerService::StartSetAccounts() { ...@@ -991,7 +1000,8 @@ void GaiaCookieManagerService::StartSetAccounts() {
} }
oauth_multilogin_helper_ = std::make_unique<signin::OAuthMultiloginHelper>( oauth_multilogin_helper_ = std::make_unique<signin::OAuthMultiloginHelper>(
signin_client_, token_service_, requests_.front().accounts(), signin_client_, token_service_, requests_.front().GetMultiloginMode(),
requests_.front().GetAccounts(),
external_cc_result_fetcher_.GetExternalCcResult(), external_cc_result_fetcher_.GetExternalCcResult(),
base::BindOnce(&GaiaCookieManagerService::OnSetAccountsFinished, base::BindOnce(&GaiaCookieManagerService::OnSetAccountsFinished,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -1027,7 +1037,6 @@ void GaiaCookieManagerService::HandleNextRequest() { ...@@ -1027,7 +1037,6 @@ void GaiaCookieManagerService::HandleNextRequest() {
} else { } else {
switch (requests_.front().request_type()) { switch (requests_.front().request_type()) {
case GaiaCookieRequestType::ADD_ACCOUNT: case GaiaCookieRequestType::ADD_ACCOUNT:
DCHECK_EQ(0u, requests_.front().accounts().size());
signin_client_->DelayNetworkCall( signin_client_->DelayNetworkCall(
base::BindOnce(&GaiaCookieManagerService::StartFetchingUbertoken, base::BindOnce(&GaiaCookieManagerService::StartFetchingUbertoken,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -1037,14 +1046,12 @@ void GaiaCookieManagerService::HandleNextRequest() { ...@@ -1037,14 +1046,12 @@ void GaiaCookieManagerService::HandleNextRequest() {
break; break;
} }
case GaiaCookieRequestType::LOG_OUT: case GaiaCookieRequestType::LOG_OUT:
DCHECK(requests_.front().accounts().empty());
signin_client_->DelayNetworkCall( signin_client_->DelayNetworkCall(
base::BindOnce(&GaiaCookieManagerService::StartGaiaLogOut, base::BindOnce(&GaiaCookieManagerService::StartGaiaLogOut,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
break; break;
case GaiaCookieRequestType::LIST_ACCOUNTS: case GaiaCookieRequestType::LIST_ACCOUNTS:
listAccountsUnexpectedServerResponseRetried_ = false; listAccountsUnexpectedServerResponseRetried_ = false;
DCHECK(requests_.front().accounts().empty());
uber_token_fetcher_.reset(); uber_token_fetcher_.reset();
signin_client_->DelayNetworkCall( signin_client_->DelayNetworkCall(
base::BindOnce(&GaiaCookieManagerService::StartFetchingListAccounts, base::BindOnce(&GaiaCookieManagerService::StartFetchingListAccounts,
......
...@@ -86,9 +86,11 @@ class GaiaCookieManagerService : public GaiaAuthConsumer, ...@@ -86,9 +86,11 @@ class GaiaCookieManagerService : public GaiaAuthConsumer,
GaiaCookieRequest& operator=(GaiaCookieRequest&&); GaiaCookieRequest& operator=(GaiaCookieRequest&&);
GaiaCookieRequestType request_type() const { return request_type_; } GaiaCookieRequestType request_type() const { return request_type_; }
const std::vector<AccountIdGaiaIdPair>& accounts() const {
return accounts_; // For use in the Request of type SET_ACCOUNTS.
} const std::vector<AccountIdGaiaIdPair>& GetAccounts() const;
gaia::MultiloginMode GetMultiloginMode() const;
// For use in the Request of type ADD_ACCOUNT which must have exactly one // For use in the Request of type ADD_ACCOUNT which must have exactly one
// account_id. // account_id.
const CoreAccountId GetAccountID(); const CoreAccountId GetAccountID();
...@@ -109,27 +111,31 @@ class GaiaCookieManagerService : public GaiaAuthConsumer, ...@@ -109,27 +111,31 @@ class GaiaCookieManagerService : public GaiaAuthConsumer,
static GaiaCookieRequest CreateLogOutRequest(gaia::GaiaSource source); static GaiaCookieRequest CreateLogOutRequest(gaia::GaiaSource source);
static GaiaCookieRequest CreateListAccountsRequest(); static GaiaCookieRequest CreateListAccountsRequest();
static GaiaCookieRequest CreateSetAccountsRequest( static GaiaCookieRequest CreateSetAccountsRequest(
gaia::MultiloginMode mode,
const std::vector<AccountIdGaiaIdPair>& account_ids, const std::vector<AccountIdGaiaIdPair>& account_ids,
gaia::GaiaSource source, gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback callback); SetAccountsInCookieCompletedCallback callback);
private: private:
// Parameters for the SET_ACCOUNTS requests.
struct SetAccountsParams {
SetAccountsParams();
SetAccountsParams(const SetAccountsParams& other);
~SetAccountsParams();
gaia::MultiloginMode mode;
std::vector<AccountIdGaiaIdPair> accounts;
};
GaiaCookieRequest(GaiaCookieRequestType request_type, GaiaCookieRequest(GaiaCookieRequestType request_type,
gaia::GaiaSource source); gaia::GaiaSource source);
GaiaCookieRequest(GaiaCookieRequestType request_type,
const std::vector<AccountIdGaiaIdPair>& accounts,
gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback callback);
GaiaCookieRequest(GaiaCookieRequestType request_type,
const CoreAccountId& account_id,
gaia::GaiaSource source,
AddAccountToCookieCompletedCallback callback);
GaiaCookieRequestType request_type_; GaiaCookieRequestType request_type_;
// For use in the request of type ADD_ACCOUNT. // For use in the request of type ADD_ACCOUNT.
CoreAccountId account_id_; CoreAccountId account_id_;
// For use in the request of type SET_ACCOUNT. // For use in the request of type SET_ACCOUNT.
std::vector<AccountIdGaiaIdPair> accounts_; SetAccountsParams set_accounts_params_;
gaia::GaiaSource source_; gaia::GaiaSource source_;
SetAccountsInCookieCompletedCallback SetAccountsInCookieCompletedCallback
...@@ -222,7 +228,8 @@ class GaiaCookieManagerService : public GaiaAuthConsumer, ...@@ -222,7 +228,8 @@ class GaiaCookieManagerService : public GaiaAuthConsumer,
// Takes list of account_ids and sets the cookie for these accounts regardless // Takes list of account_ids and sets the cookie for these accounts regardless
// of the current cookie state. Removes the accounts that are not in // of the current cookie state. Removes the accounts that are not in
// account_ids and add the missing ones. // account_ids and add the missing ones.
void SetAccountsInCookie(const std::vector<AccountIdGaiaIdPair>& account_ids, void SetAccountsInCookie(gaia::MultiloginMode mode,
const std::vector<AccountIdGaiaIdPair>& account_ids,
gaia::GaiaSource source, gaia::GaiaSource source,
SetAccountsInCookieCompletedCallback SetAccountsInCookieCompletedCallback
set_accounts_in_cookies_completed_callback); set_accounts_in_cookies_completed_callback);
......
...@@ -52,11 +52,13 @@ namespace signin { ...@@ -52,11 +52,13 @@ namespace signin {
OAuthMultiloginHelper::OAuthMultiloginHelper( OAuthMultiloginHelper::OAuthMultiloginHelper(
SigninClient* signin_client, SigninClient* signin_client,
ProfileOAuth2TokenService* token_service, ProfileOAuth2TokenService* token_service,
gaia::MultiloginMode mode,
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>& accounts, const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>& accounts,
const std::string& external_cc_result, const std::string& external_cc_result,
base::OnceCallback<void(SetAccountsInCookieResult)> callback) base::OnceCallback<void(SetAccountsInCookieResult)> callback)
: signin_client_(signin_client), : signin_client_(signin_client),
token_service_(token_service), token_service_(token_service),
mode_(mode),
accounts_(accounts), accounts_(accounts),
external_cc_result_(external_cc_result), external_cc_result_(external_cc_result),
callback_(std::move(callback)) { callback_(std::move(callback)) {
...@@ -124,7 +126,7 @@ void OAuthMultiloginHelper::StartFetchingMultiLogin() { ...@@ -124,7 +126,7 @@ void OAuthMultiloginHelper::StartFetchingMultiLogin() {
DCHECK_EQ(gaia_id_token_pairs_.size(), accounts_.size()); DCHECK_EQ(gaia_id_token_pairs_.size(), accounts_.size());
gaia_auth_fetcher_ = gaia_auth_fetcher_ =
signin_client_->CreateGaiaAuthFetcher(this, gaia::GaiaSource::kChrome); signin_client_->CreateGaiaAuthFetcher(this, gaia::GaiaSource::kChrome);
gaia_auth_fetcher_->StartOAuthMultilogin(gaia_id_token_pairs_, gaia_auth_fetcher_->StartOAuthMultilogin(mode_, gaia_id_token_pairs_,
external_cc_result_); external_cc_result_);
} }
......
...@@ -40,6 +40,7 @@ class OAuthMultiloginHelper : public GaiaAuthConsumer { ...@@ -40,6 +40,7 @@ class OAuthMultiloginHelper : public GaiaAuthConsumer {
OAuthMultiloginHelper( OAuthMultiloginHelper(
SigninClient* signin_client, SigninClient* signin_client,
ProfileOAuth2TokenService* token_service, ProfileOAuth2TokenService* token_service,
gaia::MultiloginMode mode,
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>& const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>&
accounts, accounts,
const std::string& external_cc_result, const std::string& external_cc_result,
...@@ -76,6 +77,7 @@ class OAuthMultiloginHelper : public GaiaAuthConsumer { ...@@ -76,6 +77,7 @@ class OAuthMultiloginHelper : public GaiaAuthConsumer {
int fetcher_retries_ = 0; int fetcher_retries_ = 0;
gaia::MultiloginMode mode_;
// Account ids to set in the cookie. // Account ids to set in the cookie.
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair> accounts_; const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair> accounts_;
// See GaiaCookieManagerService::ExternalCcResultFetcher for details. // See GaiaCookieManagerService::ExternalCcResultFetcher for details.
......
...@@ -179,7 +179,9 @@ class OAuthMultiloginHelperTest : public testing::Test { ...@@ -179,7 +179,9 @@ class OAuthMultiloginHelperTest : public testing::Test {
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair> const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>
accounts) { accounts) {
return std::make_unique<OAuthMultiloginHelper>( return std::make_unique<OAuthMultiloginHelper>(
&test_signin_client_, token_service(), accounts, std::string(), &test_signin_client_, token_service(),
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts,
std::string(),
base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished, base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished,
base::Unretained(this))); base::Unretained(this)));
} }
...@@ -188,7 +190,9 @@ class OAuthMultiloginHelperTest : public testing::Test { ...@@ -188,7 +190,9 @@ class OAuthMultiloginHelperTest : public testing::Test {
const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair> const std::vector<GaiaCookieManagerService::AccountIdGaiaIdPair>
accounts) { accounts) {
return std::make_unique<OAuthMultiloginHelper>( return std::make_unique<OAuthMultiloginHelper>(
&test_signin_client_, token_service(), accounts, kExternalCcResult, &test_signin_client_, token_service(),
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts,
kExternalCcResult,
base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished, base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished,
base::Unretained(this))); base::Unretained(this)));
} }
...@@ -199,12 +203,13 @@ class OAuthMultiloginHelperTest : public testing::Test { ...@@ -199,12 +203,13 @@ class OAuthMultiloginHelperTest : public testing::Test {
std::string multilogin_url() const { std::string multilogin_url() const {
return GaiaUrls::GetInstance()->oauth_multilogin_url().spec() + return GaiaUrls::GetInstance()->oauth_multilogin_url().spec() +
"?source=ChromiumBrowser"; "?source=ChromiumBrowser&mlreuse=0";
} }
std::string multilogin_url_with_external_cc_result() const { std::string multilogin_url_with_external_cc_result() const {
return GaiaUrls::GetInstance()->oauth_multilogin_url().spec() + return GaiaUrls::GetInstance()->oauth_multilogin_url().spec() +
"?source=ChromiumBrowser&externalCcResult=" + kExternalCcResult; "?source=ChromiumBrowser&mlreuse=0&externalCcResult=" +
kExternalCcResult;
} }
MockCookieManager* cookie_manager() { return mock_cookie_manager_; } MockCookieManager* cookie_manager() { return mock_cookie_manager_; }
......
...@@ -110,7 +110,7 @@ class AccountsCookieMutatorTest : public testing::Test { ...@@ -110,7 +110,7 @@ class AccountsCookieMutatorTest : public testing::Test {
GetTestURLLoaderFactory()->AddResponse( GetTestURLLoaderFactory()->AddResponse(
GaiaUrls::GetInstance() GaiaUrls::GetInstance()
->oauth_multilogin_url() ->oauth_multilogin_url()
.Resolve(base::StringPrintf("?source=%s", .Resolve(base::StringPrintf("?source=%s&mlreuse=0",
GaiaConstants::kChromeSource)) GaiaConstants::kChromeSource))
.spec(), .spec(),
std::string(kTestOAuthMultiLoginResponse), net::HTTP_OK); std::string(kTestOAuthMultiLoginResponse), net::HTTP_OK);
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/signin/public/identity_manager/test_identity_manager_observer.h"
#include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h"
#include "google_apis/gaia/core_account_id.h" #include "google_apis/gaia/core_account_id.h"
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/google_service_auth_error.h"
#include "net/cookies/cookie_change_dispatcher.h" #include "net/cookies/cookie_change_dispatcher.h"
#include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_constants.h"
...@@ -1984,7 +1985,8 @@ TEST_F(IdentityManagerTest, ...@@ -1984,7 +1985,8 @@ TEST_F(IdentityManagerTest,
// Needed to insert request in the queue. // Needed to insert request in the queue.
identity_manager()->GetGaiaCookieManagerService()->SetAccountsInCookie( identity_manager()->GetGaiaCookieManagerService()->SetAccountsInCookie(
accounts, gaia::GaiaSource::kChrome, std::move(completion_callback)); gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts,
gaia::GaiaSource::kChrome, std::move(completion_callback));
SimulateOAuthMultiloginFinished( SimulateOAuthMultiloginFinished(
identity_manager()->GetGaiaCookieManagerService(), identity_manager()->GetGaiaCookieManagerService(),
...@@ -2012,7 +2014,8 @@ TEST_F(IdentityManagerTest, ...@@ -2012,7 +2014,8 @@ TEST_F(IdentityManagerTest,
// Needed to insert request in the queue. // Needed to insert request in the queue.
identity_manager()->GetGaiaCookieManagerService()->SetAccountsInCookie( identity_manager()->GetGaiaCookieManagerService()->SetAccountsInCookie(
accounts, gaia::GaiaSource::kChrome, std::move(completion_callback)); gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts,
gaia::GaiaSource::kChrome, std::move(completion_callback));
// Sample an erroneous response. // Sample an erroneous response.
SetAccountsInCookieResult error = SetAccountsInCookieResult::kPersistentError; SetAccountsInCookieResult error = SetAccountsInCookieResult::kPersistentError;
......
...@@ -741,6 +741,7 @@ void GaiaAuthFetcher::StartListAccounts() { ...@@ -741,6 +741,7 @@ void GaiaAuthFetcher::StartListAccounts() {
} }
void GaiaAuthFetcher::StartOAuthMultilogin( void GaiaAuthFetcher::StartOAuthMultilogin(
gaia::MultiloginMode mode,
const std::vector<MultiloginTokenIDPair>& accounts, const std::vector<MultiloginTokenIDPair>& accounts,
const std::string& external_cc_result) { const std::string& external_cc_result) {
DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
...@@ -759,12 +760,16 @@ void GaiaAuthFetcher::StartOAuthMultilogin( ...@@ -759,12 +760,16 @@ void GaiaAuthFetcher::StartOAuthMultilogin(
base::JoinString(authorization_header_parts, ",").c_str()); base::JoinString(authorization_header_parts, ",").c_str());
std::string source_string = net::EscapeUrlEncodedData(source_, true); std::string source_string = net::EscapeUrlEncodedData(source_, true);
std::string parameters = std::string parameters = base::StringPrintf(
external_cc_result.empty() "?source=%s&mlreuse=%i", source_string.c_str(),
? base::StringPrintf("?source=%s", source_string.c_str()) mode == gaia::MultiloginMode::MULTILOGIN_PRESERVE_COOKIE_ACCOUNTS_ORDER
: base::StringPrintf( ? 1
"?source=%s&externalCcResult=%s", source_string.c_str(), : 0);
net::EscapeUrlEncodedData(external_cc_result, true).c_str()); if (!external_cc_result.empty()) {
base::StringAppendF(
&parameters, "&externalCcResult=%s",
net::EscapeUrlEncodedData(external_cc_result, true).c_str());
}
net::NetworkTrafficAnnotationTag traffic_annotation = net::NetworkTrafficAnnotationTag traffic_annotation =
net::DefineNetworkTrafficAnnotation("gaia_auth_multilogin", R"( net::DefineNetworkTrafficAnnotation("gaia_auth_multilogin", R"(
......
...@@ -163,7 +163,8 @@ class GaiaAuthFetcher { ...@@ -163,7 +163,8 @@ class GaiaAuthFetcher {
const std::string& service); const std::string& service);
// Starts a request to get the cookie for list of accounts. // Starts a request to get the cookie for list of accounts.
void StartOAuthMultilogin(const std::vector<MultiloginTokenIDPair>& accounts, void StartOAuthMultilogin(gaia::MultiloginMode mode,
const std::vector<MultiloginTokenIDPair>& accounts,
const std::string& external_cc_result); const std::string& external_cc_result);
// Starts a request to list the accounts in the GAIA cookie. // Starts a request to list the accounts in the GAIA cookie.
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
// //
// A complete set of unit tests for GaiaAuthFetcher. // A complete set of unit tests for GaiaAuthFetcher.
// Originally ported from GoogleAuthenticator tests. // Originally ported from GoogleAuthenticator tests.
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include <string> #include <string>
#include <vector> #include <vector>
...@@ -18,7 +19,6 @@ ...@@ -18,7 +19,6 @@
#include "base/values.h" #include "base/values.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "google_apis/gaia/gaia_auth_consumer.h" #include "google_apis/gaia/gaia_auth_consumer.h"
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_constants.h"
#include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/gaia_urls.h"
#include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/google_service_auth_error.h"
...@@ -336,6 +336,38 @@ TEST_F(GaiaAuthFetcherTest, MergeSessionSuccess) { ...@@ -336,6 +336,38 @@ TEST_F(GaiaAuthFetcherTest, MergeSessionSuccess) {
EXPECT_FALSE(auth.HasPendingFetch()); EXPECT_FALSE(auth.HasPendingFetch());
} }
TEST_F(GaiaAuthFetcherTest, MultiloginRequestFormat) {
MockGaiaConsumer consumer;
TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory());
std::vector<GaiaAuthFetcher::MultiloginTokenIDPair> accounts;
accounts.push_back({"token1", "id1"});
accounts.push_back({"token2", "id2"});
auth.StartOAuthMultilogin(
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts,
"cc_result");
ASSERT_TRUE(auth.HasPendingFetch());
const network::ResourceRequest& request0 = received_requests_.at(0);
EXPECT_EQ("POST", request0.method);
std::string header;
request0.headers.GetHeader("Authorization", &header);
EXPECT_EQ("MultiBearer id1:token1,id2:token2", header);
EXPECT_EQ("source=ChromiumBrowser&mlreuse=0&externalCcResult=cc_result",
request0.url.query());
auth.TestOnURLLoadCompleteInternal(net::OK, net::HTTP_OK, std::string());
EXPECT_FALSE(auth.HasPendingFetch());
auth.StartOAuthMultilogin(
gaia::MultiloginMode::MULTILOGIN_PRESERVE_COOKIE_ACCOUNTS_ORDER, accounts,
"cc_result");
ASSERT_TRUE(auth.HasPendingFetch());
const network::ResourceRequest& request1 = received_requests_.at(1);
EXPECT_EQ("source=ChromiumBrowser&mlreuse=1&externalCcResult=cc_result",
request1.url.query());
}
TEST_F(GaiaAuthFetcherTest, MultiloginSuccess) { TEST_F(GaiaAuthFetcherTest, MultiloginSuccess) {
MockGaiaConsumer consumer; MockGaiaConsumer consumer;
EXPECT_CALL(consumer, OnOAuthMultiloginFinished(::testing::Property( EXPECT_CALL(consumer, OnOAuthMultiloginFinished(::testing::Property(
...@@ -345,6 +377,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginSuccess) { ...@@ -345,6 +377,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginSuccess) {
TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory());
auth.StartOAuthMultilogin( auth.StartOAuthMultilogin(
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER,
std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string());
EXPECT_TRUE(auth.HasPendingFetch()); EXPECT_TRUE(auth.HasPendingFetch());
...@@ -380,6 +413,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureNetError) { ...@@ -380,6 +413,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureNetError) {
TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory());
auth.StartOAuthMultilogin( auth.StartOAuthMultilogin(
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER,
std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string());
EXPECT_TRUE(auth.HasPendingFetch()); EXPECT_TRUE(auth.HasPendingFetch());
...@@ -415,6 +449,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureServerError) { ...@@ -415,6 +449,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureServerError) {
TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory());
auth.StartOAuthMultilogin( auth.StartOAuthMultilogin(
gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER,
std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string());
EXPECT_TRUE(auth.HasPendingFetch()); EXPECT_TRUE(auth.HasPendingFetch());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment