• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 GOOGLE_APIS_GAIA_FAKE_GAIA_H_
6 #define GOOGLE_APIS_GAIA_FAKE_GAIA_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 
12 #include "base/basictypes.h"
13 #include "base/memory/scoped_ptr.h"
14 
15 namespace base {
16 class DictionaryValue;
17 }
18 
19 namespace net {
20 namespace test_server {
21 class BasicHttpResponse;
22 struct HttpRequest;
23 class HttpResponse;
24 }
25 }
26 
27 // This is a test helper that implements a fake GAIA service for use in browser
28 // tests. It's mainly intended for use with EmbeddedTestServer, for which it can
29 // be registered as an additional request handler.
30 class FakeGaia {
31  public:
32   typedef std::set<std::string> ScopeSet;
33 
34   // Access token details used for token minting and the token info endpoint.
35   struct AccessTokenInfo {
36     AccessTokenInfo();
37     ~AccessTokenInfo();
38 
39     std::string token;
40     std::string issued_to;
41     std::string audience;
42     std::string user_id;
43     ScopeSet scopes;
44     int expires_in;
45     std::string email;
46   };
47 
48   FakeGaia();
49   ~FakeGaia();
50 
51   // Handles a request and returns a response if the request was recognized as a
52   // GAIA request. Note that this respects the switches::kGaiaUrl and friends so
53   // that this can used with EmbeddedTestServer::RegisterRequestHandler().
54   scoped_ptr<net::test_server::HttpResponse> HandleRequest(
55       const net::test_server::HttpRequest& request);
56 
57   // Configures an OAuth2 token that'll be returned when a client requests an
58   // access token for the given auth token, which can be a refresh token or an
59   // login-scoped access token for the token minting endpoint. Note that the
60   // scope and audience requested by the client need to match the token_info.
61   void IssueOAuthToken(const std::string& auth_token,
62                        const AccessTokenInfo& token_info);
63 
64  private:
65   typedef std::multimap<std::string, AccessTokenInfo> AccessTokenInfoMap;
66 
67   // Formats a JSON response with the data in |response_dict|.
68   void FormatJSONResponse(const base::DictionaryValue& response_dict,
69                           net::test_server::BasicHttpResponse* http_response);
70 
71   // Returns the access token associated with |auth_token| that matches the
72   // given |client_id| and |scope_string|. If |scope_string| is empty, the first
73   // token satisfying the other criteria is returned. Returns NULL if no token
74   // matches.
75   const AccessTokenInfo* GetAccessTokenInfo(const std::string& auth_token,
76                                             const std::string& client_id,
77                                             const std::string& scope_string)
78       const;
79 
80   // Extracts the parameter named |key| from |query| and places it in |value|.
81   // Returns false if no parameter is found.
82   static bool GetQueryParameter(const std::string& query,
83                                 const std::string& key,
84                                 std::string* value);
85 
86   AccessTokenInfoMap access_token_info_map_;
87   std::string service_login_response_;
88 
89   DISALLOW_COPY_AND_ASSIGN(FakeGaia);
90 };
91 
92 #endif  // GOOGLE_APIS_GAIA_FAKE_GAIA_H_
93