12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef COMPONENTS_SIGNIN_CORE_BROWSER_ABOUT_SIGNIN_INTERNALS_H_ 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define COMPONENTS_SIGNIN_CORE_BROWSER_ABOUT_SIGNIN_INTERNALS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/linked_ptr.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/signin/core/browser/signin_client.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/signin_internals_util.h" 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "google_apis/gaia/gaia_auth_consumer.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class GaiaAuthFetcher; 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass ProfileOAuth2TokenService; 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass SigninClient; 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass SigninManagerBase; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Many values in SigninStatus are also associated with a timestamp. 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This makes it easier to keep values and their associated times together. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef std::pair<std::string, std::string> TimedSigninStatusValue; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class collects authentication, signin and token information 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to propagate to about:signin-internals via SigninInternalsUI. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AboutSigninInternals 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public KeyedService, 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public signin_internals_util::SigninDiagnosticsObserver, 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public OAuth2TokenService::DiagnosticsObserver, 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public GaiaAuthConsumer { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Observer { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |info| will contain the dictionary of signin_status_ values as indicated 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in the comments for GetSigninStatus() below. 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnSigninStateChanged(const base::DictionaryValue* info) = 0; 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Notification that the cookie accounts are ready to be displayed. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnCookieAccountsFetched(const base::DictionaryValue* info) = 0; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AboutSigninInternals(ProfileOAuth2TokenService* token_service, 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninManagerBase* signin_manager); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AboutSigninInternals(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Each instance of SigninInternalsUI adds itself as an observer to be 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // notified of all updates that AboutSigninInternals receives. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddSigninObserver(Observer* observer); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveSigninObserver(Observer* observer); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Pulls all signin values that have been persisted in the user prefs. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RefreshSigninPrefs(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SigninManager::SigninDiagnosticsObserver implementation. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NotifySigninValueChanged( 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const signin_internals_util::UntimedSigninStatusField& field, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& value) OVERRIDE; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NotifySigninValueChanged( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const signin_internals_util::TimedSigninStatusField& field, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& value) OVERRIDE; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void Initialize(SigninClient* client); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService implementation. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a dictionary of values in signin_status_ for use in 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // about:signin-internals. The values are formatted as shown - 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // { "signin_info" : 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // [ {"title": "Basic Information", 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "data": [List of {"label" : "foo-field", "value" : "foo"} elems] 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // }, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // { "title": "Detailed Information", 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "data": [List of {"label" : "foo-field", "value" : "foo"} elems] 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // }], 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "token_info" : 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // [ List of {"name": "foo-name", "token" : "foo-token", 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "status": "foo_stat", "time" : "foo_time"} elems] 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // } 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> GetSigninStatus(); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Triggers a ListAccounts call to acquire a list of the email addresses 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // corresponding to the cookies residing on the current cookie jar. 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void GetCookieAccountsAsync(); 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // OAuth2TokenService::DiagnosticsObserver implementations. 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnAccessTokenRequested( 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& account_id, 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& consumer_id, 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const OAuth2TokenService::ScopeSet& scopes) OVERRIDE; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnFetchAccessTokenComplete( 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& account_id, 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& consumer_id, 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const OAuth2TokenService::ScopeSet& scopes, 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GoogleServiceAuthError error, 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time expiration_time) OVERRIDE; 106e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void OnTokenRemoved(const std::string& account_id, 107e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const OAuth2TokenService::ScopeSet& scopes) 108e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch OVERRIDE; 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void OnRefreshTokenReceived(std::string status); 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void OnAuthenticationResultReceived(std::string status); 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Encapsulates diagnostic information about tokens for different services. 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct TokenInfo { 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TokenInfo(const std::string& consumer_id, 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const OAuth2TokenService::ScopeSet& scopes); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~TokenInfo(); 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* ToValue() const; 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static bool LessThan(const TokenInfo* a, const TokenInfo* b); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called when the token is invalidated. 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Invalidate(); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string consumer_id; // service that requested the token. 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OAuth2TokenService::ScopeSet scopes; // Scoped that are requested. 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time request_time; 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time receive_time; 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time expiration_time; 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GoogleServiceAuthError error; 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool removed_; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Map account id to tokens associated to the account. 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef std::map<std::string, std::vector<TokenInfo*> > TokenInfoMap; 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Encapsulates both authentication and token related information. Used 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // by SigninInternals to maintain information that needs to be shown in 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the about:signin-internals page. 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct SigninStatus { 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::string> untimed_signin_fields; 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<TimedSigninStatusValue> timed_signin_fields; 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TokenInfoMap token_info_map; 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninStatus(); 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~SigninStatus(); 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TokenInfo* FindToken(const std::string& account_id, 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& consumer_id, 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const OAuth2TokenService::ScopeSet& scopes); 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns a dictionary with the following form: 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // { "signin_info" : 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // [ {"title": "Basic Information", 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "data": [List of {"label" : "foo-field", "value" : "foo"} elems] 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // }, 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // { "title": "Detailed Information", 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "data": [List of {"label" : "foo-field", "value" : "foo"} elems] 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // }], 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "token_info" : 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // [ List of 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // { "title": account id, 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "data": [List of {"service" : service name, 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "scopes" : requested scoped, 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "request_time" : request time, 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "status" : request status} elems] 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // }], 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // } 170e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<base::DictionaryValue> ToValue(std::string product_version); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyObservers(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Overriden from GaiaAuthConsumer. 1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnListAccountsSuccess(const std::string& data) OVERRIDE; 1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnListAccountsFailure(const GoogleServiceAuthError& error) 1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OVERRIDE; 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Callback for ListAccounts. Once the email addresses are fetched from GAIA, 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // they are pushed to the signin_internals_ui. 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnListAccountsComplete( 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<std::pair<std::string, bool> >& gaia_accounts); 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Called when a cookie changes. If the cookie relates to a GAIA LSID cookie, 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // then we call ListAccounts and update the UI element. 1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCookieChanged(const net::CanonicalCookie* cookie); 1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 190e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Weak pointer to the token service. 191e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ProfileOAuth2TokenService* token_service_; 192e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 193e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Weak pointer to the signin manager. 194e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninManagerBase* signin_manager_; 195e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 196e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Weak pointer to the client. 197e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SigninClient* client_; 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Fetcher for information about accounts in the cookie jar from GAIA. 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<GaiaAuthFetcher> gaia_fetcher_; 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Encapsulates the actual signin and token related values. 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Most of the values are mirrored in the prefs for persistence. 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninStatus signin_status_; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ObserverList<Observer> signin_observers_; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<SigninClient::CookieChangedCallbackList::Subscription> 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cookie_changed_subscription_; 2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AboutSigninInternals); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 214e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif // COMPONENTS_SIGNIN_CORE_BROWSER_ABOUT_SIGNIN_INTERNALS_H_ 215