OLD | NEW |
| (Empty) |
1 // Copyright 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_POLICY_CLOUD_CLOUD_POLICY_CLIENT_REGISTRATION_HELPER_H_ | |
6 #define CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_CLIENT_REGISTRATION_HELPER_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/basictypes.h" | |
11 #include "base/callback.h" | |
12 #include "base/compiler_specific.h" | |
13 #include "base/memory/scoped_ptr.h" | |
14 #include "chrome/browser/policy/cloud/cloud_policy_client.h" | |
15 #include "chrome/browser/policy/cloud/user_info_fetcher.h" | |
16 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" | |
17 | |
18 class OAuth2TokenService; | |
19 | |
20 namespace net { | |
21 class URLRequestContextGetter; | |
22 } | |
23 | |
24 namespace policy { | |
25 | |
26 // Helper class that registers a CloudPolicyClient. It fetches an OAuth2 token | |
27 // for the DM service if needed, and checks with Gaia if the account has policy | |
28 // management enabled. | |
29 class CloudPolicyClientRegistrationHelper : public UserInfoFetcher::Delegate, | |
30 public CloudPolicyClient::Observer { | |
31 public: | |
32 // |context| and |client| are not owned and must outlive this object. | |
33 // If |should_force_load_policy| then the cloud policy registration is | |
34 // performed even if Gaia indicates that this account doesn't have management | |
35 // enabled. | |
36 CloudPolicyClientRegistrationHelper( | |
37 CloudPolicyClient* client, | |
38 bool should_force_load_policy, | |
39 enterprise_management::DeviceRegisterRequest::Type registration_type); | |
40 virtual ~CloudPolicyClientRegistrationHelper(); | |
41 | |
42 // Starts the client registration process. This version uses the | |
43 // supplied OAuth2TokenService to mint the new token for the userinfo | |
44 // and DM services, using the |account_id|. | |
45 // |callback| is invoked when the registration is complete. | |
46 void StartRegistration( | |
47 OAuth2TokenService* token_service, | |
48 const std::string& account_id, | |
49 const base::Closure& callback); | |
50 | |
51 #if !defined(OS_ANDROID) | |
52 // Starts the client registration process. The |login_refresh_token| is used | |
53 // to mint a new token for the userinfo and DM services. | |
54 // |callback| is invoked when the registration is complete. | |
55 void StartRegistrationWithLoginToken(const std::string& login_refresh_token, | |
56 const base::Closure& callback); | |
57 #endif | |
58 | |
59 private: | |
60 class TokenServiceHelper; | |
61 #if !defined(OS_ANDROID) | |
62 class LoginTokenHelper; | |
63 #endif | |
64 | |
65 void OnTokenFetched(const std::string& oauth_access_token); | |
66 | |
67 // UserInfoFetcher::Delegate implementation: | |
68 virtual void OnGetUserInfoSuccess( | |
69 const base::DictionaryValue* response) OVERRIDE; | |
70 virtual void OnGetUserInfoFailure( | |
71 const GoogleServiceAuthError& error) OVERRIDE; | |
72 | |
73 // CloudPolicyClient::Observer implementation: | |
74 virtual void OnPolicyFetched(CloudPolicyClient* client) OVERRIDE; | |
75 virtual void OnRegistrationStateChanged(CloudPolicyClient* client) OVERRIDE; | |
76 virtual void OnClientError(CloudPolicyClient* client) OVERRIDE; | |
77 | |
78 // Invoked when the registration request has been completed. | |
79 void RequestCompleted(); | |
80 | |
81 // Internal helper class that uses OAuth2TokenService to fetch an OAuth | |
82 // access token. On desktop, this is only used after the user has signed in - | |
83 // desktop platforms use LoginTokenHelper for policy fetches performed before | |
84 // signin is complete. | |
85 scoped_ptr<TokenServiceHelper> token_service_helper_; | |
86 | |
87 #if !defined(OS_ANDROID) | |
88 // Special desktop-only helper to fetch an OAuth access token prior to | |
89 // the completion of signin. Not used on Android since all token fetching | |
90 // is done via OAuth2TokenService. | |
91 scoped_ptr<LoginTokenHelper> login_token_helper_; | |
92 #endif | |
93 | |
94 // Helper class for fetching information from GAIA about the currently | |
95 // signed-in user. | |
96 scoped_ptr<UserInfoFetcher> user_info_fetcher_; | |
97 | |
98 // Access token used to register the CloudPolicyClient and also access | |
99 // GAIA to get information about the signed in user. | |
100 std::string oauth_access_token_; | |
101 | |
102 net::URLRequestContextGetter* context_; | |
103 CloudPolicyClient* client_; | |
104 bool should_force_load_policy_; | |
105 enterprise_management::DeviceRegisterRequest::Type registration_type_; | |
106 base::Closure callback_; | |
107 | |
108 DISALLOW_COPY_AND_ASSIGN(CloudPolicyClientRegistrationHelper); | |
109 }; | |
110 | |
111 } // namespace policy | |
112 | |
113 #endif // CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_CLIENT_REGISTRATION_HELPER_H
_ | |
OLD | NEW |