| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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, ¶ms); | 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |