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

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc

Issue 304303005: ChromeOS login webui refactoring : Move GAIA-related code to gaia_screen_handler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698