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

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

Issue 8372093: [cros,login] Pre-load login extension in the background. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 9 years, 1 month 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/signin_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
(...skipping 23 matching lines...) Expand all
34 #include "grit/generated_resources.h" 34 #include "grit/generated_resources.h"
35 #include "net/base/dnsrr_resolver.h" 35 #include "net/base/dnsrr_resolver.h"
36 #include "ui/base/l10n/l10n_util.h" 36 #include "ui/base/l10n/l10n_util.h"
37 37
38 namespace { 38 namespace {
39 39
40 const char kDefaultDomain[] = "@gmail.com"; 40 const char kDefaultDomain[] = "@gmail.com";
41 41
42 // Account picker screen id. 42 // Account picker screen id.
43 const char kAccountPickerScreen[] = "account-picker"; 43 const char kAccountPickerScreen[] = "account-picker";
44 // Sign in screen id.
45 const char kSigninScreen[] = "signin";
46 // Sign in screen id for GAIA extension hosted content. 44 // Sign in screen id for GAIA extension hosted content.
47 const char kGaiaSigninScreen[] = "gaia-signin"; 45 const char kGaiaSigninScreen[] = "gaia-signin";
48 // Start page of GAIA authentication extension. 46 // Start page of GAIA authentication extension.
49 const char kGaiaExtStartPage[] = 47 const char kGaiaExtStartPage[] =
50 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html"; 48 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
51 49
52 // User dictionary keys. 50 // User dictionary keys.
53 const char kKeyName[] = "name"; 51 const char kKeyName[] = "name";
54 const char kKeyEmailAddress[] = "emailAddress"; 52 const char kKeyEmailAddress[] = "emailAddress";
55 const char kKeyCanRemove[] = "canRemove"; 53 const char kKeyCanRemove[] = "canRemove";
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 SendState(*it, reason); 209 SendState(*it, reason);
212 } 210 }
213 } 211 }
214 212
215 // SigninScreenHandler implementation ------------------------------------------ 213 // SigninScreenHandler implementation ------------------------------------------
216 214
217 SigninScreenHandler::SigninScreenHandler() 215 SigninScreenHandler::SigninScreenHandler()
218 : delegate_(NULL), 216 : delegate_(NULL),
219 show_on_init_(false), 217 show_on_init_(false),
220 oobe_ui_(false), 218 oobe_ui_(false),
219 is_waiting_for_webui_ready_(false),
220 is_first_attempt_(true),
221 dns_cleared_(false), 221 dns_cleared_(false),
222 dns_clear_task_running_(false), 222 dns_clear_task_running_(false),
223 cookies_cleared_(false), 223 cookies_cleared_(false),
224 extension_driven_(
225 CommandLine::ForCurrentProcess()->HasSwitch(
226 switches::kWebUILogin)),
227 cookie_remover_(NULL), 224 cookie_remover_(NULL),
228 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 225 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
229 key_event_listener_(NULL) { 226 key_event_listener_(NULL) {
230 } 227 }
231 228
232 SigninScreenHandler::~SigninScreenHandler() { 229 SigninScreenHandler::~SigninScreenHandler() {
233 weak_factory_.InvalidateWeakPtrs(); 230 weak_factory_.InvalidateWeakPtrs();
234 if (cookie_remover_) 231 if (cookie_remover_)
235 cookie_remover_->RemoveObserver(this); 232 cookie_remover_->RemoveObserver(this);
236 if (key_event_listener_) 233 if (key_event_listener_)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_NETWORK_SELECT)); 271 l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_NETWORK_SELECT));
275 localized_strings->SetString("proxyMessageText", 272 localized_strings->SetString("proxyMessageText",
276 l10n_util::GetStringUTF16(IDS_LOGIN_PROXY_ERROR_MESSAGE)); 273 l10n_util::GetStringUTF16(IDS_LOGIN_PROXY_ERROR_MESSAGE));
277 localized_strings->SetString("createAccount", 274 localized_strings->SetString("createAccount",
278 l10n_util::GetStringUTF16(IDS_CREATE_ACCOUNT_HTML)); 275 l10n_util::GetStringUTF16(IDS_CREATE_ACCOUNT_HTML));
279 localized_strings->SetString("guestSignin", 276 localized_strings->SetString("guestSignin",
280 l10n_util::GetStringUTF16(IDS_BROWSE_WITHOUT_SIGNING_IN_HTML)); 277 l10n_util::GetStringUTF16(IDS_BROWSE_WITHOUT_SIGNING_IN_HTML));
281 localized_strings->SetString("removeUser", 278 localized_strings->SetString("removeUser",
282 l10n_util::GetStringUTF16(IDS_LOGIN_REMOVE)); 279 l10n_util::GetStringUTF16(IDS_LOGIN_REMOVE));
283 280
284 if (extension_driven_) 281 localized_strings->SetString("authType", "ext");
285 localized_strings->SetString("authType", "ext");
286 else
287 localized_strings->SetString("authType", "webui");
288 } 282 }
289 283
290 void SigninScreenHandler::Show(bool oobe_ui) { 284 void SigninScreenHandler::Show(bool oobe_ui) {
291 oobe_ui_ = oobe_ui; 285 oobe_ui_ = oobe_ui;
292 if (!page_is_ready()) { 286 if (!page_is_ready()) {
293 show_on_init_ = true; 287 show_on_init_ = true;
294 return; 288 return;
295 } 289 }
296 290
297 if (oobe_ui) { 291 if (oobe_ui) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 base::Unretained(this))); 352 base::Unretained(this)));
359 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen", 353 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen",
360 base::Bind(&SigninScreenHandler::HandleToggleEnrollmentScreen, 354 base::Bind(&SigninScreenHandler::HandleToggleEnrollmentScreen,
361 base::Unretained(this))); 355 base::Unretained(this)));
362 web_ui_->RegisterMessageCallback("launchHelpApp", 356 web_ui_->RegisterMessageCallback("launchHelpApp",
363 base::Bind(&SigninScreenHandler::HandleLaunchHelpApp, 357 base::Bind(&SigninScreenHandler::HandleLaunchHelpApp,
364 base::Unretained(this))); 358 base::Unretained(this)));
365 web_ui_->RegisterMessageCallback("createAccount", 359 web_ui_->RegisterMessageCallback("createAccount",
366 base::Bind(&SigninScreenHandler::HandleCreateAccount, 360 base::Bind(&SigninScreenHandler::HandleCreateAccount,
367 base::Unretained(this))); 361 base::Unretained(this)));
362 web_ui_->RegisterMessageCallback("accountPickerReady",
363 base::Bind(&SigninScreenHandler::HandleAccountPickerReady,
364 base::Unretained(this)));
368 web_ui_->RegisterMessageCallback("loginWebuiReady", 365 web_ui_->RegisterMessageCallback("loginWebuiReady",
369 base::Bind(&SigninScreenHandler::HandleLoginWebuiReady, 366 base::Bind(&SigninScreenHandler::HandleLoginWebuiReady,
370 base::Unretained(this))); 367 base::Unretained(this)));
371 web_ui_->RegisterMessageCallback("loginRequestNetworkState", 368 web_ui_->RegisterMessageCallback("loginRequestNetworkState",
372 base::Bind(&SigninScreenHandler::HandleLoginRequestNetworkState, 369 base::Bind(&SigninScreenHandler::HandleLoginRequestNetworkState,
373 base::Unretained(this))); 370 base::Unretained(this)));
374 web_ui_->RegisterMessageCallback("loginAddNetworkStateObserver", 371 web_ui_->RegisterMessageCallback("loginAddNetworkStateObserver",
375 base::Bind(&SigninScreenHandler::HandleLoginAddNetworkStateObserver, 372 base::Bind(&SigninScreenHandler::HandleLoginAddNetworkStateObserver,
376 base::Unretained(this))); 373 base::Unretained(this)));
377 web_ui_->RegisterMessageCallback("loginRemoveNetworkStateObserver", 374 web_ui_->RegisterMessageCallback("loginRemoveNetworkStateObserver",
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 423 }
427 } 424 }
428 425
429 void SigninScreenHandler::OnDnsCleared() { 426 void SigninScreenHandler::OnDnsCleared() {
430 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 427 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
431 dns_clear_task_running_ = false; 428 dns_clear_task_running_ = false;
432 dns_cleared_ = true; 429 dns_cleared_ = true;
433 ShowSigninScreenIfReady(); 430 ShowSigninScreenIfReady();
434 } 431 }
435 432
436 // Show sign in screen as soon as we clear dns cache the cookie jar.
437 void SigninScreenHandler::ShowSigninScreenIfReady() { 433 void SigninScreenHandler::ShowSigninScreenIfReady() {
438 if (!dns_cleared_ || !cookies_cleared_) 434 if (!dns_cleared_ || !cookies_cleared_)
439 return; 435 return;
440 436
437 is_waiting_for_webui_ready_ = true;
438
439 SetExtensionUrl(!is_first_attempt_);
440 ShowScreen(kGaiaSigninScreen, NULL);
441
442 is_first_attempt_ = false;
443 }
444
445 void SigninScreenHandler::SetExtensionUrl(bool force) {
441 DictionaryValue params; 446 DictionaryValue params;
447
448 params.SetBoolean("forceReload", force);
442 params.SetString("startUrl", kGaiaExtStartPage); 449 params.SetString("startUrl", kGaiaExtStartPage);
443 params.SetString("email", email_); 450 params.SetString("email", email_);
444 email_.clear(); 451 email_.clear();
445 452
453 params.SetBoolean("createAccount",
454 UserCrosSettingsProvider::cached_allow_new_user());
455 params.SetBoolean("guestSignin",
456 UserCrosSettingsProvider::cached_allow_guest());
457
446 const std::string app_locale = g_browser_process->GetApplicationLocale(); 458 const std::string app_locale = g_browser_process->GetApplicationLocale();
447 if (!app_locale.empty()) 459 if (!app_locale.empty())
448 params.SetString("hl", app_locale); 460 params.SetString("hl", app_locale);
449 461
450 params.SetBoolean("createAccount",
451 UserCrosSettingsProvider::cached_allow_new_user());
452 params.SetBoolean("guestSignin",
453 UserCrosSettingsProvider::cached_allow_guest());
454 params.SetString("gaiaOrigin", GaiaUrls::GetInstance()->gaia_origin_url()); 462 params.SetString("gaiaOrigin", GaiaUrls::GetInstance()->gaia_origin_url());
455 463
456 // Test automation data: 464 // Test automation data:
457 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 465 const CommandLine* command_line = CommandLine::ForCurrentProcess();
458 if (command_line->HasSwitch(switches::kAuthExtensionPath)) { 466 if (command_line->HasSwitch(switches::kAuthExtensionPath)) {
459 if (!test_user_.empty()) { 467 if (!test_user_.empty()) {
460 params.SetString("test_email", test_user_); 468 params.SetString("test_email", test_user_);
461 test_user_.clear(); 469 test_user_.clear();
462 } 470 }
463 if (!test_pass_.empty()) { 471 if (!test_pass_.empty()) {
464 params.SetString("test_password", test_pass_); 472 params.SetString("test_password", test_pass_);
465 test_pass_.clear(); 473 test_pass_.clear();
466 } 474 }
467 } 475 }
468 ShowScreen(kGaiaSigninScreen, &params); 476 web_ui_->CallJavascriptFunction("login.GaiaSigninScreen.setExtensionUrl",
477 params);
469 } 478 }
470 479
480
471 void SigninScreenHandler::ShowSigninScreenForCreds( 481 void SigninScreenHandler::ShowSigninScreenForCreds(
472 const std::string& username, 482 const std::string& username,
473 const std::string& password) { 483 const std::string& password) {
474 VLOG(2) << "ShowSigninScreenForCreds " << username << " " << password; 484 VLOG(2) << "ShowSigninScreenForCreds " << username << " " << password;
475 485
476 test_user_ = username; 486 test_user_ = username;
477 test_pass_ = password; 487 test_pass_ = password;
478 HandleShowAddUser(NULL); 488 HandleShowAddUser(NULL);
479 } 489 }
480 490
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 std::string email; 531 std::string email;
522 if (!args->GetString(0, &email)) { 532 if (!args->GetString(0, &email)) {
523 NOTREACHED(); 533 NOTREACHED();
524 return; 534 return;
525 } 535 }
526 536
527 delegate_->RemoveUser(email); 537 delegate_->RemoveUser(email);
528 } 538 }
529 539
530 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { 540 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) {
531 if (extension_driven_) { 541 email_.clear();
532 email_.clear(); 542 // |args| can be null if it's OOBE.
533 // |args| can be null if it's OOBE. 543 if (args)
534 if (args) 544 args->GetString(0, &email_);
535 args->GetString(0, &email_); 545 if (is_first_attempt_ && email_.empty()) {
546 dns_cleared_ = true;
547 cookies_cleared_ = true;
548 ShowSigninScreenIfReady();
549 } else {
536 StartClearingDnsCache(); 550 StartClearingDnsCache();
537 StartClearingCookies(); 551 StartClearingCookies();
538 } else {
539 ShowScreen(kSigninScreen, NULL);
540 } 552 }
541 } 553 }
542 554
543 void SigninScreenHandler::HandleToggleEnrollmentScreen( 555 void SigninScreenHandler::HandleToggleEnrollmentScreen(
544 const base::ListValue* args) { 556 const base::ListValue* args) {
545 delegate_->ShowEnterpriseEnrollmentScreen(); 557 delegate_->ShowEnterpriseEnrollmentScreen();
546 } 558 }
547 559
548 void SigninScreenHandler::HandleLaunchHelpApp(const base::ListValue* args) { 560 void SigninScreenHandler::HandleLaunchHelpApp(const base::ListValue* args) {
549 double help_topic_id; // Javascript number is passed back as double. 561 double help_topic_id; // Javascript number is passed back as double.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 guest_dict->SetString(kKeyImageUrl, image_url); 633 guest_dict->SetString(kKeyImageUrl, image_url);
622 users_list.Append(guest_dict); 634 users_list.Append(guest_dict);
623 } 635 }
624 636
625 // Call the Javascript callback 637 // Call the Javascript callback
626 base::FundamentalValue animated_value(animated); 638 base::FundamentalValue animated_value(animated);
627 web_ui_->CallJavascriptFunction("login.AccountPickerScreen.loadUsers", 639 web_ui_->CallJavascriptFunction("login.AccountPickerScreen.loadUsers",
628 users_list, animated_value); 640 users_list, animated_value);
629 } 641 }
630 642
643 void SigninScreenHandler::HandleAccountPickerReady(
644 const base::ListValue* args) {
645 // Fetching of the extension is not started before account picker page is
646 // loaded because it can affect the loading speed.
647 if (is_first_attempt_ && !cookie_remover_ && !dns_clear_task_running_)
648 SetExtensionUrl(true);
649 }
650
631 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) { 651 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) {
632 content::NotificationService::current()->Notify( 652 if (is_waiting_for_webui_ready_) {
633 chrome::NOTIFICATION_LOGIN_WEBUI_READY, 653 content::NotificationService::current()->Notify(
634 content::NotificationService::AllSources(), 654 chrome::NOTIFICATION_LOGIN_WEBUI_READY,
635 content::NotificationService::NoDetails()); 655 content::NotificationService::AllSources(),
656 content::NotificationService::NoDetails());
657 is_waiting_for_webui_ready_ = false;
658 }
636 } 659 }
637 660
638 void SigninScreenHandler::HandleLoginRequestNetworkState( 661 void SigninScreenHandler::HandleLoginRequestNetworkState(
639 const base::ListValue* args) { 662 const base::ListValue* args) {
640 std::string callback; 663 std::string callback;
641 std::string reason; 664 std::string reason;
642 if (!args->GetString(0, &callback) || !args->GetString(1, &reason)) { 665 if (!args->GetString(0, &callback) || !args->GetString(1, &reason)) {
643 NOTREACHED(); 666 NOTREACHED();
644 return; 667 return;
645 } 668 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 713
691 cookie_remover_ = new BrowsingDataRemover( 714 cookie_remover_ = new BrowsingDataRemover(
692 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()), 715 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
693 BrowsingDataRemover::EVERYTHING, 716 BrowsingDataRemover::EVERYTHING,
694 base::Time()); 717 base::Time());
695 cookie_remover_->AddObserver(this); 718 cookie_remover_->AddObserver(this);
696 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA); 719 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA);
697 } 720 }
698 721
699 } // namespace chromeos 722 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698