Index: chrome/common/net/gaia/oauth2_mint_token_flow.cc |
diff --git a/chrome/common/net/gaia/oauth2_mint_token_flow.cc b/chrome/common/net/gaia/oauth2_mint_token_flow.cc |
deleted file mode 100644 |
index 80091f5f8ae24e3f3b204765a8a4584f0af513ef..0000000000000000000000000000000000000000 |
--- a/chrome/common/net/gaia/oauth2_mint_token_flow.cc |
+++ /dev/null |
@@ -1,261 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/common/net/gaia/oauth2_mint_token_flow.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/json/json_reader.h" |
-#include "base/message_loop.h" |
-#include "base/string_util.h" |
-#include "base/stringprintf.h" |
-#include "base/utf_string_conversions.h" |
-#include "base/values.h" |
-#include "chrome/common/net/gaia/gaia_urls.h" |
-#include "chrome/common/net/gaia/google_service_auth_error.h" |
-#include "net/base/escape.h" |
-#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_request_context_getter.h" |
-#include "net/url_request/url_request_status.h" |
- |
-using net::URLFetcher; |
-using net::URLRequestContextGetter; |
-using net::URLRequestStatus; |
- |
-namespace { |
- |
-static const char kForceValueFalse[] = "false"; |
-static const char kForceValueTrue[] = "true"; |
-static const char kResponseTypeValueNone[] = "none"; |
-static const char kResponseTypeValueToken[] = "token"; |
- |
-static const char kOAuth2IssueTokenBodyFormat[] = |
- "force=%s" |
- "&response_type=%s" |
- "&scope=%s" |
- "&client_id=%s" |
- "&origin=%s"; |
-static const char kIssueAdviceKey[] = "issueAdvice"; |
-static const char kIssueAdviceValueAuto[] = "auto"; |
-static const char kIssueAdviceValueConsent[] = "consent"; |
-static const char kAccessTokenKey[] = "token"; |
-static const char kConsentKey[] = "consent"; |
-static const char kScopesKey[] = "scopes"; |
-static const char kDescriptionKey[] = "description"; |
-static const char kDetailKey[] = "detail"; |
-static const char kDetailSeparators[] = "\n"; |
- |
-static GoogleServiceAuthError CreateAuthError(URLRequestStatus status) { |
- if (status.status() == URLRequestStatus::CANCELED) { |
- return GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED); |
- } else { |
- // TODO(munjal): Improve error handling. Currently we return connection |
- // error for even application level errors. We need to either expand the |
- // GoogleServiceAuthError enum or create a new one to report better |
- // errors. |
- DLOG(WARNING) << "Server returned error: errno " << status.error(); |
- return GoogleServiceAuthError::FromConnectionError(status.error()); |
- } |
-} |
- |
-} // namespace |
- |
-IssueAdviceInfoEntry::IssueAdviceInfoEntry() {} |
-IssueAdviceInfoEntry::~IssueAdviceInfoEntry() {} |
- |
-bool IssueAdviceInfoEntry::operator ==(const IssueAdviceInfoEntry& rhs) const { |
- return description == rhs.description && details == rhs.details; |
-} |
- |
-OAuth2MintTokenFlow::Parameters::Parameters() : mode(MODE_ISSUE_ADVICE) {} |
- |
-OAuth2MintTokenFlow::Parameters::Parameters( |
- const std::string& rt, |
- const std::string& eid, |
- const std::string& cid, |
- const std::vector<std::string>& scopes_arg, |
- Mode mode_arg) |
- : login_refresh_token(rt), |
- extension_id(eid), |
- client_id(cid), |
- scopes(scopes_arg), |
- mode(mode_arg) { |
-} |
- |
-OAuth2MintTokenFlow::Parameters::~Parameters() {} |
- |
-OAuth2MintTokenFlow::OAuth2MintTokenFlow( |
- URLRequestContextGetter* context, |
- Delegate* delegate, |
- const Parameters& parameters) |
- : OAuth2ApiCallFlow( |
- context, parameters.login_refresh_token, |
- "", std::vector<std::string>()), |
- context_(context), |
- delegate_(delegate), |
- parameters_(parameters), |
- delete_when_done_(false), |
- ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
-} |
- |
-OAuth2MintTokenFlow::~OAuth2MintTokenFlow() { } |
- |
-void OAuth2MintTokenFlow::FireAndForget() { |
- delete_when_done_ = true; |
- Start(); |
-} |
- |
-void OAuth2MintTokenFlow::ReportSuccess(const std::string& access_token) { |
- scoped_ptr<OAuth2MintTokenFlow> will_delete(delete_when_done_ ? this : NULL); |
- |
- if (delegate_) |
- delegate_->OnMintTokenSuccess(access_token); |
- |
- // |this| may already be deleted. |
-} |
- |
-void OAuth2MintTokenFlow::ReportIssueAdviceSuccess( |
- const IssueAdviceInfo& issue_advice) { |
- scoped_ptr<OAuth2MintTokenFlow> will_delete(delete_when_done_ ? this : NULL); |
- |
- if (delegate_) |
- delegate_->OnIssueAdviceSuccess(issue_advice); |
- |
- // |this| may already be deleted. |
-} |
- |
-void OAuth2MintTokenFlow::ReportFailure( |
- const GoogleServiceAuthError& error) { |
- scoped_ptr<OAuth2MintTokenFlow> will_delete(delete_when_done_ ? this : NULL); |
- |
- if (delegate_) |
- delegate_->OnMintTokenFailure(error); |
- |
- // |this| may already be deleted. |
-} |
- |
-GURL OAuth2MintTokenFlow::CreateApiCallUrl() { |
- return GURL(GaiaUrls::GetInstance()->oauth2_issue_token_url()); |
-} |
- |
-std::string OAuth2MintTokenFlow::CreateApiCallBody() { |
- const char* force_value = |
- (parameters_.mode == MODE_MINT_TOKEN_FORCE || |
- parameters_.mode == MODE_RECORD_GRANT) |
- ? kForceValueTrue : kForceValueFalse; |
- const char* response_type_value = |
- (parameters_.mode == MODE_MINT_TOKEN_NO_FORCE || |
- parameters_.mode == MODE_MINT_TOKEN_FORCE) |
- ? kResponseTypeValueToken : kResponseTypeValueNone; |
- return StringPrintf( |
- kOAuth2IssueTokenBodyFormat, |
- net::EscapeUrlEncodedData(force_value, true).c_str(), |
- net::EscapeUrlEncodedData(response_type_value, true).c_str(), |
- net::EscapeUrlEncodedData( |
- JoinString(parameters_.scopes, ' '), true).c_str(), |
- net::EscapeUrlEncodedData(parameters_.client_id, true).c_str(), |
- net::EscapeUrlEncodedData(parameters_.extension_id, true).c_str()); |
-} |
- |
-void OAuth2MintTokenFlow::ProcessApiCallSuccess( |
- const net::URLFetcher* source) { |
- // TODO(munjal): Change error code paths in this method to report an |
- // internal error. |
- std::string response_body; |
- source->GetResponseAsString(&response_body); |
- scoped_ptr<base::Value> value(base::JSONReader::Read(response_body)); |
- DictionaryValue* dict = NULL; |
- if (!value.get() || !value->GetAsDictionary(&dict)) { |
- ReportFailure(GoogleServiceAuthError::FromConnectionError(101)); |
- return; |
- } |
- |
- std::string issue_advice; |
- if (!dict->GetString(kIssueAdviceKey, &issue_advice)) { |
- ReportFailure(GoogleServiceAuthError::FromConnectionError(101)); |
- return; |
- } |
- if (issue_advice == kIssueAdviceValueConsent) { |
- IssueAdviceInfo issue_advice; |
- if (ParseIssueAdviceResponse(dict, &issue_advice)) |
- ReportIssueAdviceSuccess(issue_advice); |
- else |
- ReportFailure(GoogleServiceAuthError::FromConnectionError(101)); |
- } else { |
- std::string access_token; |
- if (ParseMintTokenResponse(dict, &access_token)) |
- ReportSuccess(access_token); |
- else |
- ReportFailure(GoogleServiceAuthError::FromConnectionError(101)); |
- } |
- |
- // |this| may be deleted! |
-} |
- |
-void OAuth2MintTokenFlow::ProcessApiCallFailure( |
- const net::URLFetcher* source) { |
- ReportFailure(CreateAuthError(source->GetStatus())); |
-} |
-void OAuth2MintTokenFlow::ProcessNewAccessToken( |
- const std::string& access_token) { |
- // We don't currently store new access tokens. We generate one every time. |
- // So we have nothing to do here. |
- return; |
-} |
-void OAuth2MintTokenFlow::ProcessMintAccessTokenFailure( |
- const GoogleServiceAuthError& error) { |
- ReportFailure(error); |
-} |
- |
-// static |
-bool OAuth2MintTokenFlow::ParseMintTokenResponse( |
- const base::DictionaryValue* dict, std::string* access_token) { |
- CHECK(dict); |
- CHECK(access_token); |
- return dict->GetString(kAccessTokenKey, access_token); |
-} |
- |
-// static |
-bool OAuth2MintTokenFlow::ParseIssueAdviceResponse( |
- const base::DictionaryValue* dict, IssueAdviceInfo* issue_advice) { |
- CHECK(dict); |
- CHECK(issue_advice); |
- |
- const base::DictionaryValue* consent_dict = NULL; |
- if (!dict->GetDictionary(kConsentKey, &consent_dict)) |
- return false; |
- |
- const base::ListValue* scopes_list = NULL; |
- if (!consent_dict->GetList(kScopesKey, &scopes_list)) |
- return false; |
- |
- bool success = true; |
- for (size_t index = 0; index < scopes_list->GetSize(); ++index) { |
- const base::DictionaryValue* scopes_entry = NULL; |
- IssueAdviceInfoEntry entry; |
- string16 detail; |
- if (!scopes_list->GetDictionary(index, &scopes_entry) || |
- !scopes_entry->GetString(kDescriptionKey, &entry.description) || |
- !scopes_entry->GetString(kDetailKey, &detail)) { |
- success = false; |
- break; |
- } |
- |
- TrimWhitespace(entry.description, TRIM_ALL, &entry.description); |
- static const string16 detail_separators = ASCIIToUTF16(kDetailSeparators); |
- Tokenize(detail, detail_separators, &entry.details); |
- for (size_t i = 0; i < entry.details.size(); i++) |
- TrimWhitespace(entry.details[i], TRIM_ALL, &entry.details[i]); |
- issue_advice->push_back(entry); |
- } |
- |
- if (!success) |
- issue_advice->clear(); |
- |
- return success; |
-} |