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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index 0561932edb209693ee36f68915f9cf0120b70ac6..5a2abda983c0e55a6556039f10231563d7238387 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -43,8 +43,6 @@ const char kDefaultDomain[] = "@gmail.com";
// Account picker screen id.
const char kAccountPickerScreen[] = "account-picker";
-// Sign in screen id.
-const char kSigninScreen[] = "signin";
// Sign in screen id for GAIA extension hosted content.
const char kGaiaSigninScreen[] = "gaia-signin";
// Start page of GAIA authentication extension.
@@ -220,12 +218,11 @@ SigninScreenHandler::SigninScreenHandler()
: delegate_(NULL),
show_on_init_(false),
oobe_ui_(false),
+ is_first_webui_ready_(false),
+ is_first_attempt_(true),
dns_cleared_(false),
dns_clear_task_running_(false),
cookies_cleared_(false),
- extension_driven_(
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kWebUILogin)),
cookie_remover_(NULL),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
key_event_listener_(NULL) {
@@ -283,10 +280,7 @@ void SigninScreenHandler::GetLocalizedStrings(
localized_strings->SetString("removeUser",
l10n_util::GetStringUTF16(IDS_LOGIN_REMOVE));
- if (extension_driven_)
- localized_strings->SetString("authType", "ext");
- else
- localized_strings->SetString("authType", "webui");
+ localized_strings->SetString("authType", "ext");
}
void SigninScreenHandler::Show(bool oobe_ui) {
@@ -367,6 +361,9 @@ void SigninScreenHandler::RegisterMessages() {
web_ui_->RegisterMessageCallback("createAccount",
base::Bind(&SigninScreenHandler::HandleCreateAccount,
base::Unretained(this)));
+ web_ui_->RegisterMessageCallback("accountPickerReady",
+ base::Bind(&SigninScreenHandler::HandleAccountPickerReady,
+ base::Unretained(this)));
web_ui_->RegisterMessageCallback("loginWebuiReady",
base::Bind(&SigninScreenHandler::HandleLoginWebuiReady,
base::Unretained(this)));
@@ -435,24 +432,37 @@ void SigninScreenHandler::OnDnsCleared() {
ShowSigninScreenIfReady();
}
-// Show sign in screen as soon as we clear dns cache the cookie jar.
void SigninScreenHandler::ShowSigninScreenIfReady() {
if (!dns_cleared_ || !cookies_cleared_)
return;
+ LoadAuthExtension(!is_first_attempt_);
+ ShowScreen(kGaiaSigninScreen, NULL);
+
+ if (is_first_attempt_) {
+ is_first_attempt_ = false;
+ if (is_first_webui_ready_)
+ HandleLoginWebuiReady(NULL);
+ }
+}
+
+void SigninScreenHandler::LoadAuthExtension(bool force) {
DictionaryValue params;
+
+ params.SetBoolean("forceReload", force);
params.SetString("startUrl", kGaiaExtStartPage);
params.SetString("email", email_);
email_.clear();
- const std::string app_locale = g_browser_process->GetApplicationLocale();
- if (!app_locale.empty())
- params.SetString("hl", app_locale);
-
params.SetBoolean("createAccount",
UserCrosSettingsProvider::cached_allow_new_user());
params.SetBoolean("guestSignin",
UserCrosSettingsProvider::cached_allow_guest());
+
+ const std::string app_locale = g_browser_process->GetApplicationLocale();
+ if (!app_locale.empty())
+ params.SetString("hl", app_locale);
+
params.SetString("gaiaOrigin", GaiaUrls::GetInstance()->gaia_origin_url());
// Test automation data:
@@ -467,9 +477,11 @@ void SigninScreenHandler::ShowSigninScreenIfReady() {
test_pass_.clear();
}
}
- ShowScreen(kGaiaSigninScreen, &params);
+ web_ui_->CallJavascriptFunction("login.GaiaSigninScreen.setExtensionUrl",
+ params);
}
+
void SigninScreenHandler::ShowSigninScreenForCreds(
const std::string& username,
const std::string& password) {
@@ -530,15 +542,17 @@ void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) {
}
void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) {
- if (extension_driven_) {
- email_.clear();
- // |args| can be null if it's OOBE.
- if (args)
- args->GetString(0, &email_);
+ email_.clear();
+ // |args| can be null if it's OOBE.
+ if (args)
+ args->GetString(0, &email_);
+ if (is_first_attempt_ && email_.empty()) {
+ dns_cleared_ = true;
+ cookies_cleared_ = true;
+ ShowSigninScreenIfReady();
+ } else {
StartClearingDnsCache();
StartClearingCookies();
- } else {
- ShowScreen(kSigninScreen, NULL);
}
}
@@ -630,11 +644,23 @@ void SigninScreenHandler::SendUserList(bool animated) {
users_list, animated_value);
}
+void SigninScreenHandler::HandleAccountPickerReady(
+ const base::ListValue* args) {
+ // Fetching of the extension is not started before account picker page is
+ // loaded because it can affect the loading speed.
+ if (is_first_attempt_ && !cookie_remover_ && !dns_clear_task_running_)
+ LoadAuthExtension(true);
+}
+
void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) {
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_LOGIN_WEBUI_READY,
- content::NotificationService::AllSources(),
- content::NotificationService::NoDetails());
+ if (!is_first_attempt_) {
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_LOGIN_WEBUI_READY,
+ content::NotificationService::AllSources(),
+ content::NotificationService::NoDetails());
+ } else {
+ is_first_webui_ready_ = true;
+ }
}
void SigninScreenHandler::HandleLoginRequestNetworkState(
« 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