Home | History | Annotate | Download | only in browser
      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 
     24 class GURL;
     25 
     26 namespace net {
     27 class URLRequestContextGetter;
     28 }
     29 
     30 namespace content {
     31 
     32 // Provides storage for the access token used in the network request.
     33 class 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