blob: 2bbd4207d1be60181f06543748afe57934644a9d [file] [log] [blame]
// Copyright 2014 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.
#include "components/signin/core/browser/signin_tracker.h"
#include "components/signin/core/browser/account_reconcilor.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_client.h"
#include "google_apis/gaia/gaia_constants.h"
SigninTracker::SigninTracker(ProfileOAuth2TokenService* token_service,
SigninManagerBase* signin_manager,
AccountReconcilor* account_reconcilor,
SigninClient* client,
Observer* observer)
: token_service_(token_service),
signin_manager_(signin_manager),
account_reconcilor_(account_reconcilor),
client_(client),
observer_(observer) {
Initialize();
}
SigninTracker::~SigninTracker() {
signin_manager_->RemoveObserver(this);
token_service_->RemoveObserver(this);
if (account_reconcilor_) {
account_reconcilor_->RemoveMergeSessionObserver(this);
#if !defined(OS_CHROMEOS)
} else if (client_->ShouldMergeSigninCredentialsIntoCookieJar()) {
SigninManager* manager = static_cast<SigninManager*>(signin_manager_);
manager->RemoveMergeSessionObserver(this);
#endif
}
}
void SigninTracker::Initialize() {
DCHECK(observer_);
signin_manager_->AddObserver(this);
token_service_->AddObserver(this);
}
void SigninTracker::GoogleSigninFailed(const GoogleServiceAuthError& error) {
observer_->SigninFailed(error);
}
void SigninTracker::OnRefreshTokenAvailable(const std::string& account_id) {
if (account_id != signin_manager_->GetAuthenticatedAccountId())
return;
if (account_reconcilor_) {
account_reconcilor_->AddMergeSessionObserver(this);
#if !defined(OS_CHROMEOS)
} else if (client_->ShouldMergeSigninCredentialsIntoCookieJar()) {
SigninManager* manager = static_cast<SigninManager*>(signin_manager_);
manager->AddMergeSessionObserver(this);
#endif
}
observer_->SigninSuccess();
}
void SigninTracker::OnRefreshTokenRevoked(const std::string& account_id) {
NOTREACHED();
}
void SigninTracker::MergeSessionCompleted(
const std::string& account_id,
const GoogleServiceAuthError& error) {
observer_->MergeSessionComplete(error);
}