• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_OBFUSCATED_GAIA_ID_FETCHER_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_OBFUSCATED_GAIA_ID_FETCHER_H_
7 
8 #include <string>
9 
10 #include "google_apis/gaia/oauth2_api_call_flow.h"
11 
12 class GoogleServiceAuthError;
13 
14 namespace content {
15 class URLFetcher;
16 }
17 
18 namespace net {
19 class URLRequestContextGetter;
20 }
21 
22 namespace extensions {
23 
24 // Fetches obfuscated Gaia ID of the Google Account that is logged in to Chrome.
25 // This starts an asynchronous operation which reports success to the delegate.
26 // Call "Start()" to start the async fetch.
27 class ObfuscatedGaiaIdFetcher : public OAuth2ApiCallFlow {
28  public:
29   // Delegate interface that is called when obfuscated Gaia id fetch
30   // succeeds or fails.
31   class Delegate {
32    public:
OnObfuscatedGaiaIdFetchSuccess(const std::string & obfuscated_id)33     virtual void OnObfuscatedGaiaIdFetchSuccess(
34         const std::string& obfuscated_id) {}
OnObfuscatedGaiaIdFetchFailure(const GoogleServiceAuthError & error)35     virtual void OnObfuscatedGaiaIdFetchFailure(
36         const GoogleServiceAuthError& error) {}
~Delegate()37     virtual ~Delegate() {}
38   };
39 
40   // TODO(petewil): Someday let's make a profile keyed service to cache
41   // the Gaia ID.
42 
43   ObfuscatedGaiaIdFetcher(net::URLRequestContextGetter* context,
44                           Delegate* delegate,
45                           const std::string& refresh_token);
46   virtual ~ObfuscatedGaiaIdFetcher();
47 
48   static std::vector<std::string> GetScopes();
49 
50  protected:
51   // OAuth2ApiCallFlow implementation
52   virtual GURL CreateApiCallUrl() OVERRIDE;
53   virtual std::string CreateApiCallBody() OVERRIDE;
54   virtual void ProcessApiCallSuccess(
55       const net::URLFetcher* source) OVERRIDE;
56   virtual void ProcessApiCallFailure(
57       const net::URLFetcher* source) OVERRIDE;
58   virtual void ProcessNewAccessToken(const std::string& access_token) OVERRIDE;
59   virtual void ProcessMintAccessTokenFailure(
60       const GoogleServiceAuthError& error) OVERRIDE;
61 
62  private:
63   FRIEND_TEST_ALL_PREFIXES(ObfuscatedGaiaIdFetcherTest, SetUp);
64   FRIEND_TEST_ALL_PREFIXES(ObfuscatedGaiaIdFetcherTest, ParseResponse);
65   FRIEND_TEST_ALL_PREFIXES(ObfuscatedGaiaIdFetcherTest, ProcessApiCallSuccess);
66   FRIEND_TEST_ALL_PREFIXES(ObfuscatedGaiaIdFetcherTest, ProcessApiCallFailure);
67 
68   void ReportSuccess(const std::string& obfuscated_id);
69   void ReportFailure(const GoogleServiceAuthError& error);
70 
71   // Get the obfuscated Gaia ID out of the response body.
72   static bool ParseResponse(
73       const std::string& data, std::string* obfuscated_id);
74 
75   // Unowned pointer to the delegate.  Normally the delegate owns
76   // this fetcher class.
77   Delegate* delegate_;
78 
79   DISALLOW_COPY_AND_ASSIGN(ObfuscatedGaiaIdFetcher);
80 };
81 
82 }  // namespace extensions
83 
84 #endif  // CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_OBFUSCATED_GAIA_ID_FETCHER_H_
85