Home | History | Annotate | Download | only in cloud
      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_POLICY_CLOUD_USER_INFO_FETCHER_H_
      6 #define CHROME_BROWSER_POLICY_CLOUD_USER_INFO_FETCHER_H_
      7 
      8 #include <string>
      9 #include "base/memory/scoped_ptr.h"
     10 #include "net/url_request/url_fetcher_delegate.h"
     11 
     12 class GoogleServiceAuthError;
     13 
     14 namespace base {
     15 class DictionaryValue;
     16 }
     17 
     18 namespace net {
     19 class URLFetcher;
     20 class URLRequestContextGetter;
     21 }
     22 
     23 namespace policy {
     24 
     25 // Class that makes a UserInfo request, parses the response, and notifies
     26 // a provided Delegate when the request is complete.
     27 class UserInfoFetcher : public net::URLFetcherDelegate {
     28  public:
     29   class Delegate {
     30    public:
     31     // Invoked when the UserInfo request has succeeded, passing the parsed
     32     // response in |response|. Delegate may free the UserInfoFetcher in this
     33     // callback.
     34     virtual void OnGetUserInfoSuccess(
     35         const base::DictionaryValue* response) = 0;
     36 
     37     // Invoked when the UserInfo request has failed, passing the associated
     38     // error in |error|. Delegate may free the UserInfoFetcher in this
     39     // callback.
     40     virtual void OnGetUserInfoFailure(const GoogleServiceAuthError& error) = 0;
     41   };
     42 
     43   // Create a new UserInfoFetcher. |context| can be NULL for unit tests.
     44   UserInfoFetcher(Delegate* delegate, net::URLRequestContextGetter* context);
     45   virtual ~UserInfoFetcher();
     46 
     47   // Starts the UserInfo request, using the passed OAuth2 |access_token|.
     48   void Start(const std::string& access_token);
     49 
     50   // net::URLFetcherDelegate implementation.
     51   virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
     52 
     53  private:
     54   Delegate* delegate_;
     55   net::URLRequestContextGetter* context_;
     56   scoped_ptr<net::URLFetcher> url_fetcher_;
     57 
     58   DISALLOW_COPY_AND_ASSIGN(UserInfoFetcher);
     59 };
     60 
     61 }  // namespace policy
     62 
     63 #endif  // CHROME_BROWSER_POLICY_CLOUD_USER_INFO_FETCHER_H_
     64