1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/signin/core/browser/signin_tracker.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/signin/core/browser/account_reconcilor.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_client.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochSigninTracker::SigninTracker(ProfileOAuth2TokenService* token_service, 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninManagerBase* signin_manager, 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AccountReconcilor* account_reconcilor, 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninClient* client, 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Observer* observer) 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : token_service_(token_service), 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch signin_manager_(signin_manager), 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch account_reconcilor_(account_reconcilor), 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch client_(client), 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch observer_(observer) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Initialize(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninTracker::~SigninTracker() { 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch signin_manager_->RemoveObserver(this); 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch token_service_->RemoveObserver(this); 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (account_reconcilor_) { 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch account_reconcilor_->RemoveMergeSessionObserver(this); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_CHROMEOS) 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else if (client_->ShouldMergeSigninCredentialsIntoCookieJar()) { 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninManager* manager = static_cast<SigninManager*>(signin_manager_); 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch manager->RemoveMergeSessionObserver(this); 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninTracker::Initialize() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(observer_); 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch signin_manager_->AddObserver(this); 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch token_service_->AddObserver(this); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SigninTracker::GoogleSigninFailed(const GoogleServiceAuthError& error) { 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer_->SigninFailed(error); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void SigninTracker::OnRefreshTokenAvailable(const std::string& account_id) { 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (account_id != signin_manager_->GetAuthenticatedAccountId()) 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (account_reconcilor_) { 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch account_reconcilor_->AddMergeSessionObserver(this); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_CHROMEOS) 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else if (client_->ShouldMergeSigninCredentialsIntoCookieJar()) { 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninManager* manager = static_cast<SigninManager*>(signin_manager_); 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch manager->AddMergeSessionObserver(this); 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer_->SigninSuccess(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void SigninTracker::OnRefreshTokenRevoked(const std::string& account_id) { 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NOTREACHED(); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SigninTracker::MergeSessionCompleted( 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& account_id, 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GoogleServiceAuthError& error) { 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) observer_->MergeSessionComplete(error); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 74