1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_TOKEN_FORWARDER_H_
6#define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_TOKEN_FORWARDER_H_
7
8#include "base/basictypes.h"
9#include "components/keyed_service/core/keyed_service.h"
10#include "components/policy/core/common/cloud/cloud_policy_service.h"
11#include "google_apis/gaia/oauth2_token_service.h"
12
13class ProfileOAuth2TokenService;
14class SigninManagerBase;
15
16namespace policy {
17
18class UserCloudPolicyManagerChromeOS;
19
20// A PKS that observes a ProfileOAuth2TokenService and mints the policy access
21// token for the UserCloudPolicyManagerChromeOS, when the token service becomes
22// ready. This service decouples the UserCloudPolicyManagerChromeOS from
23// depending directly on the ProfileOAuth2TokenService, since it is initialized
24// much earlier.
25class UserCloudPolicyTokenForwarder : public KeyedService,
26                                      public OAuth2TokenService::Observer,
27                                      public OAuth2TokenService::Consumer,
28                                      public CloudPolicyService::Observer {
29 public:
30  // The factory of this PKS depends on the factories of these two arguments,
31  // so this object will be Shutdown() first and these pointers can be used
32  // until that point.
33  UserCloudPolicyTokenForwarder(UserCloudPolicyManagerChromeOS* manager,
34                                ProfileOAuth2TokenService* token_service,
35                                SigninManagerBase* signin_manager);
36  virtual ~UserCloudPolicyTokenForwarder();
37
38  // KeyedService:
39  virtual void Shutdown() OVERRIDE;
40
41  // OAuth2TokenService::Observer:
42  virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
43
44  // OAuth2TokenService::Consumer:
45  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
46                                 const std::string& access_token,
47                                 const base::Time& expiration_time) OVERRIDE;
48  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
49                                 const GoogleServiceAuthError& error) OVERRIDE;
50
51  // CloudPolicyService::Observer:
52  virtual void OnInitializationCompleted(CloudPolicyService* service) OVERRIDE;
53
54 private:
55  void Initialize();
56
57  void RequestAccessToken();
58
59  UserCloudPolicyManagerChromeOS* manager_;
60  ProfileOAuth2TokenService* token_service_;
61  SigninManagerBase* signin_manager_;
62  scoped_ptr<OAuth2TokenService::Request> request_;
63
64  DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyTokenForwarder);
65};
66
67}  // namespace policy
68
69#endif  // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_TOKEN_FORWARDER_H_
70