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