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#ifndef GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_ 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_ 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <string> 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/compiler_specific.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/macros.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/observer_list.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "google_apis/gaia/oauth2_token_service.h" 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Helper class that provides access to information about logged-in GAIA 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// accounts. Each instance of this class references an entity who may be logged 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// in to zero, one or multiple GAIA accounts. The class provides access to the 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// OAuth tokens for all logged-in accounts and indicates which of these is 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// currently active. 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// The main purpose of this abstraction layer is to isolate consumers of GAIA 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// information from the different sources and various token service 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// implementations. Whenever possible, consumers of GAIA information should be 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// provided with an instance of this class instead of accessing other GAIA APIs 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// directly. 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass IdentityProvider : public OAuth2TokenService::Observer { 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch class Observer { 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Called when a GAIA account logs in and becomes the active account. All 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // account information is available when this method is called and all 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |IdentityProvider| methods will return valid data. 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnActiveAccountLogin() {} 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Called when the active GAIA account logs out. The account information may 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // have been cleared already when this method is called. The 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |IdentityProvider| methods may return inconsistent or outdated 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // information if called from within OnLogout(). 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnActiveAccountLogout() {} 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~Observer(); 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch }; 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~IdentityProvider(); 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Adds and removes observers that will be notified of changes to the refresh 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // token availability for the active account. 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AddActiveAccountRefreshTokenObserver( 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService::Observer* observer); 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void RemoveActiveAccountRefreshTokenObserver( 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OAuth2TokenService::Observer* observer); 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Gets the active account's user name. 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual std::string GetActiveUsername() = 0; 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Gets the active account's account ID. 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual std::string GetActiveAccountId() = 0; 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Gets the token service vending OAuth tokens for all logged-in accounts. 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual OAuth2TokenService* GetTokenService() = 0; 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Requests login to a GAIA account. Implementations can show a login UI, log 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // in automatically if sufficient credentials are available or may ignore the 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // request. Returns true if the login request was processed and false if it 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // was ignored. 660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual bool RequestLogin() = 0; 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AddObserver(Observer* observer); 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void RemoveObserver(Observer* observer); 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // OAuth2TokenService::Observer: 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE; 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE; 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnRefreshTokensLoaded() OVERRIDE; 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IdentityProvider(); 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Fires an OnActiveAccountLogin notification. 800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void FireOnActiveAccountLogin(); 810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Fires an OnActiveAccountLogout notification. 830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void FireOnActiveAccountLogout(); 840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ObserverList<Observer, true> observers_; 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ObserverList<OAuth2TokenService::Observer, true> token_service_observers_; 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int token_service_observer_count_; 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DISALLOW_COPY_AND_ASSIGN(IdentityProvider); 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_ 94