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

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

Powered by Google App Engine
This is Rietveld 408576698