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/chromeos/login/gaia_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/metrics/histogram.h" | |
9 #include "base/strings/utf_string_conversions.h" | |
8 #include "base/values.h" | 10 #include "base/values.h" |
9 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
12 #include "chrome/browser/browser_shutdown.h" | |
13 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | |
10 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" | 14 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" |
11 #include "chrome/browser/chromeos/login/users/user_manager.h" | 15 #include "chrome/browser/chromeos/login/users/user_manager.h" |
16 #include "chrome/browser/chromeos/profiles/profile_helper.h" | |
12 #include "chrome/browser/chromeos/settings/cros_settings.h" | 17 #include "chrome/browser/chromeos/settings/cros_settings.h" |
18 #include "chrome/browser/io_thread.h" | |
13 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" | 19 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
14 #include "chromeos/chromeos_switches.h" | 20 #include "chromeos/chromeos_switches.h" |
15 #include "chromeos/settings/cros_settings_names.h" | 21 #include "chromeos/settings/cros_settings_names.h" |
22 #include "content/public/browser/browser_thread.h" | |
23 #include "content/public/browser/render_frame_host.h" | |
24 #include "google_apis/gaia/gaia_auth_util.h" | |
16 #include "google_apis/gaia/gaia_switches.h" | 25 #include "google_apis/gaia/gaia_switches.h" |
17 #include "google_apis/gaia/gaia_urls.h" | 26 #include "google_apis/gaia/gaia_urls.h" |
18 #include "grit/chromium_strings.h" | 27 #include "grit/chromium_strings.h" |
19 #include "grit/generated_resources.h" | 28 #include "grit/generated_resources.h" |
20 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
21 | 30 |
31 using content::BrowserThread; | |
32 | |
22 namespace chromeos { | 33 namespace chromeos { |
23 | 34 |
24 namespace { | 35 namespace { |
25 | 36 |
26 const char kJsScreenPath[] = "login.GaiaSigninScreen"; | 37 const char kJsScreenPath[] = "login.GaiaSigninScreen"; |
27 | 38 |
28 // Updates params dictionary passed to the auth extension with related | 39 // Updates params dictionary passed to the auth extension with related |
29 // preferences from CrosSettings. | 40 // preferences from CrosSettings. |
30 void UpdateAuthParamsFromSettings(base::DictionaryValue* params, | 41 void UpdateAuthParamsFromSettings(base::DictionaryValue* params, |
31 const CrosSettings* cros_settings) { | 42 const CrosSettings* cros_settings) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 | 83 |
73 // Now check whether we're in multi-profiles user adding scenario and | 84 // Now check whether we're in multi-profiles user adding scenario and |
74 // disable GAIA right panel features if that's the case. | 85 // disable GAIA right panel features if that's the case. |
75 if (UserAddingScreen::Get()->IsRunning()) { | 86 if (UserAddingScreen::Get()->IsRunning()) { |
76 params->SetBoolean("createAccount", false); | 87 params->SetBoolean("createAccount", false); |
77 params->SetBoolean("guestSignin", false); | 88 params->SetBoolean("guestSignin", false); |
78 params->SetBoolean("managedUsersEnabled", false); | 89 params->SetBoolean("managedUsersEnabled", false); |
79 } | 90 } |
80 } | 91 } |
81 | 92 |
93 void RecordSAMLScrapingVerificationResultInHistogram(bool success) { | |
94 UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.Scraping.VerificationResult", success); | |
95 } | |
96 | |
97 // The Task posted to PostTaskAndReply in StartClearingDnsCache on the IO | |
98 // thread. | |
99 void ClearDnsCache(IOThread* io_thread) { | |
100 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
101 if (browser_shutdown::IsTryingToQuit()) | |
102 return; | |
103 | |
104 io_thread->ClearHostCache(); | |
105 } | |
106 | |
82 } // namespace | 107 } // namespace |
83 | 108 |
84 GaiaContext::GaiaContext() | 109 GaiaContext::GaiaContext() |
85 : force_reload(false), | 110 : force_reload(false), |
86 is_local(false), | 111 is_local(false), |
87 password_changed(false), | 112 password_changed(false), |
88 show_users(false), | 113 show_users(false), |
89 use_offline(false), | 114 use_offline(false), |
90 has_users(false) {} | 115 has_users(false) {} |
91 | 116 |
92 GaiaScreenHandler::GaiaScreenHandler( | 117 GaiaScreenHandler::GaiaScreenHandler( |
93 const scoped_refptr<NetworkStateInformer>& network_state_informer) | 118 const scoped_refptr<NetworkStateInformer>& network_state_informer) |
94 : BaseScreenHandler(kJsScreenPath), | 119 : BaseScreenHandler(kJsScreenPath), |
95 frame_state_(FRAME_STATE_UNKNOWN), | 120 frame_state_(FRAME_STATE_UNKNOWN), |
96 frame_error_(net::OK), | 121 frame_error_(net::OK), |
97 network_state_informer_(network_state_informer), | 122 network_state_informer_(network_state_informer), |
98 signin_screen_handler_(NULL) { | 123 dns_cleared_(false), |
124 dns_clear_task_running_(false), | |
125 cookies_cleared_(false), | |
126 focus_stolen_(false), | |
127 gaia_silent_load_(false), | |
128 using_saml_api_(false), | |
129 test_expects_complete_login_(false), | |
130 signin_screen_handler_(NULL), | |
131 weak_factory_(this) { | |
99 DCHECK(network_state_informer_.get()); | 132 DCHECK(network_state_informer_.get()); |
100 } | 133 } |
101 | 134 |
102 GaiaScreenHandler::~GaiaScreenHandler() {} | 135 GaiaScreenHandler::~GaiaScreenHandler() { |
136 weak_factory_.InvalidateWeakPtrs(); | |
137 } | |
138 | |
139 void GaiaScreenHandler::DeclareLocalizedValues( | |
140 LocalizedValuesBuilder* builder) { | |
141 builder->Add("signinScreenTitle", IDS_SIGNIN_SCREEN_TITLE); | |
142 builder->Add("signinScreenPasswordChanged", | |
143 IDS_SIGNIN_SCREEN_PASSWORD_CHANGED); | |
144 builder->Add("createAccount", IDS_CREATE_ACCOUNT_HTML); | |
145 builder->Add("guestSignin", IDS_BROWSE_WITHOUT_SIGNING_IN_HTML); | |
146 builder->Add("createLocallyManagedUser", | |
147 IDS_CREATE_LOCALLY_MANAGED_USER_HTML); | |
148 builder->Add("createManagedUserFeatureName", | |
149 IDS_CREATE_LOCALLY_MANAGED_USER_FEATURE_NAME); | |
150 | |
151 // Strings used by the fatal error dialog. | |
Nikita (slow)
2014/06/02 14:18:29
nit: by the SAML fatal error dialog
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
152 builder->Add("fatalErrorMessageNoEmail", IDS_LOGIN_FATAL_ERROR_NO_EMAIL); | |
153 builder->Add("fatalErrorMessageNoPassword", | |
154 IDS_LOGIN_FATAL_ERROR_NO_PASSWORD); | |
155 builder->Add("fatalErrorMessageVerificationFailed", | |
156 IDS_LOGIN_FATAL_ERROR_PASSWORD_VERIFICATION); | |
157 builder->Add("fatalErrorMessageInsecureURL", | |
158 IDS_LOGIN_FATAL_ERROR_TEXT_INSECURE_URL); | |
159 builder->Add("fatalErrorInstructions", IDS_LOGIN_FATAL_ERROR_INSTRUCTIONS); | |
160 builder->Add("fatalErrorDismissButton", IDS_OK); | |
161 } | |
162 | |
163 void GaiaScreenHandler::Initialize() { | |
164 } | |
165 | |
166 void GaiaScreenHandler::RegisterMessages() { | |
167 AddCallback("frameLoadingCompleted", | |
168 &GaiaScreenHandler::HandleFrameLoadingCompleted); | |
169 AddCallback("completeLogin", &GaiaScreenHandler::HandleCompleteLogin); | |
170 AddCallback("completeAuthentication", | |
171 &GaiaScreenHandler::HandleCompleteAuthentication); | |
172 AddCallback("usingSAMLAPI", &GaiaScreenHandler::HandleUsingSAMLAPI); | |
173 AddCallback("scrapedPasswordCount", | |
174 &GaiaScreenHandler::HandleScrapedPasswordCount); | |
175 AddCallback("scrapedPasswordVerificationFailed", | |
176 &GaiaScreenHandler::HandleScrapedPasswordVerificationFailed); | |
177 AddCallback("loginWebuiReady", &GaiaScreenHandler::HandleGaiaUIReady); | |
178 } | |
103 | 179 |
104 void GaiaScreenHandler::LoadGaia(const GaiaContext& context) { | 180 void GaiaScreenHandler::LoadGaia(const GaiaContext& context) { |
105 LOG(WARNING) << "LoadGaia() call."; | 181 LOG(WARNING) << "LoadGaia() call."; |
106 | 182 |
107 base::DictionaryValue params; | 183 base::DictionaryValue params; |
108 | 184 |
109 params.SetBoolean("forceReload", context.force_reload); | 185 params.SetBoolean("forceReload", context.force_reload); |
110 params.SetBoolean("isLocal", context.is_local); | 186 params.SetBoolean("isLocal", context.is_local); |
111 params.SetBoolean("passwordChanged", context.password_changed); | 187 params.SetBoolean("passwordChanged", context.password_changed); |
112 params.SetBoolean("isShowUsers", context.show_users); | 188 params.SetBoolean("isShowUsers", context.show_users); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
168 LOG(WARNING) << "Skipping reloading of Gaia since " | 244 LOG(WARNING) << "Skipping reloading of Gaia since " |
169 << "network state=" | 245 << "network state=" |
170 << NetworkStateInformer::StatusString(state); | 246 << NetworkStateInformer::StatusString(state); |
171 return; | 247 return; |
172 } | 248 } |
173 LOG(WARNING) << "Reloading Gaia."; | 249 LOG(WARNING) << "Reloading Gaia."; |
174 frame_state_ = FRAME_STATE_LOADING; | 250 frame_state_ = FRAME_STATE_LOADING; |
175 CallJS("doReload"); | 251 CallJS("doReload"); |
176 } | 252 } |
177 | 253 |
178 void GaiaScreenHandler::DeclareLocalizedValues( | |
179 LocalizedValuesBuilder* builder) { | |
180 builder->Add("signinScreenTitle", IDS_SIGNIN_SCREEN_TITLE); | |
181 builder->Add("signinScreenPasswordChanged", | |
182 IDS_SIGNIN_SCREEN_PASSWORD_CHANGED); | |
183 builder->Add("createAccount", IDS_CREATE_ACCOUNT_HTML); | |
184 builder->Add("guestSignin", IDS_BROWSE_WITHOUT_SIGNING_IN_HTML); | |
185 builder->Add("createLocallyManagedUser", | |
186 IDS_CREATE_LOCALLY_MANAGED_USER_HTML); | |
187 builder->Add("createManagedUserFeatureName", | |
188 IDS_CREATE_LOCALLY_MANAGED_USER_FEATURE_NAME); | |
189 | |
190 // Strings used by the fatal error dialog. | |
191 builder->Add("fatalErrorMessageNoEmail", IDS_LOGIN_FATAL_ERROR_NO_EMAIL); | |
192 builder->Add("fatalErrorMessageNoPassword", | |
193 IDS_LOGIN_FATAL_ERROR_NO_PASSWORD); | |
194 builder->Add("fatalErrorMessageVerificationFailed", | |
195 IDS_LOGIN_FATAL_ERROR_PASSWORD_VERIFICATION); | |
196 builder->Add("fatalErrorMessageInsecureURL", | |
197 IDS_LOGIN_FATAL_ERROR_TEXT_INSECURE_URL); | |
198 builder->Add("fatalErrorInstructions", IDS_LOGIN_FATAL_ERROR_INSTRUCTIONS); | |
199 builder->Add("fatalErrorDismissButton", IDS_OK); | |
200 } | |
201 | |
202 void GaiaScreenHandler::Initialize() {} | |
203 | |
204 void GaiaScreenHandler::RegisterMessages() { | |
205 AddCallback("frameLoadingCompleted", | |
206 &GaiaScreenHandler::HandleFrameLoadingCompleted); | |
207 } | |
208 | |
209 void GaiaScreenHandler::HandleFrameLoadingCompleted(int status) { | 254 void GaiaScreenHandler::HandleFrameLoadingCompleted(int status) { |
210 const net::Error frame_error = static_cast<net::Error>(-status); | 255 const net::Error frame_error = static_cast<net::Error>(-status); |
211 if (frame_error == net::ERR_ABORTED) { | 256 if (frame_error == net::ERR_ABORTED) { |
212 LOG(WARNING) << "Ignoring Gaia frame error: " << frame_error; | 257 LOG(WARNING) << "Ignoring Gaia frame error: " << frame_error; |
213 return; | 258 return; |
214 } | 259 } |
215 frame_error_ = frame_error; | 260 frame_error_ = frame_error; |
216 if (frame_error == net::OK) { | 261 if (frame_error == net::OK) { |
217 VLOG(1) << "Gaia is loaded"; | 262 VLOG(1) << "Gaia is loaded"; |
218 frame_state_ = FRAME_STATE_LOADED; | 263 frame_state_ = FRAME_STATE_LOADED; |
219 } else { | 264 } else { |
220 LOG(WARNING) << "Gaia frame error: " << frame_error_; | 265 LOG(WARNING) << "Gaia frame error: " << frame_error_; |
221 frame_state_ = FRAME_STATE_ERROR; | 266 frame_state_ = FRAME_STATE_ERROR; |
222 } | 267 } |
223 | 268 |
224 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) | 269 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) |
225 return; | 270 return; |
226 if (frame_state_ == FRAME_STATE_LOADED) | 271 if (frame_state_ == FRAME_STATE_LOADED) |
227 UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); | 272 UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); |
228 else if (frame_state_ == FRAME_STATE_ERROR) | 273 else if (frame_state_ == FRAME_STATE_ERROR) |
229 UpdateState(ErrorScreenActor::ERROR_REASON_FRAME_ERROR); | 274 UpdateState(ErrorScreenActor::ERROR_REASON_FRAME_ERROR); |
230 } | 275 } |
231 | 276 |
232 void GaiaScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) { | 277 void GaiaScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) { |
233 if (signin_screen_handler_) | 278 if (signin_screen_handler_) |
234 signin_screen_handler_->UpdateState(reason); | 279 signin_screen_handler_->UpdateState(reason); |
235 } | 280 } |
236 | 281 |
282 void GaiaScreenHandler::HandleCompleteLogin(const std::string& typed_email, | |
283 const std::string& password, | |
284 bool using_saml) { | |
285 if (using_saml && !using_saml_api_) | |
286 RecordSAMLScrapingVerificationResultInHistogram(true); | |
287 | |
288 const std::string sanitized_email = gaia::SanitizeEmail(typed_email); | |
289 Delegate()->SetDisplayEmail(sanitized_email); | |
290 UserContext user_context(sanitized_email); | |
291 user_context.SetKey(Key(password)); | |
292 user_context.SetAuthFlow(using_saml | |
293 ? UserContext::AUTH_FLOW_GAIA_WITH_SAML | |
294 : UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); | |
295 Delegate()->CompleteLogin(user_context); | |
296 | |
297 if (test_expects_complete_login_) { | |
298 VLOG(2) << "Complete test login for " << typed_email | |
299 << ", requested=" << test_user_; | |
300 | |
301 test_expects_complete_login_ = false; | |
302 test_user_.clear(); | |
303 test_pass_.clear(); | |
304 } | |
305 } | |
306 | |
307 void GaiaScreenHandler::HandleCompleteAuthentication( | |
308 const std::string& email, | |
309 const std::string& password, | |
310 const std::string& auth_code) { | |
311 Delegate()->SetDisplayEmail(gaia::SanitizeEmail(email)); | |
Nikita (slow)
2014/06/02 14:18:29
As discussed, let's continue checking for Delegate
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
312 UserContext user_context(email); | |
313 user_context.SetKey(Key(password)); | |
314 user_context.SetAuthCode(auth_code); | |
315 Delegate()->CompleteLogin(user_context); | |
316 } | |
317 | |
318 void GaiaScreenHandler::ShowSigninScreenForCreds(const std::string& username, | |
319 const std::string& password) { | |
320 VLOG(2) << "ShowSigninScreenForCreds for user " << username | |
321 << ", frame_state=" << FrameState(); | |
322 | |
323 test_user_ = username; | |
324 test_pass_ = password; | |
325 test_expects_complete_login_ = true; | |
326 | |
327 // Submit login form for test if gaia is ready. If gaia is loading, login | |
328 // will be attempted in HandleLoginWebuiReady after gaia is ready. Otherwise, | |
329 // reload gaia then follow the loading case. | |
330 if (FrameState() == GaiaScreenHandler::FRAME_STATE_LOADED) | |
331 SubmitLoginFormForTest(); | |
332 else if (FrameState() != GaiaScreenHandler::FRAME_STATE_LOADING) { | |
333 DCHECK(signin_screen_handler_); | |
334 signin_screen_handler_->OnShowAddUser(); | |
Nikita (slow)
2014/06/02 14:18:29
Can you call ShowGaia() directly here or this is d
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
335 } | |
336 } | |
337 | |
338 void GaiaScreenHandler::SubmitLoginFormForTest() { | |
339 VLOG(2) << "Submit login form for test, user=" << test_user_; | |
340 | |
341 std::string code; | |
342 code += "document.getElementById('Email').value = '" + test_user_ + "';"; | |
343 code += "document.getElementById('Passwd').value = '" + test_pass_ + "';"; | |
344 code += "document.getElementById('signIn').click();"; | |
345 | |
346 content::RenderFrameHost* frame = | |
347 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents()); | |
348 frame->ExecuteJavaScript(base::ASCIIToUTF16(code)); | |
349 | |
350 // Test properties are cleared in HandleCompleteLogin because the form | |
351 // submission might fail and login will not be attempted after reloading | |
352 // if they are cleared here. | |
353 } | |
354 | |
355 void GaiaScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) { | |
356 using_saml_api_ = api_used; | |
357 UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used); | |
358 } | |
359 | |
360 void GaiaScreenHandler::HandleUsingSAMLAPI() { | |
361 SetSAMLPrincipalsAPIUsed(true); | |
362 } | |
363 | |
364 void GaiaScreenHandler::HandleScrapedPasswordCount(int password_count) { | |
365 SetSAMLPrincipalsAPIUsed(false); | |
366 // Use a histogram that has 11 buckets, one for each of the values in [0, 9] | |
367 // and an overflow bucket at the end. | |
368 UMA_HISTOGRAM_ENUMERATION( | |
369 "ChromeOS.SAML.Scraping.PasswordCount", std::min(password_count, 10), 11); | |
370 if (password_count == 0) | |
371 HandleScrapedPasswordVerificationFailed(); | |
372 } | |
373 | |
374 void GaiaScreenHandler::HandleScrapedPasswordVerificationFailed() { | |
375 RecordSAMLScrapingVerificationResultInHistogram(false); | |
376 } | |
377 | |
378 void GaiaScreenHandler::ShowGaiaScreenIfReady() { | |
379 LOG(WARNING) << "ShowSigninScreenIfReady() call."; | |
Nikita (slow)
2014/06/02 14:18:29
nit: ShowGaiaScreenIfReady
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
380 | |
381 if (!dns_cleared_ || !cookies_cleared_ || !Delegate()) | |
382 return; | |
383 | |
384 std::string active_network_path = network_state_informer_->network_path(); | |
385 if (gaia_silent_load_ && | |
386 (network_state_informer_->state() != NetworkStateInformer::ONLINE || | |
387 gaia_silent_load_network_ != active_network_path)) { | |
388 // Network has changed. Force Gaia reload. | |
389 gaia_silent_load_ = false; | |
390 // Gaia page will be realoded, so focus isn't stolen anymore. | |
391 focus_stolen_ = false; | |
392 } | |
393 | |
394 // Note that LoadAuthExtension clears |populated_email_|. | |
395 if (populated_email_.empty()) | |
396 Delegate()->LoadSigninWallpaper(); | |
397 else | |
398 Delegate()->LoadWallpaper(populated_email_); | |
399 | |
400 // Set Least Recently Used input method for the user. | |
401 if (!populated_email_.empty()) | |
402 signin_screen_handler_->SetUserInputMethod(populated_email_); | |
403 | |
404 LoadAuthExtension(!gaia_silent_load_, false, false); | |
405 signin_screen_handler_->UpdateUIState( | |
406 SigninScreenHandler::UI_STATE_GAIA_SIGNIN, NULL); | |
407 | |
408 if (gaia_silent_load_) { | |
409 // The variable is assigned to false because silently loaded Gaia page was | |
410 // used. | |
411 gaia_silent_load_ = false; | |
412 if (focus_stolen_) | |
413 HandleGaiaUIReady(); | |
414 } | |
415 | |
416 signin_screen_handler_->UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); | |
417 } | |
418 | |
419 void GaiaScreenHandler::HandleGaiaUIReady() { | |
420 if (focus_stolen_) { | |
421 // Set focus to the Gaia page. | |
422 // TODO(altimofeev): temporary solution, until focus parameters are | |
423 // implemented on the Gaia side. | |
424 // Do this only once. Any subsequent call would relod GAIA frame. | |
425 focus_stolen_ = false; | |
426 const char code[] = | |
427 "if (typeof gWindowOnLoad != 'undefined') gWindowOnLoad();"; | |
428 content::RenderFrameHost* frame = | |
429 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents()); | |
430 frame->ExecuteJavaScript(base::ASCIIToUTF16(code)); | |
431 } | |
432 if (gaia_silent_load_) { | |
433 focus_stolen_ = true; | |
434 // Prevent focus stealing by the Gaia page. | |
435 // TODO(altimofeev): temporary solution, until focus parameters are | |
436 // implemented on the Gaia side. | |
437 const char code[] = | |
438 "var gWindowOnLoad = window.onload; " | |
439 "window.onload=function() {};"; | |
440 content::RenderFrameHost* frame = | |
441 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents()); | |
442 frame->ExecuteJavaScript(base::ASCIIToUTF16(code)); | |
443 | |
444 // As we could miss and window.onload could already be called, restore | |
445 // focus to current pod (see crbug/175243). | |
446 DCHECK(signin_screen_handler_); | |
447 signin_screen_handler_->RefocusCurrentPod(); | |
448 } | |
449 HandleFrameLoadingCompleted(0); | |
450 | |
451 if (test_expects_complete_login_) | |
452 SubmitLoginFormForTest(); | |
453 } | |
454 | |
455 void GaiaScreenHandler::ShowGaia() { | |
456 if (gaia_silent_load_ && populated_email_.empty()) { | |
457 dns_cleared_ = true; | |
458 cookies_cleared_ = true; | |
459 ShowGaiaScreenIfReady(); | |
460 } else { | |
461 StartClearingDnsCache(); | |
462 StartClearingCookies(base::Bind(&GaiaScreenHandler::ShowGaiaScreenIfReady, | |
463 weak_factory_.GetWeakPtr())); | |
464 } | |
465 } | |
466 | |
467 void GaiaScreenHandler::MaybePreloadAuthExtension() { | |
468 LOG(WARNING) << "MaybePreloadAuthExtension() call."; | |
469 | |
470 // Fetching of the extension is not started before account picker page is | |
Nikita (slow)
2014/06/02 14:18:29
nit: Move first comment sentence to SigninScreenHa
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
471 // loaded because it can affect the loading speed. Also if cookies clearing | |
472 // was initiated or |dns_clear_task_running_| then auth extension showing has | |
473 // already been initiated and preloading is senseless. | |
474 // Do not load the extension for the screen locker, see crosbug.com/25018. | |
Nikita (slow)
2014/06/02 14:18:29
nit: Move screen locker comment to SigninScreenHa
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
| |
475 if (signin_screen_handler_->ShouldLoadGaia() && !gaia_silent_load_ && | |
Nikita (slow)
2014/06/02 14:18:29
nit: Can you please re-format this to have one con
Denis Kuznetsov (DE-MUC)
2014/06/02 16:47:01
Done.
Nikita (slow)
2014/06/02 16:49:34
I don't see changes in this condition. Please chan
| |
476 !cookies_cleared_ && !dns_clear_task_running_ && | |
477 network_state_informer_->state() == NetworkStateInformer::ONLINE) { | |
478 gaia_silent_load_ = true; | |
479 gaia_silent_load_network_ = network_state_informer_->network_path(); | |
480 LoadAuthExtension(true, true, false); | |
481 } | |
482 } | |
483 | |
484 void GaiaScreenHandler::LoadAuthExtension(bool force, | |
485 bool silent_load, | |
486 bool offline) { | |
487 GaiaContext context; | |
488 context.force_reload = force; | |
489 context.is_local = offline; | |
490 context.password_changed = !populated_email_.empty() && | |
491 password_changed_for_.count(populated_email_); | |
492 context.use_offline = offline; | |
493 context.email = populated_email_; | |
494 if (Delegate()) { | |
495 context.show_users = Delegate()->IsShowUsers(); | |
496 context.has_users = !Delegate()->GetUsers().empty(); | |
497 } | |
498 | |
499 populated_email_.clear(); | |
500 | |
501 LoadGaia(context); | |
502 } | |
503 | |
504 void GaiaScreenHandler::StartClearingDnsCache() { | |
505 if (dns_clear_task_running_ || !g_browser_process->io_thread()) | |
506 return; | |
507 | |
508 dns_cleared_ = false; | |
509 BrowserThread::PostTaskAndReply( | |
510 BrowserThread::IO, | |
511 FROM_HERE, | |
512 base::Bind(&ClearDnsCache, g_browser_process->io_thread()), | |
513 base::Bind(&GaiaScreenHandler::OnDnsCleared, weak_factory_.GetWeakPtr())); | |
514 dns_clear_task_running_ = true; | |
515 } | |
516 | |
517 void GaiaScreenHandler::OnDnsCleared() { | |
518 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
519 dns_clear_task_running_ = false; | |
520 dns_cleared_ = true; | |
521 ShowGaiaScreenIfReady(); | |
522 } | |
523 | |
524 void GaiaScreenHandler::StartClearingCookies( | |
525 const base::Closure& on_clear_callback) { | |
526 cookies_cleared_ = false; | |
527 ProfileHelper* profile_helper = | |
528 g_browser_process->platform_part()->profile_helper(); | |
529 LOG_ASSERT(Profile::FromWebUI(web_ui()) == | |
530 profile_helper->GetSigninProfile()); | |
531 profile_helper->ClearSigninProfile( | |
532 base::Bind(&GaiaScreenHandler::OnCookiesCleared, | |
533 weak_factory_.GetWeakPtr(), | |
534 on_clear_callback)); | |
535 } | |
536 | |
537 void GaiaScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) { | |
538 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
539 cookies_cleared_ = true; | |
540 on_clear_callback.Run(); | |
541 } | |
542 | |
543 void GaiaScreenHandler::PopulateEmail(const std::string& user_id) { | |
544 populated_email_ = user_id; | |
545 } | |
546 | |
547 void GaiaScreenHandler::PasswordChangedFor(const std::string& user_id) { | |
548 password_changed_for_.insert(user_id); | |
549 } | |
550 | |
551 SigninScreenHandlerDelegate* GaiaScreenHandler::Delegate() { | |
552 DCHECK(signin_screen_handler_); | |
553 DCHECK(signin_screen_handler_->delegate_); | |
554 return signin_screen_handler_->delegate_; | |
555 } | |
556 | |
237 void GaiaScreenHandler::SetSigninScreenHandler(SigninScreenHandler* handler) { | 557 void GaiaScreenHandler::SetSigninScreenHandler(SigninScreenHandler* handler) { |
238 signin_screen_handler_ = handler; | 558 signin_screen_handler_ = handler; |
239 } | 559 } |
240 | |
241 } // namespace chromeos | 560 } // namespace chromeos |
OLD | NEW |