user_cloud_policy_token_forwarder.h revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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 "chrome/browser/policy/cloud/cloud_policy_service.h"
10#include "chrome/browser/signin/oauth2_token_service.h"
11#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
12
13class ProfileOAuth2TokenService;
14
15namespace policy {
16
17class UserCloudPolicyManagerChromeOS;
18
19// A PKS that observes a ProfileOAuth2TokenService and mints the policy access
20// token for the UserCloudPolicyManagerChromeOS, when the token service becomes
21// ready. This service decouples the UserCloudPolicyManagerChromeOS from
22// depending directly on the ProfileOAuth2TokenService, since it is initialized
23// much earlier.
24class UserCloudPolicyTokenForwarder : public BrowserContextKeyedService,
25                                      public OAuth2TokenService::Observer,
26                                      public OAuth2TokenService::Consumer,
27                                      public CloudPolicyService::Observer {
28 public:
29  // The factory of this PKS depends on the factories of these two arguments,
30  // so this object will be Shutdown() first and these pointers can be used
31  // until that point.
32  UserCloudPolicyTokenForwarder(UserCloudPolicyManagerChromeOS* manager,
33                                ProfileOAuth2TokenService* token_service);
34  virtual ~UserCloudPolicyTokenForwarder();
35
36  // BrowserContextKeyedService:
37  virtual void Shutdown() OVERRIDE;
38
39  // OAuth2TokenService::Observer:
40  virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
41
42  // OAuth2TokenService::Consumer:
43  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
44                                 const std::string& access_token,
45                                 const base::Time& expiration_time) OVERRIDE;
46  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
47                                 const GoogleServiceAuthError& error) OVERRIDE;
48
49  // CloudPolicyService::Observer:
50  virtual void OnInitializationCompleted(CloudPolicyService* service) OVERRIDE;
51
52 private:
53  void Initialize();
54
55  void RequestAccessToken();
56
57  UserCloudPolicyManagerChromeOS* manager_;
58  ProfileOAuth2TokenService* token_service_;
59  scoped_ptr<OAuth2TokenService::Request> request_;
60
61  DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyTokenForwarder);
62};
63
64}  // namespace policy
65
66#endif  // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_TOKEN_FORWARDER_H_
67