Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / service / cloud_print / cloud_print_auth.h
blob4a9f24d2b733bd05d44826909fe744bc0818b164
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.
5 #ifndef CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_
6 #define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_
8 #include <string>
10 #include "base/values.h"
11 #include "chrome/service/cloud_print/cloud_print_url_fetcher.h"
12 #include "google_apis/gaia/gaia_oauth_client.h"
13 #include "url/gurl.h"
15 namespace cloud_print {
17 // CloudPrintAuth is a class to handle login, token refresh, and other
18 // authentication tasks for Cloud Print.
19 // CloudPrintAuth will create new robot account for this proxy if needed.
20 // CloudPrintAuth will obtain new OAuth token.
21 // CloudPrintAuth will schedule periodic OAuth token refresh
22 // It is running in the same thread as CloudPrintProxyBackend::Core.
23 class CloudPrintAuth
24 : public base::RefCountedThreadSafe<CloudPrintAuth>,
25 public CloudPrintURLFetcherDelegate,
26 public gaia::GaiaOAuthClient::Delegate {
27 public:
28 class Client {
29 public:
30 virtual void OnAuthenticationComplete(
31 const std::string& access_token,
32 const std::string& robot_oauth_refresh_token,
33 const std::string& robot_email,
34 const std::string& user_email) = 0;
35 virtual void OnInvalidCredentials() = 0;
36 protected:
37 virtual ~Client() {}
40 CloudPrintAuth(Client* client,
41 const GURL& cloud_print_server_url,
42 const gaia::OAuthClientInfo& oauth_client_info,
43 const std::string& proxy_id);
45 // Note:
47 // The Authenticate* methods are the various entry points from
48 // CloudPrintProxyBackend::Core. It calls us on a dedicated thread to
49 // actually perform synchronous (and potentially blocking) operations.
50 void AuthenticateWithToken(const std::string& cloud_print_token);
51 void AuthenticateWithRobotToken(const std::string& robot_oauth_refresh_token,
52 const std::string& robot_email);
53 void AuthenticateWithRobotAuthCode(const std::string& robot_oauth_auth_code,
54 const std::string& robot_email);
56 void RefreshAccessToken();
58 // gaia::GaiaOAuthClient::Delegate implementation.
59 void OnGetTokensResponse(const std::string& refresh_token,
60 const std::string& access_token,
61 int expires_in_seconds) override;
62 void OnRefreshTokenResponse(const std::string& access_token,
63 int expires_in_seconds) override;
64 void OnOAuthError() override;
65 void OnNetworkError(int response_code) override;
67 // CloudPrintURLFetcher::Delegate implementation.
68 CloudPrintURLFetcher::ResponseAction HandleJSONData(
69 const net::URLFetcher* source,
70 const GURL& url,
71 base::DictionaryValue* json_data,
72 bool succeeded) override;
73 CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override;
74 std::string GetAuthHeader() override;
76 private:
77 friend class base::RefCountedThreadSafe<CloudPrintAuth>;
78 ~CloudPrintAuth() override;
80 Client* client_;
81 gaia::OAuthClientInfo oauth_client_info_;
82 scoped_ptr<gaia::GaiaOAuthClient> oauth_client_;
84 // The CloudPrintURLFetcher instance for the current request.
85 scoped_refptr<CloudPrintURLFetcher> request_;
87 GURL cloud_print_server_url_;
88 // Proxy id, need to send to the cloud print server to find and update
89 // necessary printers during the migration process.
90 const std::string& proxy_id_;
91 // The OAuth2 refresh token for the robot.
92 std::string refresh_token_;
93 // The email address of the user. This is only used during initial
94 // authentication with an LSID. This is only used for storing in prefs for
95 // display purposes.
96 std::string user_email_;
97 // The email address of the robot account.
98 std::string robot_email_;
99 // client login token used to authenticate request to cloud print server to
100 // get the robot account.
101 std::string client_login_token_;
103 DISALLOW_COPY_AND_ASSIGN(CloudPrintAuth);
106 } // namespace cloud_print
108 #endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_