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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_
6 #define CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "base/time/time.h"
14 #include "components/keyed_service/core/keyed_service.h"
15 #include "components/signin/core/browser/signin_manager_base.h"
19 namespace extensions
{
21 // This class caches tokens for the current user. It will clear tokens out
22 // when the user logs out or after the specified timeout interval, or when
23 // the instance of chrome shuts down.
24 class TokenCacheService
: public KeyedService
,
25 public SigninManagerBase::Observer
{
27 explicit TokenCacheService(Profile
* profile
);
28 ~TokenCacheService() override
;
30 // Store a token for the currently logged in user. We will look it up later by
31 // the name given here, and we will expire the token after the timeout. For a
32 // timeout of 0, we never expire the token. After time_to_live expires, the
33 // token will be expired.
34 void StoreToken(const std::string
& token_name
, const std::string
& token_value
,
35 base::TimeDelta time_to_live
);
37 // Retrieve a token for the currently logged in user. This returns an empty
38 // string if the token was not found or timed out.
39 std::string
RetrieveToken(const std::string
& token_name
);
42 void Shutdown() override
;
45 friend class TokenCacheTest
;
46 FRIEND_TEST_ALL_PREFIXES(TokenCacheTest
, SignoutTest
);
48 // SigninManagerBase::Observer:
49 void GoogleSignedOut(const std::string
& account_id
,
50 const std::string
& username
) override
;
52 struct TokenCacheData
{
54 base::Time expiration_time
;
57 // Map the token name (string) to token data.
58 std::map
<std::string
, TokenCacheData
> token_cache_
;
59 const Profile
* const profile_
;
61 DISALLOW_COPY_AND_ASSIGN(TokenCacheService
);
64 } // namespace extensions
66 #endif // CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_