Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Side by Side Diff: chrome/common/net/gaia/gaia_oauth_client.cc

Issue 8375039: Create a content::UrlFetcher interface that lives in content/public/common and convert users to i... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: review comments Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/net/gaia/gaia_oauth_client.h" 5 #include "chrome/common/net/gaia/gaia_oauth_client.h"
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/common/net/http_return.h" 10 #include "chrome/common/net/http_return.h"
(...skipping 27 matching lines...) Expand all
38 void GetTokensFromAuthCode(const OAuthClientInfo& oauth_client_info, 38 void GetTokensFromAuthCode(const OAuthClientInfo& oauth_client_info,
39 const std::string& auth_code, 39 const std::string& auth_code,
40 int max_retries, 40 int max_retries,
41 GaiaOAuthClient::Delegate* delegate); 41 GaiaOAuthClient::Delegate* delegate);
42 void RefreshToken(const OAuthClientInfo& oauth_client_info, 42 void RefreshToken(const OAuthClientInfo& oauth_client_info,
43 const std::string& refresh_token, 43 const std::string& refresh_token,
44 int max_retries, 44 int max_retries,
45 GaiaOAuthClient::Delegate* delegate); 45 GaiaOAuthClient::Delegate* delegate);
46 46
47 // content::URLFetcherDelegate implementation. 47 // content::URLFetcherDelegate implementation.
48 virtual void OnURLFetchComplete(const URLFetcher* source); 48 virtual void OnURLFetchComplete(const content::URLFetcher* source);
49 49
50 private: 50 private:
51 void MakeGaiaRequest(std::string post_body, 51 void MakeGaiaRequest(std::string post_body,
52 int max_retries, 52 int max_retries,
53 GaiaOAuthClient::Delegate* delegate); 53 GaiaOAuthClient::Delegate* delegate);
54 void HandleResponse(const URLFetcher* source, bool* should_retry_request); 54 void HandleResponse(const content::URLFetcher* source,
55 bool* should_retry_request);
55 56
56 GURL gaia_url_; 57 GURL gaia_url_;
57 int num_retries_; 58 int num_retries_;
58 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; 59 scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
59 GaiaOAuthClient::Delegate* delegate_; 60 GaiaOAuthClient::Delegate* delegate_;
60 scoped_ptr<URLFetcher> request_; 61 scoped_ptr<content::URLFetcher> request_;
61 }; 62 };
62 63
63 void GaiaOAuthClient::Core::GetTokensFromAuthCode( 64 void GaiaOAuthClient::Core::GetTokensFromAuthCode(
64 const OAuthClientInfo& oauth_client_info, 65 const OAuthClientInfo& oauth_client_info,
65 const std::string& auth_code, 66 const std::string& auth_code,
66 int max_retries, 67 int max_retries,
67 GaiaOAuthClient::Delegate* delegate) { 68 GaiaOAuthClient::Delegate* delegate) {
68 std::string post_body = 69 std::string post_body =
69 "code=" + EscapeUrlEncodedData(auth_code, true) + 70 "code=" + EscapeUrlEncodedData(auth_code, true) +
70 "&client_id=" + EscapeUrlEncodedData(oauth_client_info.client_id, true) + 71 "&client_id=" + EscapeUrlEncodedData(oauth_client_info.client_id, true) +
(...skipping 18 matching lines...) Expand all
89 } 90 }
90 91
91 void GaiaOAuthClient::Core::MakeGaiaRequest( 92 void GaiaOAuthClient::Core::MakeGaiaRequest(
92 std::string post_body, 93 std::string post_body,
93 int max_retries, 94 int max_retries,
94 GaiaOAuthClient::Delegate* delegate) { 95 GaiaOAuthClient::Delegate* delegate) {
95 DCHECK(!request_.get()) << "Tried to fetch two things at once!"; 96 DCHECK(!request_.get()) << "Tried to fetch two things at once!";
96 delegate_ = delegate; 97 delegate_ = delegate;
97 num_retries_ = 0; 98 num_retries_ = 0;
98 request_.reset(URLFetcher::Create(0, gaia_url_, URLFetcher::POST, this)); 99 request_.reset(URLFetcher::Create(0, gaia_url_, URLFetcher::POST, this));
99 request_->set_request_context(request_context_getter_); 100 request_->SetRequestContext(request_context_getter_);
100 request_->set_upload_data("application/x-www-form-urlencoded", post_body); 101 request_->SetUploadData("application/x-www-form-urlencoded", post_body);
101 request_->set_max_retries(max_retries); 102 request_->SetMaxRetries(max_retries);
102 request_->Start(); 103 request_->Start();
103 } 104 }
104 105
105 // URLFetcher::Delegate implementation. 106 // URLFetcher::Delegate implementation.
106 void GaiaOAuthClient::Core::OnURLFetchComplete(const URLFetcher* source) { 107 void GaiaOAuthClient::Core::OnURLFetchComplete(
108 const content::URLFetcher* source) {
107 bool should_retry = false; 109 bool should_retry = false;
108 HandleResponse(source, &should_retry); 110 HandleResponse(source, &should_retry);
109 if (should_retry) { 111 if (should_retry) {
110 // Explicitly call ReceivedContentWasMalformed() to ensure the current 112 // Explicitly call ReceivedContentWasMalformed() to ensure the current
111 // request gets counted as a failure for calculation of the back-off 113 // request gets counted as a failure for calculation of the back-off
112 // period. If it was already a failure by status code, this call will 114 // period. If it was already a failure by status code, this call will
113 // be ignored. 115 // be ignored.
114 request_->ReceivedContentWasMalformed(); 116 request_->ReceivedContentWasMalformed();
115 num_retries_++; 117 num_retries_++;
116 // We must set our request_context_getter_ again because 118 // We must set our request_context_getter_ again because
117 // URLFetcher::Core::RetryOrCompleteUrlFetch resets it to NULL... 119 // URLFetcher::Core::RetryOrCompleteUrlFetch resets it to NULL...
118 request_->set_request_context(request_context_getter_); 120 request_->SetRequestContext(request_context_getter_);
119 request_->Start(); 121 request_->Start();
120 } else { 122 } else {
121 request_.reset(); 123 request_.reset();
122 } 124 }
123 } 125 }
124 126
125 void GaiaOAuthClient::Core::HandleResponse( 127 void GaiaOAuthClient::Core::HandleResponse(
126 const URLFetcher* source, 128 const content::URLFetcher* source,
127 bool* should_retry_request) { 129 bool* should_retry_request) {
128 *should_retry_request = false; 130 *should_retry_request = false;
129 // RC_BAD_REQUEST means the arguments are invalid. No point retrying. We are 131 // RC_BAD_REQUEST means the arguments are invalid. No point retrying. We are
130 // done here. 132 // done here.
131 if (source->response_code() == RC_BAD_REQUEST) { 133 if (source->GetResponseCode() == RC_BAD_REQUEST) {
132 delegate_->OnOAuthError(); 134 delegate_->OnOAuthError();
133 return; 135 return;
134 } 136 }
135 std::string access_token; 137 std::string access_token;
136 std::string refresh_token; 138 std::string refresh_token;
137 int expires_in_seconds = 0; 139 int expires_in_seconds = 0;
138 if (source->response_code() == RC_REQUEST_OK) { 140 if (source->GetResponseCode() == RC_REQUEST_OK) {
139 std::string data; 141 std::string data;
140 source->GetResponseAsString(&data); 142 source->GetResponseAsString(&data);
141 scoped_ptr<Value> message_value(base::JSONReader::Read(data, false)); 143 scoped_ptr<Value> message_value(base::JSONReader::Read(data, false));
142 if (message_value.get() && 144 if (message_value.get() &&
143 message_value->IsType(Value::TYPE_DICTIONARY)) { 145 message_value->IsType(Value::TYPE_DICTIONARY)) {
144 scoped_ptr<DictionaryValue> response_dict( 146 scoped_ptr<DictionaryValue> response_dict(
145 static_cast<DictionaryValue*>(message_value.release())); 147 static_cast<DictionaryValue*>(message_value.release()));
146 response_dict->GetString(kAccessTokenValue, &access_token); 148 response_dict->GetString(kAccessTokenValue, &access_token);
147 response_dict->GetString(kRefreshTokenValue, &refresh_token); 149 response_dict->GetString(kRefreshTokenValue, &refresh_token);
148 response_dict->GetInteger(kExpiresInValue, &expires_in_seconds); 150 response_dict->GetInteger(kExpiresInValue, &expires_in_seconds);
149 } 151 }
150 } 152 }
151 if (access_token.empty()) { 153 if (access_token.empty()) {
152 // If we don't have an access token yet and the the error was not 154 // If we don't have an access token yet and the the error was not
153 // RC_BAD_REQUEST, we may need to retry. 155 // RC_BAD_REQUEST, we may need to retry.
154 if ((-1 != source->max_retries()) && 156 if ((-1 != source->GetMaxRetries()) &&
155 (num_retries_ > source->max_retries())) { 157 (num_retries_ > source->GetMaxRetries())) {
156 // Retry limit reached. Give up. 158 // Retry limit reached. Give up.
157 delegate_->OnNetworkError(source->response_code()); 159 delegate_->OnNetworkError(source->GetResponseCode());
158 } else { 160 } else {
159 *should_retry_request = true; 161 *should_retry_request = true;
160 } 162 }
161 } else if (refresh_token.empty()) { 163 } else if (refresh_token.empty()) {
162 // If we only have an access token, then this was a refresh request. 164 // If we only have an access token, then this was a refresh request.
163 delegate_->OnRefreshTokenResponse(access_token, expires_in_seconds); 165 delegate_->OnRefreshTokenResponse(access_token, expires_in_seconds);
164 } else { 166 } else {
165 delegate_->OnGetTokensResponse(refresh_token, 167 delegate_->OnGetTokensResponse(refresh_token,
166 access_token, 168 access_token,
167 expires_in_seconds); 169 expires_in_seconds);
(...skipping 24 matching lines...) Expand all
192 const std::string& refresh_token, 194 const std::string& refresh_token,
193 int max_retries, 195 int max_retries,
194 Delegate* delegate) { 196 Delegate* delegate) {
195 return core_->RefreshToken(oauth_client_info, 197 return core_->RefreshToken(oauth_client_info,
196 refresh_token, 198 refresh_token,
197 max_retries, 199 max_retries,
198 delegate); 200 delegate);
199 } 201 }
200 202
201 } // namespace gaia 203 } // namespace gaia
OLDNEW
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc ('k') | chrome/common/net/gaia/gaia_oauth_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698