• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_USER_POLICY_IDENTITY_STRATEGY_H_
6 #define CHROME_BROWSER_POLICY_USER_POLICY_IDENTITY_STRATEGY_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "base/file_path.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/weak_ptr.h"
14 #include "chrome/browser/policy/cloud_policy_identity_strategy.h"
15 #include "content/common/notification_observer.h"
16 #include "content/common/notification_registrar.h"
17 
18 class Profile;
19 
20 namespace policy {
21 
22 class DeviceManagementBackend;
23 
24 // A token provider implementation that provides a user device token for the
25 // user corresponding to a given profile.
26 class UserPolicyIdentityStrategy : public CloudPolicyIdentityStrategy,
27                                    public NotificationObserver {
28  public:
29   UserPolicyIdentityStrategy(Profile* profile,
30                              const FilePath& token_cache_file);
31   virtual ~UserPolicyIdentityStrategy();
32 
33   // CloudPolicyIdentityStrategy implementation:
34   virtual std::string GetDeviceToken() OVERRIDE;
35   virtual std::string GetDeviceID() OVERRIDE;
36   virtual std::string GetMachineID() OVERRIDE;
37   virtual std::string GetMachineModel() OVERRIDE;
38   virtual em::DeviceRegisterRequest_Type GetPolicyRegisterType() OVERRIDE;
39   virtual std::string GetPolicyType() OVERRIDE;
40   virtual bool GetCredentials(std::string* username,
41                               std::string* auth_token) OVERRIDE;
42   virtual void OnDeviceTokenAvailable(const std::string& token) OVERRIDE;
43 
44  private:
45   class TokenCache;
46 
47   // Checks whether a new token should be fetched and if so, sends out a
48   // notification.
49   void CheckAndTriggerFetch();
50 
51   // Gets the current user.
52   std::string GetCurrentUser();
53 
54   // Called from the token cache when the token has been loaded.
55   void OnCacheLoaded(const std::string& token, const std::string& device_id);
56 
57   // NotificationObserver method overrides:
58   virtual void Observe(NotificationType type,
59                        const NotificationSource& source,
60                        const NotificationDetails& details);
61 
62   // The profile this provider is associated with.
63   Profile* profile_;
64 
65   // Keeps the on-disk copy of the token.
66   scoped_refptr<TokenCache> cache_;
67 
68   // The device ID we use.
69   std::string device_id_;
70 
71   // Current device token. Empty if not available.
72   std::string device_token_;
73 
74   // Registers the provider for notification of successful Gaia logins.
75   NotificationRegistrar registrar_;
76 
77   // Allows to construct weak ptrs.
78   base::WeakPtrFactory<UserPolicyIdentityStrategy> weak_ptr_factory_;
79 
80   DISALLOW_COPY_AND_ASSIGN(UserPolicyIdentityStrategy);
81 };
82 
83 }  // namespace policy
84 
85 #endif  // CHROME_BROWSER_POLICY_USER_POLICY_IDENTITY_STRATEGY_H_
86