10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "google_apis/gaia/identity_provider.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIdentityProvider::Observer::~Observer() {} 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 90529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIdentityProvider::~IdentityProvider() {} 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::AddActiveAccountRefreshTokenObserver( 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService::Observer* observer) { 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService* token_service = GetTokenService(); 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!token_service || token_service_observers_.HasObserver(observer)) 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service_observers_.AddObserver(observer); 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (++token_service_observer_count_ == 1) 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service->AddObserver(this); 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::RemoveActiveAccountRefreshTokenObserver( 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService::Observer* observer) { 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService* token_service = GetTokenService(); 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!token_service || !token_service_observers_.HasObserver(observer)) 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service_observers_.RemoveObserver(observer); 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (--token_service_observer_count_ == 0) 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service->RemoveObserver(this); 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::AddObserver(Observer* observer) { 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observers_.AddObserver(observer); 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::RemoveObserver(Observer* observer) { 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observers_.RemoveObserver(observer); 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::OnRefreshTokenAvailable(const std::string& account_id) { 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (account_id != GetActiveAccountId()) 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FOR_EACH_OBSERVER(OAuth2TokenService::Observer, 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service_observers_, 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OnRefreshTokenAvailable(account_id)); 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::OnRefreshTokenRevoked(const std::string& account_id) { 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (account_id != GetActiveAccountId()) 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FOR_EACH_OBSERVER(OAuth2TokenService::Observer, 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service_observers_, 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OnRefreshTokenRevoked(account_id)); 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::OnRefreshTokensLoaded() { 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FOR_EACH_OBSERVER(OAuth2TokenService::Observer, 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch token_service_observers_, 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OnRefreshTokensLoaded()); 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 630529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIdentityProvider::IdentityProvider() : token_service_observer_count_(0) {} 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::FireOnActiveAccountLogin() { 660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FOR_EACH_OBSERVER(Observer, observers_, OnActiveAccountLogin()); 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid IdentityProvider::FireOnActiveAccountLogout() { 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FOR_EACH_OBSERVER(Observer, observers_, OnActiveAccountLogout()); 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 72