OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/ui/webui/signin/inline_login_handler_impl.h" | 5 #include "chrome/browser/ui/webui/signin/inline_login_handler_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
15 #include "chrome/browser/signin/about_signin_internals_factory.h" | 15 #include "chrome/browser/signin/about_signin_internals_factory.h" |
16 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 16 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
17 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 17 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
18 #include "chrome/browser/signin/signin_manager_factory.h" | 18 #include "chrome/browser/signin/signin_manager_factory.h" |
19 #include "chrome/browser/sync/profile_sync_service.h" | 19 #include "chrome/browser/sync/profile_sync_service.h" |
20 #include "chrome/browser/sync/profile_sync_service_factory.h" | 20 #include "chrome/browser/sync/profile_sync_service_factory.h" |
21 #include "chrome/browser/ui/browser_finder.h" | 21 #include "chrome/browser/ui/browser_finder.h" |
22 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
23 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | 23 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
24 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" | 24 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" |
25 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 25 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
26 #include "chrome/browser/ui/webui/signin/inline_login_ui.h" | |
26 #include "chrome/common/url_constants.h" | 27 #include "chrome/common/url_constants.h" |
27 #include "components/signin/core/browser/about_signin_internals.h" | 28 #include "components/signin/core/browser/about_signin_internals.h" |
28 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 29 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
29 #include "components/signin/core/browser/signin_error_controller.h" | 30 #include "components/signin/core/browser/signin_error_controller.h" |
30 #include "components/signin/core/browser/signin_oauth_helper.h" | 31 #include "components/signin/core/browser/signin_oauth_helper.h" |
31 #include "content/public/browser/storage_partition.h" | 32 #include "content/public/browser/storage_partition.h" |
32 #include "content/public/browser/web_ui.h" | 33 #include "content/public/browser/web_ui.h" |
33 #include "google_apis/gaia/gaia_auth_fetcher.h" | 34 #include "google_apis/gaia/gaia_auth_fetcher.h" |
34 #include "google_apis/gaia/gaia_auth_util.h" | 35 #include "google_apis/gaia/gaia_auth_util.h" |
35 #include "google_apis/gaia/gaia_constants.h" | 36 #include "google_apis/gaia/gaia_constants.h" |
36 #include "google_apis/gaia/gaia_urls.h" | 37 #include "google_apis/gaia/gaia_urls.h" |
37 #include "net/base/url_util.h" | 38 #include "net/base/url_util.h" |
38 | 39 |
39 namespace { | 40 namespace { |
40 | 41 |
41 class InlineSigninHelper : public SigninOAuthHelper, | 42 class InlineSigninHelper : public SigninOAuthHelper, |
42 public SigninOAuthHelper::Consumer { | 43 public SigninOAuthHelper::Consumer { |
43 public: | 44 public: |
44 InlineSigninHelper( | 45 InlineSigninHelper( |
45 base::WeakPtr<InlineLoginHandlerImpl> handler, | 46 base::WeakPtr<InlineLoginHandlerImpl> handler, |
46 net::URLRequestContextGetter* getter, | 47 net::URLRequestContextGetter* getter, |
47 Profile* profile, | 48 Profile* profile, |
48 const GURL& current_url, | 49 const GURL& current_url, |
49 const std::string& email, | 50 const std::string& email, |
50 const std::string& password, | 51 const std::string& password, |
51 const std::string& session_index, | 52 const std::string& session_index, |
52 const std::string& signin_scoped_device_id, | 53 const std::string& signin_scoped_device_id, |
53 bool choose_what_to_sync); | 54 bool choose_what_to_sync, |
55 bool confirm_untrusted_signin); | |
54 | 56 |
55 private: | 57 private: |
56 // Overriden from SigninOAuthHelper::Consumer. | 58 // Overriden from SigninOAuthHelper::Consumer. |
57 virtual void OnSigninOAuthInformationAvailable( | 59 virtual void OnSigninOAuthInformationAvailable( |
58 const std::string& email, | 60 const std::string& email, |
59 const std::string& display_email, | 61 const std::string& display_email, |
60 const std::string& refresh_token) OVERRIDE; | 62 const std::string& refresh_token) OVERRIDE; |
61 virtual void OnSigninOAuthInformationFailure( | 63 virtual void OnSigninOAuthInformationFailure( |
62 const GoogleServiceAuthError& error) OVERRIDE; | 64 const GoogleServiceAuthError& error) OVERRIDE; |
63 | 65 |
64 base::WeakPtr<InlineLoginHandlerImpl> handler_; | 66 base::WeakPtr<InlineLoginHandlerImpl> handler_; |
65 Profile* profile_; | 67 Profile* profile_; |
66 GURL current_url_; | 68 GURL current_url_; |
67 std::string email_; | 69 std::string email_; |
68 std::string password_; | 70 std::string password_; |
69 std::string session_index_; | 71 std::string session_index_; |
70 bool choose_what_to_sync_; | 72 bool choose_what_to_sync_; |
73 bool confirm_untrusted_signin_; | |
71 | 74 |
72 DISALLOW_COPY_AND_ASSIGN(InlineSigninHelper); | 75 DISALLOW_COPY_AND_ASSIGN(InlineSigninHelper); |
73 }; | 76 }; |
74 | 77 |
75 InlineSigninHelper::InlineSigninHelper( | 78 InlineSigninHelper::InlineSigninHelper( |
76 base::WeakPtr<InlineLoginHandlerImpl> handler, | 79 base::WeakPtr<InlineLoginHandlerImpl> handler, |
77 net::URLRequestContextGetter* getter, | 80 net::URLRequestContextGetter* getter, |
78 Profile* profile, | 81 Profile* profile, |
79 const GURL& current_url, | 82 const GURL& current_url, |
80 const std::string& email, | 83 const std::string& email, |
81 const std::string& password, | 84 const std::string& password, |
82 const std::string& session_index, | 85 const std::string& session_index, |
83 const std::string& signin_scoped_device_id, | 86 const std::string& signin_scoped_device_id, |
84 bool choose_what_to_sync) | 87 bool choose_what_to_sync, |
88 bool confirm_untrusted_signin) | |
85 : SigninOAuthHelper(getter, session_index, signin_scoped_device_id, this), | 89 : SigninOAuthHelper(getter, session_index, signin_scoped_device_id, this), |
86 handler_(handler), | 90 handler_(handler), |
87 profile_(profile), | 91 profile_(profile), |
88 current_url_(current_url), | 92 current_url_(current_url), |
89 email_(email), | 93 email_(email), |
90 password_(password), | 94 password_(password), |
91 choose_what_to_sync_(choose_what_to_sync) { | 95 session_index_(session_index), |
96 choose_what_to_sync_(choose_what_to_sync), | |
97 confirm_untrusted_signin_(confirm_untrusted_signin) { | |
92 DCHECK(profile_); | 98 DCHECK(profile_); |
93 DCHECK(!email_.empty()); | 99 DCHECK(!email_.empty()); |
94 } | 100 } |
95 | 101 |
96 void InlineSigninHelper::OnSigninOAuthInformationAvailable( | 102 void InlineSigninHelper::OnSigninOAuthInformationAvailable( |
97 const std::string& email, | 103 const std::string& email, |
98 const std::string& display_email, | 104 const std::string& display_email, |
99 const std::string& refresh_token) { | 105 const std::string& refresh_token) { |
100 content::WebContents* contents = NULL; | 106 content::WebContents* contents = NULL; |
101 Browser* browser = NULL; | 107 Browser* browser = NULL; |
(...skipping 27 matching lines...) Expand all Loading... | |
129 SigninErrorController* error_controller = | 135 SigninErrorController* error_controller = |
130 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> | 136 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> |
131 signin_error_controller(); | 137 signin_error_controller(); |
132 OneClickSigninSyncStarter::StartSyncMode start_mode = | 138 OneClickSigninSyncStarter::StartSyncMode start_mode = |
133 source == signin::SOURCE_SETTINGS || choose_what_to_sync_ ? | 139 source == signin::SOURCE_SETTINGS || choose_what_to_sync_ ? |
134 (error_controller->HasError() && | 140 (error_controller->HasError() && |
135 sync_service && sync_service->HasSyncSetupCompleted()) ? | 141 sync_service && sync_service->HasSyncSetupCompleted()) ? |
136 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : | 142 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : |
137 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : | 143 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : |
138 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; | 144 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; |
139 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required = | 145 |
140 source == signin::SOURCE_SETTINGS || | 146 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; |
141 source == signin::SOURCE_WEBSTORE_INSTALL || | 147 if (confirm_untrusted_signin_) { |
142 choose_what_to_sync_ ? | 148 confirmation_required = |
143 OneClickSigninSyncStarter::NO_CONFIRMATION : | 149 OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; |
144 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | 150 } else { |
151 confirmation_required = | |
152 source == signin::SOURCE_SETTINGS || | |
153 source == signin::SOURCE_WEBSTORE_INSTALL || | |
154 choose_what_to_sync_ ? | |
155 OneClickSigninSyncStarter::NO_CONFIRMATION : | |
156 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | |
157 } | |
145 | 158 |
146 bool start_signin = | 159 bool start_signin = |
147 !OneClickSigninHelper::HandleCrossAccountError( | 160 !OneClickSigninHelper::HandleCrossAccountError( |
148 contents, "", | 161 contents, "", |
149 email, password_, refresh_token, | 162 email, password_, refresh_token, |
150 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, | 163 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, |
151 source, start_mode, | 164 source, start_mode, |
152 base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback, | 165 base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback, |
153 handler_)); | 166 handler_)); |
154 if (start_signin) { | 167 if (start_signin) { |
(...skipping 22 matching lines...) Expand all Loading... | |
177 AboutSigninInternalsFactory::GetForProfile(profile_); | 190 AboutSigninInternalsFactory::GetForProfile(profile_); |
178 about_signin_internals->OnRefreshTokenReceived("Failure"); | 191 about_signin_internals->OnRefreshTokenReceived("Failure"); |
179 | 192 |
180 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 193 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
181 } | 194 } |
182 | 195 |
183 } // namespace | 196 } // namespace |
184 | 197 |
185 InlineLoginHandlerImpl::InlineLoginHandlerImpl() | 198 InlineLoginHandlerImpl::InlineLoginHandlerImpl() |
186 : weak_factory_(this), | 199 : weak_factory_(this), |
187 choose_what_to_sync_(false) { | 200 confirm_untrusted_signin_(false) { |
188 } | 201 } |
189 | 202 |
190 InlineLoginHandlerImpl::~InlineLoginHandlerImpl() {} | 203 InlineLoginHandlerImpl::~InlineLoginHandlerImpl() {} |
191 | 204 |
192 bool InlineLoginHandlerImpl::HandleContextMenu( | 205 bool InlineLoginHandlerImpl::HandleContextMenu( |
193 const content::ContextMenuParams& params) { | 206 const content::ContextMenuParams& params) { |
194 #ifndef NDEBUG | 207 #ifndef NDEBUG |
195 return false; | 208 return false; |
196 #else | 209 #else |
197 return true; | 210 return true; |
198 #endif | 211 #endif |
199 } | 212 } |
200 | 213 |
214 void InlineLoginHandlerImpl::DidCommitProvisionalLoadForFrame( | |
215 content::RenderFrameHost* render_frame_host, | |
216 const GURL& url, | |
217 content::PageTransition transition_type) { | |
218 if (!web_contents()) | |
219 return; | |
220 | |
221 // Return early if this is not a gaia iframe navigation. | |
222 const GURL kGaiaExtOrigin( | |
223 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/"); | |
224 content::RenderFrameHost* gaia_iframe = InlineLoginUI::GetAuthIframe( | |
225 web_contents(), kGaiaExtOrigin, "signin-frame"); | |
226 if (render_frame_host != gaia_iframe) | |
227 return; | |
228 | |
229 if (url.spec() != url::kAboutBlankURL && | |
Charlie Reis
2014/07/23 21:42:00
Let's put a comment here saying that loading any u
guohui
2014/07/23 21:57:51
Done.
guohui
2014/07/23 21:57:51
Done.
| |
230 !gaia::IsGaiaSignonRealm(url.GetOrigin()) && | |
231 !signin::IsContinueUrlForWebBasedSigninFlow(url)) { | |
Charlie Reis
2014/07/23 21:42:00
Does the continue URL get loaded in the sign-in pr
guohui
2014/07/23 21:57:51
The continue URL does get loaded in the signin pro
Charlie Reis
2014/07/23 22:18:06
But it can be specified manually as a URL paramete
guohui
2014/07/23 23:19:46
https://code.google.com/p/chromium/codesearch#chro
Charlie Reis
2014/07/23 23:36:12
Acknowledged.
| |
232 confirm_untrusted_signin_ = true; | |
233 } | |
234 } | |
235 | |
201 void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) { | 236 void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) { |
202 params.SetString("service", "chromiumsync"); | 237 params.SetString("service", "chromiumsync"); |
203 | 238 |
204 content::WebContents* contents = web_ui()->GetWebContents(); | 239 content::WebContents* contents = web_ui()->GetWebContents(); |
205 const GURL& current_url = contents->GetURL(); | 240 const GURL& current_url = contents->GetURL(); |
206 std::string is_constrained; | 241 std::string is_constrained; |
207 net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained); | 242 net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained); |
208 if (is_constrained == "1") | 243 if (is_constrained == "1") |
209 contents->SetDelegate(this); | 244 contents->SetDelegate(this); |
210 | 245 |
246 content::WebContentsObserver::Observe(contents); | |
Charlie Reis
2014/07/23 21:42:00
I think this means we only observe when the WebCon
guohui
2014/07/23 21:57:51
We don't explicitly stop observing, so the observa
Charlie Reis
2014/07/23 22:18:06
Is it necessary to keep it around that long? It s
guohui
2014/07/23 23:19:46
sorry i made a mistake in my earlier comment, this
Charlie Reis
2014/07/23 23:36:12
Ah, good. That sounds good to me.
| |
247 | |
211 signin::Source source = signin::GetSourceForPromoURL(current_url); | 248 signin::Source source = signin::GetSourceForPromoURL(current_url); |
212 OneClickSigninHelper::LogHistogramValue( | 249 OneClickSigninHelper::LogHistogramValue( |
213 source, one_click_signin::HISTOGRAM_SHOWN); | 250 source, one_click_signin::HISTOGRAM_SHOWN); |
214 } | 251 } |
215 | 252 |
216 void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) { | 253 void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) { |
217 content::WebContents* contents = web_ui()->GetWebContents(); | 254 content::WebContents* contents = web_ui()->GetWebContents(); |
218 const GURL& current_url = contents->GetURL(); | 255 const GURL& current_url = contents->GetURL(); |
219 | 256 |
220 const base::DictionaryValue* dict = NULL; | 257 const base::DictionaryValue* dict = NULL; |
221 args->GetDictionary(0, &dict); | 258 args->GetDictionary(0, &dict); |
222 | 259 |
223 bool skip_for_now = false; | 260 bool skip_for_now = false; |
224 dict->GetBoolean("skipForNow", &skip_for_now); | 261 dict->GetBoolean("skipForNow", &skip_for_now); |
225 if (skip_for_now) { | 262 if (skip_for_now) { |
226 signin::SetUserSkippedPromo(Profile::FromWebUI(web_ui())); | 263 signin::SetUserSkippedPromo(Profile::FromWebUI(web_ui())); |
227 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); | 264 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); |
228 return; | 265 return; |
229 } | 266 } |
230 | 267 |
231 base::string16 email; | 268 base::string16 email_string16; |
232 dict->GetString("email", &email); | 269 dict->GetString("email", &email_string16); |
233 DCHECK(!email.empty()); | 270 DCHECK(!email_string16.empty()); |
234 email_ = base::UTF16ToASCII(email); | 271 std::string email(base::UTF16ToASCII(email_string16)); |
235 base::string16 password; | 272 |
236 dict->GetString("password", &password); | 273 base::string16 password_string16; |
237 password_ = base::UTF16ToASCII(password); | 274 dict->GetString("password", &password_string16); |
275 std::string password(base::UTF16ToASCII(password_string16)); | |
238 | 276 |
239 // When doing a SAML sign in, this email check may result in a false | 277 // When doing a SAML sign in, this email check may result in a false |
240 // positive. This happens when the user types one email address in the | 278 // positive. This happens when the user types one email address in the |
241 // gaia sign in page, but signs in to a different account in the SAML sign in | 279 // gaia sign in page, but signs in to a different account in the SAML sign in |
242 // page. | 280 // page. |
243 std::string default_email; | 281 std::string default_email; |
244 std::string validate_email; | 282 std::string validate_email; |
245 if (net::GetValueForKeyInQuery(current_url, "email", &default_email) && | 283 if (net::GetValueForKeyInQuery(current_url, "email", &default_email) && |
246 net::GetValueForKeyInQuery(current_url, "validateEmail", | 284 net::GetValueForKeyInQuery(current_url, "validateEmail", |
247 &validate_email) && | 285 &validate_email) && |
248 validate_email == "1") { | 286 validate_email == "1") { |
249 if (!gaia::AreEmailsSame(email_, default_email)) { | 287 if (!gaia::AreEmailsSame(email, default_email)) { |
250 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); | 288 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); |
251 return; | 289 return; |
252 } | 290 } |
253 } | 291 } |
254 | 292 |
255 base::string16 session_index; | 293 base::string16 session_index_string16; |
256 dict->GetString("sessionIndex", &session_index); | 294 dict->GetString("sessionIndex", &session_index_string16); |
257 session_index_ = base::UTF16ToASCII(session_index); | 295 std::string session_index = base::UTF16ToASCII(session_index_string16); |
258 DCHECK(!session_index_.empty()); | 296 DCHECK(!session_index.empty()); |
259 dict->GetBoolean("chooseWhatToSync", &choose_what_to_sync_); | 297 |
298 bool choose_what_to_sync = false; | |
299 dict->GetBoolean("chooseWhatToSync", &choose_what_to_sync); | |
260 | 300 |
261 signin::Source source = signin::GetSourceForPromoURL(current_url); | 301 signin::Source source = signin::GetSourceForPromoURL(current_url); |
262 OneClickSigninHelper::LogHistogramValue( | 302 OneClickSigninHelper::LogHistogramValue( |
263 source, one_click_signin::HISTOGRAM_ACCEPTED); | 303 source, one_click_signin::HISTOGRAM_ACCEPTED); |
264 bool switch_to_advanced = | 304 bool switch_to_advanced = |
265 choose_what_to_sync_ && (source != signin::SOURCE_SETTINGS); | 305 choose_what_to_sync && (source != signin::SOURCE_SETTINGS); |
266 OneClickSigninHelper::LogHistogramValue( | 306 OneClickSigninHelper::LogHistogramValue( |
267 source, | 307 source, |
268 switch_to_advanced ? one_click_signin::HISTOGRAM_WITH_ADVANCED : | 308 switch_to_advanced ? one_click_signin::HISTOGRAM_WITH_ADVANCED : |
269 one_click_signin::HISTOGRAM_WITH_DEFAULTS); | 309 one_click_signin::HISTOGRAM_WITH_DEFAULTS); |
270 | 310 |
271 OneClickSigninHelper::CanOfferFor can_offer_for = | 311 OneClickSigninHelper::CanOfferFor can_offer_for = |
272 OneClickSigninHelper::CAN_OFFER_FOR_ALL; | 312 OneClickSigninHelper::CAN_OFFER_FOR_ALL; |
273 switch (source) { | 313 switch (source) { |
274 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT: | 314 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT: |
275 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; | 315 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
276 break; | 316 break; |
277 case signin::SOURCE_REAUTH: { | 317 case signin::SOURCE_REAUTH: { |
278 std::string primary_username = | 318 std::string primary_username = |
279 SigninManagerFactory::GetForProfile( | 319 SigninManagerFactory::GetForProfile( |
280 Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername(); | 320 Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername(); |
281 if (!gaia::AreEmailsSame(default_email, primary_username)) | 321 if (!gaia::AreEmailsSame(default_email, primary_username)) |
282 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; | 322 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
283 break; | 323 break; |
284 } | 324 } |
285 default: | 325 default: |
286 // No need to change |can_offer_for|. | 326 // No need to change |can_offer_for|. |
287 break; | 327 break; |
288 } | 328 } |
289 | 329 |
290 std::string error_msg; | 330 std::string error_msg; |
291 bool can_offer = OneClickSigninHelper::CanOffer( | 331 bool can_offer = OneClickSigninHelper::CanOffer( |
292 contents, can_offer_for, email_, &error_msg); | 332 contents, can_offer_for, email, &error_msg); |
293 if (!can_offer) { | 333 if (!can_offer) { |
294 HandleLoginError(error_msg); | 334 HandleLoginError(error_msg); |
295 return; | 335 return; |
296 } | 336 } |
297 | 337 |
298 AboutSigninInternals* about_signin_internals = | 338 AboutSigninInternals* about_signin_internals = |
299 AboutSigninInternalsFactory::GetForProfile(Profile::FromWebUI(web_ui())); | 339 AboutSigninInternalsFactory::GetForProfile(Profile::FromWebUI(web_ui())); |
300 about_signin_internals->OnAuthenticationResultReceived( | 340 about_signin_internals->OnAuthenticationResultReceived( |
301 "GAIA Auth Successful"); | 341 "GAIA Auth Successful"); |
302 | 342 |
303 content::StoragePartition* partition = | 343 content::StoragePartition* partition = |
304 content::BrowserContext::GetStoragePartitionForSite( | 344 content::BrowserContext::GetStoragePartitionForSite( |
305 contents->GetBrowserContext(), | 345 contents->GetBrowserContext(), |
306 GURL(chrome::kChromeUIChromeSigninURL)); | 346 GURL(chrome::kChromeUIChromeSigninURL)); |
307 | 347 |
308 SigninClient* signin_client = | 348 SigninClient* signin_client = |
309 ChromeSigninClientFactory::GetForProfile(Profile::FromWebUI(web_ui())); | 349 ChromeSigninClientFactory::GetForProfile(Profile::FromWebUI(web_ui())); |
310 std::string signin_scoped_device_id = | 350 std::string signin_scoped_device_id = |
311 signin_client->GetSigninScopedDeviceId(); | 351 signin_client->GetSigninScopedDeviceId(); |
312 // InlineSigninHelper will delete itself. | 352 // InlineSigninHelper will delete itself. |
313 new InlineSigninHelper(GetWeakPtr(), partition->GetURLRequestContext(), | 353 new InlineSigninHelper(GetWeakPtr(), partition->GetURLRequestContext(), |
314 Profile::FromWebUI(web_ui()), current_url, | 354 Profile::FromWebUI(web_ui()), current_url, |
315 email_, password_, session_index_, | 355 email, password, session_index, |
316 signin_scoped_device_id, choose_what_to_sync_); | 356 signin_scoped_device_id, choose_what_to_sync, |
357 confirm_untrusted_signin_); | |
317 | 358 |
318 email_.clear(); | |
319 password_.clear(); | |
320 session_index_.clear(); | |
321 web_ui()->CallJavascriptFunction("inline.login.closeDialog"); | 359 web_ui()->CallJavascriptFunction("inline.login.closeDialog"); |
322 } | 360 } |
323 | 361 |
324 void InlineLoginHandlerImpl::HandleLoginError(const std::string& error_msg) { | 362 void InlineLoginHandlerImpl::HandleLoginError(const std::string& error_msg) { |
325 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); | 363 SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE); |
326 | 364 |
327 Browser* browser = GetDesktopBrowser(); | 365 Browser* browser = GetDesktopBrowser(); |
328 if (browser && !error_msg.empty()) { | 366 if (browser && !error_msg.empty()) { |
329 VLOG(1) << "InlineLoginHandlerImpl::HandleLoginError shows error message: " | 367 VLOG(1) << "InlineLoginHandlerImpl::HandleLoginError shows error message: " |
330 << error_msg; | 368 << error_msg; |
331 OneClickSigninHelper::ShowSigninErrorBubble(browser, error_msg); | 369 OneClickSigninHelper::ShowSigninErrorBubble(browser, error_msg); |
332 } | 370 } |
333 | |
334 email_.clear(); | |
335 password_.clear(); | |
336 session_index_.clear(); | |
337 } | 371 } |
338 | 372 |
339 Browser* InlineLoginHandlerImpl::GetDesktopBrowser() { | 373 Browser* InlineLoginHandlerImpl::GetDesktopBrowser() { |
340 Browser* browser = chrome::FindBrowserWithWebContents( | 374 Browser* browser = chrome::FindBrowserWithWebContents( |
341 web_ui()->GetWebContents()); | 375 web_ui()->GetWebContents()); |
342 if (!browser) { | 376 if (!browser) { |
343 browser = chrome::FindLastActiveWithProfile( | 377 browser = chrome::FindLastActiveWithProfile( |
344 Profile::FromWebUI(web_ui()), chrome::GetActiveDesktop()); | 378 Profile::FromWebUI(web_ui()), chrome::GetActiveDesktop()); |
345 } | 379 } |
346 return browser; | 380 return browser; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
387 } | 421 } |
388 } | 422 } |
389 | 423 |
390 if (show_account_management) { | 424 if (show_account_management) { |
391 browser->window()->ShowAvatarBubbleFromAvatarButton( | 425 browser->window()->ShowAvatarBubbleFromAvatarButton( |
392 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, | 426 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, |
393 signin::ManageAccountsParams()); | 427 signin::ManageAccountsParams()); |
394 } | 428 } |
395 } | 429 } |
396 } | 430 } |
OLD | NEW |