device_oauth2_token_service.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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_CHROMEOS_SETTINGS_DEVICE_OAUTH2_TOKEN_SERVICE_H_
6#define CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_OAUTH2_TOKEN_SERVICE_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/gtest_prod_util.h"
12#include "base/memory/scoped_ptr.h"
13#include "chrome/browser/signin/oauth2_token_service.h"
14#include "net/url_request/url_request_context_getter.h"
15
16namespace net {
17class URLRequestContextGetter;
18}
19
20class GoogleServiceAuthError;
21class PrefRegistrySimple;
22class PrefService;
23class Profile;
24
25namespace chromeos {
26
27// DeviceOAuth2TokenService retrieves OAuth2 access tokens for a given
28// set of scopes using the device-level OAuth2 any-api refresh token
29// obtained during enterprise device enrollment.
30//
31// See |OAuth2TokenService| for usage details.
32//
33// Note that requests must be made from the UI thread.
34class DeviceOAuth2TokenService : public OAuth2TokenService {
35 public:
36  // Persist the given refresh token on the device.  Overwrites any previous
37  // value.  Should only be called during initial device setup.
38  void SetAndSaveRefreshToken(const std::string& refresh_token);
39
40  static void RegisterPrefs(PrefRegistrySimple* registry);
41
42  virtual std::string GetRefreshToken() OVERRIDE;
43
44 private:
45  friend class DeviceOAuth2TokenServiceFactory;
46  FRIEND_TEST_ALL_PREFIXES(DeviceOAuth2TokenServiceTest, SaveEncryptedToken);
47
48  // Use DeviceOAuth2TokenServiceFactory to get an instance of this class.
49  explicit DeviceOAuth2TokenService(net::URLRequestContextGetter* getter,
50                                    PrefService* local_state);
51  virtual ~DeviceOAuth2TokenService();
52
53  // Cache the decrypted refresh token, so we only decrypt once.
54  std::string refresh_token_;
55  PrefService* local_state_;
56  DISALLOW_COPY_AND_ASSIGN(DeviceOAuth2TokenService);
57};
58
59}  // namespace chromeos
60
61#endif  // CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_OAUTH2_TOKEN_SERVICE_H_
62