| Index: trunk/src/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| ===================================================================
|
| --- trunk/src/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc (revision 275548)
|
| +++ trunk/src/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc (working copy)
|
| @@ -5,31 +5,20 @@
|
| #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h"
|
|
|
| #include "base/logging.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/browser_shutdown.h"
|
| -#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
|
| #include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
|
| #include "chrome/browser/chromeos/login/users/user_manager.h"
|
| -#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| -#include "chrome/browser/io_thread.h"
|
| #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
|
| #include "chromeos/chromeos_switches.h"
|
| #include "chromeos/settings/cros_settings_names.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/render_frame_host.h"
|
| -#include "google_apis/gaia/gaia_auth_util.h"
|
| #include "google_apis/gaia/gaia_switches.h"
|
| #include "google_apis/gaia/gaia_urls.h"
|
| #include "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| -using content::BrowserThread;
|
| -
|
| namespace chromeos {
|
|
|
| namespace {
|
| @@ -80,20 +69,6 @@
|
| }
|
| }
|
|
|
| -void RecordSAMLScrapingVerificationResultInHistogram(bool success) {
|
| - UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.Scraping.VerificationResult", success);
|
| -}
|
| -
|
| -// The Task posted to PostTaskAndReply in StartClearingDnsCache on the IO
|
| -// thread.
|
| -void ClearDnsCache(IOThread* io_thread) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| - if (browser_shutdown::IsTryingToQuit())
|
| - return;
|
| -
|
| - io_thread->ClearHostCache();
|
| -}
|
| -
|
| } // namespace
|
|
|
| GaiaContext::GaiaContext()
|
| @@ -110,22 +85,15 @@
|
| frame_state_(FRAME_STATE_UNKNOWN),
|
| frame_error_(net::OK),
|
| network_state_informer_(network_state_informer),
|
| - dns_cleared_(false),
|
| - dns_clear_task_running_(false),
|
| - cookies_cleared_(false),
|
| - focus_stolen_(false),
|
| - gaia_silent_load_(false),
|
| - using_saml_api_(false),
|
| - test_expects_complete_login_(false),
|
| - signin_screen_handler_(NULL),
|
| - weak_factory_(this) {
|
| + signin_screen_handler_(NULL) {
|
| DCHECK(network_state_informer_.get());
|
| }
|
|
|
| -GaiaScreenHandler::~GaiaScreenHandler() {
|
| -}
|
| +GaiaScreenHandler::~GaiaScreenHandler() {}
|
|
|
| void GaiaScreenHandler::LoadGaia(const GaiaContext& context) {
|
| + LOG(WARNING) << "LoadGaia() call.";
|
| +
|
| base::DictionaryValue params;
|
|
|
| params.SetBoolean("forceReload", context.force_reload);
|
| @@ -209,8 +177,8 @@
|
| builder->Add("createManagedUserFeatureName",
|
| IDS_CREATE_LOCALLY_MANAGED_USER_FEATURE_NAME);
|
|
|
| - // Strings used by the SAML fatal error dialog.
|
| - builder->Add("fatalErrorMessageNoEmail", IDS_LOGIN_FATAL_ERROR_NO_EMAIL);
|
| + // Strings used by the fatal error dialog.
|
| + builder->Add("fatalErrorMessageNoEmail", IDS_LOGIN_FATAL_ERROR_NO_EMAIL);
|
| builder->Add("fatalErrorMessageNoPassword",
|
| IDS_LOGIN_FATAL_ERROR_NO_PASSWORD);
|
| builder->Add("fatalErrorMessageVerificationFailed",
|
| @@ -221,21 +189,11 @@
|
| builder->Add("fatalErrorDismissButton", IDS_OK);
|
| }
|
|
|
| -void GaiaScreenHandler::Initialize() {
|
| -}
|
| +void GaiaScreenHandler::Initialize() {}
|
|
|
| void GaiaScreenHandler::RegisterMessages() {
|
| AddCallback("frameLoadingCompleted",
|
| &GaiaScreenHandler::HandleFrameLoadingCompleted);
|
| - AddCallback("completeLogin", &GaiaScreenHandler::HandleCompleteLogin);
|
| - AddCallback("completeAuthentication",
|
| - &GaiaScreenHandler::HandleCompleteAuthentication);
|
| - AddCallback("usingSAMLAPI", &GaiaScreenHandler::HandleUsingSAMLAPI);
|
| - AddCallback("scrapedPasswordCount",
|
| - &GaiaScreenHandler::HandleScrapedPasswordCount);
|
| - AddCallback("scrapedPasswordVerificationFailed",
|
| - &GaiaScreenHandler::HandleScrapedPasswordVerificationFailed);
|
| - AddCallback("loginWebuiReady", &GaiaScreenHandler::HandleGaiaUIReady);
|
| }
|
|
|
| void GaiaScreenHandler::HandleFrameLoadingCompleted(int status) {
|
| @@ -261,289 +219,13 @@
|
| UpdateState(ErrorScreenActor::ERROR_REASON_FRAME_ERROR);
|
| }
|
|
|
| -void GaiaScreenHandler::HandleCompleteAuthentication(
|
| - const std::string& email,
|
| - const std::string& password,
|
| - const std::string& auth_code) {
|
| - if (!Delegate())
|
| - return;
|
| - Delegate()->SetDisplayEmail(gaia::SanitizeEmail(email));
|
| - UserContext user_context(email);
|
| - user_context.SetKey(Key(password));
|
| - user_context.SetAuthCode(auth_code);
|
| - Delegate()->CompleteLogin(user_context);
|
| -}
|
| -
|
| -void GaiaScreenHandler::HandleCompleteLogin(const std::string& typed_email,
|
| - const std::string& password,
|
| - bool using_saml) {
|
| - if (!Delegate())
|
| - return;
|
| -
|
| - if (using_saml && !using_saml_api_)
|
| - RecordSAMLScrapingVerificationResultInHistogram(true);
|
| -
|
| - const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
|
| - Delegate()->SetDisplayEmail(sanitized_email);
|
| - UserContext user_context(sanitized_email);
|
| - user_context.SetKey(Key(password));
|
| - user_context.SetAuthFlow(using_saml
|
| - ? UserContext::AUTH_FLOW_GAIA_WITH_SAML
|
| - : UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML);
|
| - Delegate()->CompleteLogin(user_context);
|
| -
|
| - if (test_expects_complete_login_) {
|
| - VLOG(2) << "Complete test login for " << typed_email
|
| - << ", requested=" << test_user_;
|
| -
|
| - test_expects_complete_login_ = false;
|
| - test_user_.clear();
|
| - test_pass_.clear();
|
| - }
|
| -}
|
| -
|
| -void GaiaScreenHandler::HandleUsingSAMLAPI() {
|
| - SetSAMLPrincipalsAPIUsed(true);
|
| -}
|
| -
|
| -void GaiaScreenHandler::HandleScrapedPasswordCount(int password_count) {
|
| - SetSAMLPrincipalsAPIUsed(false);
|
| - // Use a histogram that has 11 buckets, one for each of the values in [0, 9]
|
| - // and an overflow bucket at the end.
|
| - UMA_HISTOGRAM_ENUMERATION(
|
| - "ChromeOS.SAML.Scraping.PasswordCount", std::min(password_count, 10), 11);
|
| - if (password_count == 0)
|
| - HandleScrapedPasswordVerificationFailed();
|
| -}
|
| -
|
| -void GaiaScreenHandler::HandleScrapedPasswordVerificationFailed() {
|
| - RecordSAMLScrapingVerificationResultInHistogram(false);
|
| -}
|
| -
|
| -void GaiaScreenHandler::HandleGaiaUIReady() {
|
| - if (focus_stolen_) {
|
| - // Set focus to the Gaia page.
|
| - // TODO(altimofeev): temporary solution, until focus parameters are
|
| - // implemented on the Gaia side.
|
| - // Do this only once. Any subsequent call would relod GAIA frame.
|
| - focus_stolen_ = false;
|
| - const char code[] =
|
| - "if (typeof gWindowOnLoad != 'undefined') gWindowOnLoad();";
|
| - content::RenderFrameHost* frame =
|
| - LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
|
| - frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
|
| - }
|
| - if (gaia_silent_load_) {
|
| - focus_stolen_ = true;
|
| - // Prevent focus stealing by the Gaia page.
|
| - // TODO(altimofeev): temporary solution, until focus parameters are
|
| - // implemented on the Gaia side.
|
| - const char code[] =
|
| - "var gWindowOnLoad = window.onload; "
|
| - "window.onload=function() {};";
|
| - content::RenderFrameHost* frame =
|
| - LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
|
| - frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
|
| -
|
| - // As we could miss and window.onload could already be called, restore
|
| - // focus to current pod (see crbug/175243).
|
| - DCHECK(signin_screen_handler_);
|
| - signin_screen_handler_->RefocusCurrentPod();
|
| - }
|
| - HandleFrameLoadingCompleted(0);
|
| -
|
| - if (test_expects_complete_login_)
|
| - SubmitLoginFormForTest();
|
| -}
|
| -
|
| -void GaiaScreenHandler::PopulateEmail(const std::string& user_id) {
|
| - populated_email_ = user_id;
|
| -}
|
| -
|
| -void GaiaScreenHandler::PasswordChangedFor(const std::string& user_id) {
|
| - password_changed_for_.insert(user_id);
|
| -}
|
| -
|
| -void GaiaScreenHandler::StartClearingDnsCache() {
|
| - if (dns_clear_task_running_ || !g_browser_process->io_thread())
|
| - return;
|
| -
|
| - dns_cleared_ = false;
|
| - BrowserThread::PostTaskAndReply(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - base::Bind(&ClearDnsCache, g_browser_process->io_thread()),
|
| - base::Bind(&GaiaScreenHandler::OnDnsCleared, weak_factory_.GetWeakPtr()));
|
| - dns_clear_task_running_ = true;
|
| -}
|
| -
|
| -void GaiaScreenHandler::OnDnsCleared() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| - dns_clear_task_running_ = false;
|
| - dns_cleared_ = true;
|
| - ShowGaiaScreenIfReady();
|
| -}
|
| -
|
| -void GaiaScreenHandler::StartClearingCookies(
|
| - const base::Closure& on_clear_callback) {
|
| - cookies_cleared_ = false;
|
| - ProfileHelper* profile_helper =
|
| - g_browser_process->platform_part()->profile_helper();
|
| - LOG_ASSERT(Profile::FromWebUI(web_ui()) ==
|
| - profile_helper->GetSigninProfile());
|
| - profile_helper->ClearSigninProfile(
|
| - base::Bind(&GaiaScreenHandler::OnCookiesCleared,
|
| - weak_factory_.GetWeakPtr(),
|
| - on_clear_callback));
|
| -}
|
| -
|
| -void GaiaScreenHandler::OnCookiesCleared(
|
| - const base::Closure& on_clear_callback) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| - cookies_cleared_ = true;
|
| - on_clear_callback.Run();
|
| -}
|
| -
|
| -void GaiaScreenHandler::ShowSigninScreenForCreds(const std::string& username,
|
| - const std::string& password) {
|
| - VLOG(2) << "ShowSigninScreenForCreds for user " << username
|
| - << ", frame_state=" << FrameState();
|
| -
|
| - test_user_ = username;
|
| - test_pass_ = password;
|
| - test_expects_complete_login_ = true;
|
| -
|
| - // Submit login form for test if gaia is ready. If gaia is loading, login
|
| - // will be attempted in HandleLoginWebuiReady after gaia is ready. Otherwise,
|
| - // reload gaia then follow the loading case.
|
| - if (FrameState() == GaiaScreenHandler::FRAME_STATE_LOADED)
|
| - SubmitLoginFormForTest();
|
| - else if (FrameState() != GaiaScreenHandler::FRAME_STATE_LOADING) {
|
| - DCHECK(signin_screen_handler_);
|
| - signin_screen_handler_->OnShowAddUser();
|
| - }
|
| -}
|
| -
|
| -void GaiaScreenHandler::SubmitLoginFormForTest() {
|
| - VLOG(2) << "Submit login form for test, user=" << test_user_;
|
| -
|
| - std::string code;
|
| - code += "document.getElementById('Email').value = '" + test_user_ + "';";
|
| - code += "document.getElementById('Passwd').value = '" + test_pass_ + "';";
|
| - code += "document.getElementById('signIn').click();";
|
| -
|
| - content::RenderFrameHost* frame =
|
| - LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
|
| - frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
|
| -
|
| - // Test properties are cleared in HandleCompleteLogin because the form
|
| - // submission might fail and login will not be attempted after reloading
|
| - // if they are cleared here.
|
| -}
|
| -
|
| -void GaiaScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) {
|
| - using_saml_api_ = api_used;
|
| - UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used);
|
| -}
|
| -
|
| -void GaiaScreenHandler::ShowGaia() {
|
| - if (gaia_silent_load_ && populated_email_.empty()) {
|
| - dns_cleared_ = true;
|
| - cookies_cleared_ = true;
|
| - ShowGaiaScreenIfReady();
|
| - } else {
|
| - StartClearingDnsCache();
|
| - StartClearingCookies(base::Bind(&GaiaScreenHandler::ShowGaiaScreenIfReady,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -}
|
| -
|
| -void GaiaScreenHandler::ShowGaiaScreenIfReady() {
|
| - if (!dns_cleared_ || !cookies_cleared_ || !Delegate())
|
| - return;
|
| -
|
| - std::string active_network_path = network_state_informer_->network_path();
|
| - if (gaia_silent_load_ &&
|
| - (network_state_informer_->state() != NetworkStateInformer::ONLINE ||
|
| - gaia_silent_load_network_ != active_network_path)) {
|
| - // Network has changed. Force Gaia reload.
|
| - gaia_silent_load_ = false;
|
| - // Gaia page will be realoded, so focus isn't stolen anymore.
|
| - focus_stolen_ = false;
|
| - }
|
| -
|
| - // Note that LoadAuthExtension clears |populated_email_|.
|
| - if (populated_email_.empty())
|
| - Delegate()->LoadSigninWallpaper();
|
| - else
|
| - Delegate()->LoadWallpaper(populated_email_);
|
| -
|
| - // Set Least Recently Used input method for the user.
|
| - if (!populated_email_.empty())
|
| - signin_screen_handler_->SetUserInputMethod(populated_email_);
|
| -
|
| - LoadAuthExtension(!gaia_silent_load_, false, false);
|
| - signin_screen_handler_->UpdateUIState(
|
| - SigninScreenHandler::UI_STATE_GAIA_SIGNIN, NULL);
|
| -
|
| - if (gaia_silent_load_) {
|
| - // The variable is assigned to false because silently loaded Gaia page was
|
| - // used.
|
| - gaia_silent_load_ = false;
|
| - if (focus_stolen_)
|
| - HandleGaiaUIReady();
|
| - }
|
| -
|
| - signin_screen_handler_->UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE);
|
| -}
|
| -
|
| -void GaiaScreenHandler::MaybePreloadAuthExtension() {
|
| - LOG(WARNING) << "MaybePreloadAuthExtension() call.";
|
| -
|
| - // If cookies clearing was initiated or |dns_clear_task_running_| then auth
|
| - // extension showing has already been initiated and preloading is senseless.
|
| - if (signin_screen_handler_->ShouldLoadGaia() &&
|
| - !gaia_silent_load_ &&
|
| - !cookies_cleared_ &&
|
| - !dns_clear_task_running_ &&
|
| - network_state_informer_->state() == NetworkStateInformer::ONLINE) {
|
| - gaia_silent_load_ = true;
|
| - gaia_silent_load_network_ = network_state_informer_->network_path();
|
| - LoadAuthExtension(true, true, false);
|
| - }
|
| -}
|
| -
|
| -void GaiaScreenHandler::LoadAuthExtension(bool force,
|
| - bool silent_load,
|
| - bool offline) {
|
| - GaiaContext context;
|
| - context.force_reload = force;
|
| - context.is_local = offline;
|
| - context.password_changed = !populated_email_.empty() &&
|
| - password_changed_for_.count(populated_email_);
|
| - context.use_offline = offline;
|
| - context.email = populated_email_;
|
| - if (Delegate()) {
|
| - context.show_users = Delegate()->IsShowUsers();
|
| - context.has_users = !Delegate()->GetUsers().empty();
|
| - }
|
| -
|
| - populated_email_.clear();
|
| -
|
| - LoadGaia(context);
|
| -}
|
| -
|
| void GaiaScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) {
|
| if (signin_screen_handler_)
|
| signin_screen_handler_->UpdateState(reason);
|
| }
|
|
|
| -SigninScreenHandlerDelegate* GaiaScreenHandler::Delegate() {
|
| - DCHECK(signin_screen_handler_);
|
| - return signin_screen_handler_->delegate_;
|
| -}
|
| -
|
| void GaiaScreenHandler::SetSigninScreenHandler(SigninScreenHandler* handler) {
|
| signin_screen_handler_ = handler;
|
| }
|
| +
|
| } // namespace chromeos
|
|
|