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