| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser/extensions/api/identity/gaia_web_auth_flow.h" | 5 #include "chrome/browser/extensions/api/identity/gaia_web_auth_flow.h" |
| 6 | 6 |
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| 11 #include "google_apis/gaia/gaia_urls.h" | 11 #include "google_apis/gaia/gaia_urls.h" |
| 12 #include "net/base/escape.h" | 12 #include "net/base/escape.h" |
| 13 | 13 |
| 14 namespace extensions { | 14 namespace extensions { |
| 15 | 15 |
| 16 GaiaWebAuthFlow::GaiaWebAuthFlow(Delegate* delegate, | 16 GaiaWebAuthFlow::GaiaWebAuthFlow(Delegate* delegate, |
| 17 Profile* profile, | 17 Profile* profile, |
| 18 chrome::HostDesktopType host_desktop_type, | |
| 19 const std::string& extension_id, | 18 const std::string& extension_id, |
| 20 const OAuth2Info& oauth2_info) | 19 const OAuth2Info& oauth2_info) |
| 21 : delegate_(delegate), | 20 : delegate_(delegate), |
| 22 profile_(profile), | 21 profile_(profile) { |
| 23 host_desktop_type_(host_desktop_type) { | |
| 24 const char kOAuth2RedirectPathFormat[] = "/%s#"; | 22 const char kOAuth2RedirectPathFormat[] = "/%s#"; |
| 25 const char kOAuth2AuthorizeFormat[] = | 23 const char kOAuth2AuthorizeFormat[] = |
| 26 "%s?response_type=token&approval_prompt=force&authuser=0&" | 24 "%s?response_type=token&approval_prompt=force&authuser=0&" |
| 27 "client_id=%s&" | 25 "client_id=%s&" |
| 28 "scope=%s&" | 26 "scope=%s&" |
| 29 "origin=chrome-extension://%s/&" | 27 "origin=chrome-extension://%s/&" |
| 30 "redirect_uri=%s:/%s"; | 28 "redirect_uri=%s:/%s"; |
| 31 | 29 |
| 32 std::vector<std::string> client_id_parts; | 30 std::vector<std::string> client_id_parts; |
| 33 base::SplitString(oauth2_info.client_id, '.', &client_id_parts); | 31 base::SplitString(oauth2_info.client_id, '.', &client_id_parts); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 web_flow_ = CreateWebAuthFlow(merge_url); | 70 web_flow_ = CreateWebAuthFlow(merge_url); |
| 73 web_flow_->Start(); | 71 web_flow_->Start(); |
| 74 } | 72 } |
| 75 | 73 |
| 76 void GaiaWebAuthFlow::OnUbertokenFailure(const GoogleServiceAuthError& error) { | 74 void GaiaWebAuthFlow::OnUbertokenFailure(const GoogleServiceAuthError& error) { |
| 77 delegate_->OnGaiaFlowFailure( | 75 delegate_->OnGaiaFlowFailure( |
| 78 GaiaWebAuthFlow::SERVICE_AUTH_ERROR, error, std::string()); | 76 GaiaWebAuthFlow::SERVICE_AUTH_ERROR, error, std::string()); |
| 79 } | 77 } |
| 80 | 78 |
| 81 void GaiaWebAuthFlow::OnAuthFlowFailure(WebAuthFlow::Failure failure) { | 79 void GaiaWebAuthFlow::OnAuthFlowFailure(WebAuthFlow::Failure failure) { |
| 82 DCHECK(failure == WebAuthFlow::WINDOW_CLOSED); | 80 GaiaWebAuthFlow::Failure gaia_failure; |
| 81 |
| 82 switch (failure) { |
| 83 case WebAuthFlow::WINDOW_CLOSED: |
| 84 gaia_failure = GaiaWebAuthFlow::WINDOW_CLOSED; |
| 85 break; |
| 86 case WebAuthFlow::LOAD_FAILED: |
| 87 gaia_failure = GaiaWebAuthFlow::LOAD_FAILED; |
| 88 break; |
| 89 default: |
| 90 NOTREACHED() << "Unexpected error from web auth flow: " << failure; |
| 91 gaia_failure = GaiaWebAuthFlow::LOAD_FAILED; |
| 92 break; |
| 93 } |
| 94 |
| 83 delegate_->OnGaiaFlowFailure( | 95 delegate_->OnGaiaFlowFailure( |
| 84 GaiaWebAuthFlow::WINDOW_CLOSED, | 96 gaia_failure, |
| 85 GoogleServiceAuthError(GoogleServiceAuthError::NONE), | 97 GoogleServiceAuthError(GoogleServiceAuthError::NONE), |
| 86 std::string()); | 98 std::string()); |
| 87 } | 99 } |
| 88 | 100 |
| 89 void GaiaWebAuthFlow::OnAuthFlowURLChange(const GURL& url) { | 101 void GaiaWebAuthFlow::OnAuthFlowURLChange(const GURL& url) { |
| 90 const char kOAuth2RedirectAccessTokenKey[] = "access_token"; | 102 const char kOAuth2RedirectAccessTokenKey[] = "access_token"; |
| 91 const char kOAuth2RedirectErrorKey[] = "error"; | 103 const char kOAuth2RedirectErrorKey[] = "error"; |
| 92 const char kOAuth2ExpiresInKey[] = "expires_in"; | 104 const char kOAuth2ExpiresInKey[] = "expires_in"; |
| 93 | 105 |
| 94 // The format of the target URL is: | 106 // The format of the target URL is: |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 std::string prefix(kRedirectPrefix); | 156 std::string prefix(kRedirectPrefix); |
| 145 | 157 |
| 146 if (StartsWithASCII(title, prefix, true)) { | 158 if (StartsWithASCII(title, prefix, true)) { |
| 147 GURL url(title.substr(prefix.length(), std::string::npos)); | 159 GURL url(title.substr(prefix.length(), std::string::npos)); |
| 148 if (url.is_valid()) | 160 if (url.is_valid()) |
| 149 OnAuthFlowURLChange(url); | 161 OnAuthFlowURLChange(url); |
| 150 } | 162 } |
| 151 } | 163 } |
| 152 | 164 |
| 153 scoped_ptr<WebAuthFlow> GaiaWebAuthFlow::CreateWebAuthFlow(GURL url) { | 165 scoped_ptr<WebAuthFlow> GaiaWebAuthFlow::CreateWebAuthFlow(GURL url) { |
| 154 gfx::Rect initial_bounds; | |
| 155 return scoped_ptr<WebAuthFlow>(new WebAuthFlow(this, | 166 return scoped_ptr<WebAuthFlow>(new WebAuthFlow(this, |
| 156 profile_, | 167 profile_, |
| 157 url, | 168 url, |
| 158 WebAuthFlow::INTERACTIVE, | 169 WebAuthFlow::INTERACTIVE)); |
| 159 initial_bounds, | |
| 160 host_desktop_type_)); | |
| 161 } | 170 } |
| 162 | 171 |
| 163 } // extensions | 172 } // extensions |
| OLD | NEW |