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