1// Copyright (c) 2012 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// Defines the Geolocation access token store, and associated factory function.
6// An access token store is responsible for providing the API to persist
7// access tokens, one at a time, and to load them back on mass.
8// The API is a little more complex than one might wish, due to the need for
9// prefs access to happen asynchronously on the UI thread.
10// This API is provided as abstract base classes to allow mocking and testing
11// of clients, without dependency on browser process singleton objects etc.
12
13#ifndef CONTENT_PUBLIC_BROWSER_ACCESS_TOKEN_STORE_H_
14#define CONTENT_PUBLIC_BROWSER_ACCESS_TOKEN_STORE_H_
15
16#include <map>
17
18#include "base/callback.h"
19#include "base/memory/ref_counted.h"
20#include "base/strings/string16.h"
21#include "content/common/content_export.h"
22#include "url/gurl.h"
23
24class GURL;
25
26namespace net {
27class URLRequestContextGetter;
28}
29
30namespace content {
31
32// Provides storage for the access token used in the network request.
33class AccessTokenStore : public base::RefCountedThreadSafe<AccessTokenStore> {
34 public:
35  // Map of server URLs to associated access token.
36  typedef std::map<GURL, base::string16> AccessTokenSet;
37  typedef base::Callback<void(AccessTokenSet, net::URLRequestContextGetter*)>
38      LoadAccessTokensCallbackType;
39
40  // |callback| will be invoked once per LoadAccessTokens call, after existing
41  // access tokens have been loaded from persistent store. As a convenience the
42  // URLRequestContextGetter is also supplied as an argument in |callback|, as
43  // in Chrome the call to obtain this must also be performed on the UI thread
44  // so it is efficient to piggyback it onto this request.
45  // Takes ownership of |callback|.
46  virtual void LoadAccessTokens(
47      const LoadAccessTokensCallbackType& callback) = 0;
48
49  virtual void SaveAccessToken(
50      const GURL& server_url, const base::string16& access_token) = 0;
51
52 protected:
53  friend class base::RefCountedThreadSafe<AccessTokenStore>;
54  CONTENT_EXPORT AccessTokenStore() {}
55  CONTENT_EXPORT virtual ~AccessTokenStore() {}
56};
57
58}  // namespace content
59
60#endif  // CONTENT_PUBLIC_BROWSER_ACCESS_TOKEN_STORE_H_
61