token_cache_service.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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.
4
5#ifndef CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_
6#define CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_
7
8#include <map>
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/compiler_specific.h"
13#include "base/time.h"
14#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
15#include "content/public/browser/notification_observer.h"
16#include "content/public/browser/notification_registrar.h"
17
18namespace content {
19class NotificationSource;
20}
21
22class Profile;
23
24namespace extensions {
25
26// This class caches tokens for the current user.  It will clear tokens out
27// when the user logs out or after the specified timeout interval, or when
28// the instance of chrome shuts down.
29class TokenCacheService : public BrowserContextKeyedService,
30                          public content::NotificationObserver {
31 public:
32  explicit TokenCacheService(Profile* profile);
33  virtual ~TokenCacheService();
34
35  // Store a token for the currently logged in user. We will look it up later by
36  // the name given here, and we will expire the token after the timeout.  For a
37  // timeout of 0, we never expire the token.  After time_to_live expires, the
38  // token will be expired.
39  void StoreToken(const std::string& token_name, const std::string& token_value,
40                  base::TimeDelta time_to_live);
41
42  // Retrieve a token for the currently logged in user.  This returns an empty
43  // string if the token was not found or timed out.
44  std::string RetrieveToken(const std::string& token_name);
45
46  // Inherited from NotificationObserver.
47  virtual void Observe(int type,
48                       const content::NotificationSource& source,
49                       const content::NotificationDetails& details) OVERRIDE;
50
51 private:
52  friend class TokenCacheTest;
53
54  struct TokenCacheData {
55    std::string token;
56    base::Time expiration_time;
57  };
58
59  // Map the token name (string) to token data.
60  std::map<std::string, TokenCacheData> token_cache_;
61  content::NotificationRegistrar registrar_;
62  const Profile* const profile_;
63
64  DISALLOW_COPY_AND_ASSIGN(TokenCacheService);
65};
66
67}  // namespace extensions
68
69#endif  // CHROME_BROWSER_EXTENSIONS_TOKEN_CACHE_TOKEN_CACHE_SERVICE_H_
70