Commit b048769f authored by Quan Nguyen's avatar Quan Nguyen Committed by Commit Bot

Enable guest/offline signin links in views login network error screen.

This CL also disables the LoginScreenLocalePolicyTest.LoginLocaleEnforcedByPolicy
browser test. It seems to be related to a pre-existing bug: crbug/844572

Bug: 839593
Change-Id: I022bf1603ba54386c3686aebd3868d6dee0cd993
Reviewed-on: https://chromium-review.googlesource.com/1093881
Commit-Queue: Quan Nguyen <qnnguyen@chromium.org>
Reviewed-by: default avatarJacob Dufault <jdufault@chromium.org>
Cr-Commit-Position: refs/heads/master@{#566197}
parent 7e328358
...@@ -143,12 +143,12 @@ class LoginScreenLocalePolicyTest : public LoginScreenPolicyTest { ...@@ -143,12 +143,12 @@ class LoginScreenLocalePolicyTest : public LoginScreenPolicyTest {
}; };
IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest, IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest,
PRE_LoginLocaleEnforcedByPolicy) { DISABLED_PRE_LoginLocaleEnforcedByPolicy) {
chromeos::StartupUtils::MarkOobeCompleted(); chromeos::StartupUtils::MarkOobeCompleted();
} }
IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest, IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest,
LoginLocaleEnforcedByPolicy) { DISABLED_LoginLocaleEnforcedByPolicy) {
// Verifies that the default locale can be overridden with policy. // Verifies that the default locale can be overridden with policy.
EXPECT_EQ("fr", g_browser_process->GetApplicationLocale()); EXPECT_EQ("fr", g_browser_process->GetApplicationLocale());
base::string16 french_title = base::string16 french_title =
......
...@@ -81,7 +81,10 @@ void LoginDisplayHostMojo::ShowUnrecoverableCrypthomeErrorDialog() { ...@@ -81,7 +81,10 @@ void LoginDisplayHostMojo::ShowUnrecoverableCrypthomeErrorDialog() {
LoginDisplay* LoginDisplayHostMojo::CreateLoginDisplay( LoginDisplay* LoginDisplayHostMojo::CreateLoginDisplay(
LoginDisplay::Delegate* delegate) { LoginDisplay::Delegate* delegate) {
user_selection_screen_->SetLoginDisplayDelegate(delegate); user_selection_screen_->SetLoginDisplayDelegate(delegate);
return new LoginDisplayMojo(delegate, this); LoginDisplayMojo* login_display = new LoginDisplayMojo(delegate, this);
if (GetOobeUI())
GetOobeUI()->signin_screen_handler()->SetDelegate(login_display);
return login_display;
} }
gfx::NativeWindow LoginDisplayHostMojo::GetNativeWindow() const { gfx::NativeWindow LoginDisplayHostMojo::GetNativeWindow() const {
......
...@@ -53,6 +53,10 @@ class LoginDisplayHostMojo : public LoginDisplayHostCommon, ...@@ -53,6 +53,10 @@ class LoginDisplayHostMojo : public LoginDisplayHostCommon,
return user_selection_screen_.get(); return user_selection_screen_.get();
} }
ExistingUserController* existing_user_controller() {
return existing_user_controller_.get();
}
// LoginDisplayHost: // LoginDisplayHost:
LoginDisplay* CreateLoginDisplay(LoginDisplay::Delegate* delegate) override; LoginDisplay* CreateLoginDisplay(LoginDisplay::Delegate* delegate) override;
gfx::NativeWindow GetNativeWindow() const override; gfx::NativeWindow GetNativeWindow() const override;
......
...@@ -5,15 +5,22 @@ ...@@ -5,15 +5,22 @@
#include "chrome/browser/chromeos/login/ui/login_display_mojo.h" #include "chrome/browser/chromeos/login/ui/login_display_mojo.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/browser/chromeos/login/existing_user_controller.h"
#include "chrome/browser/chromeos/login/screens/chrome_user_selection_screen.h" #include "chrome/browser/chromeos/login/screens/chrome_user_selection_screen.h"
#include "chrome/browser/chromeos/login/screens/user_selection_screen.h" #include "chrome/browser/chromeos/login/screens/user_selection_screen.h"
#include "chrome/browser/chromeos/login/ui/login_display_host_mojo.h" #include "chrome/browser/chromeos/login/ui/login_display_host_mojo.h"
#include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/ui/ash/login_screen_client.h" #include "chrome/browser/ui/ash/login_screen_client.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h" #include "chromeos/dbus/session_manager_client.h"
#include "components/strings/grit/components_strings.h"
#include "components/user_manager/known_user.h" #include "components/user_manager/known_user.h"
#include "content/public/browser/notification_service.h" #include "content/public/browser/notification_service.h"
#include "ui/base/ime/chromeos/ime_keyboard.h"
#include "ui/base/ime/chromeos/input_method_manager.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos { namespace chromeos {
...@@ -25,6 +32,11 @@ LoginDisplayMojo::LoginDisplayMojo(Delegate* delegate, ...@@ -25,6 +32,11 @@ LoginDisplayMojo::LoginDisplayMojo(Delegate* delegate,
LoginDisplayMojo::~LoginDisplayMojo() { LoginDisplayMojo::~LoginDisplayMojo() {
user_manager::UserManager::Get()->RemoveObserver(this); user_manager::UserManager::Get()->RemoveObserver(this);
// Make sure SigninScreenHandler does not hold a reference to LoginDisplayMojo
// after it is deleted.
if (host_->GetOobeUI())
host_->GetOobeUI()->signin_screen_handler()->SetDelegate(nullptr);
} }
void LoginDisplayMojo::ClearAndEnablePassword() {} void LoginDisplayMojo::ClearAndEnablePassword() {}
...@@ -66,13 +78,62 @@ void LoginDisplayMojo::OnPreferencesChanged() { ...@@ -66,13 +78,62 @@ void LoginDisplayMojo::OnPreferencesChanged() {
} }
void LoginDisplayMojo::SetUIEnabled(bool is_enabled) { void LoginDisplayMojo::SetUIEnabled(bool is_enabled) {
NOTIMPLEMENTED(); if (is_enabled)
host_->GetOobeUI()->ShowOobeUI(false);
} }
void LoginDisplayMojo::ShowError(int error_msg_id, void LoginDisplayMojo::ShowError(int error_msg_id,
int login_attempts, int login_attempts,
HelpAppLauncher::HelpTopic help_topic_id) { HelpAppLauncher::HelpTopic help_topic_id) {
NOTIMPLEMENTED(); // TODO(jdufault): Investigate removing this method once views-based
// login is fully implemented. Tracking bug at http://crbug/851680.
VLOG(1) << "Show error, error_id: " << error_msg_id
<< ", attempts:" << login_attempts
<< ", help_topic_id: " << help_topic_id;
if (!webui_handler_)
return;
std::string error_text;
switch (error_msg_id) {
case IDS_LOGIN_ERROR_CAPTIVE_PORTAL:
error_text = l10n_util::GetStringFUTF8(
error_msg_id, delegate()->GetConnectedNetworkName());
break;
default:
error_text = l10n_util::GetStringUTF8(error_msg_id);
break;
}
// Only display hints about keyboard layout if the error is authentication-
// related.
if (error_msg_id != IDS_LOGIN_ERROR_WHITELIST &&
error_msg_id != IDS_ENTERPRISE_LOGIN_ERROR_WHITELIST &&
error_msg_id != IDS_LOGIN_ERROR_OWNER_KEY_LOST &&
error_msg_id != IDS_LOGIN_ERROR_OWNER_REQUIRED &&
error_msg_id != IDS_LOGIN_ERROR_GOOGLE_ACCOUNT_NOT_ALLOWED) {
// Display a warning if Caps Lock is on.
input_method::InputMethodManager* ime_manager =
input_method::InputMethodManager::Get();
if (ime_manager->GetImeKeyboard()->CapsLockIsEnabled()) {
// TODO(ivankr): use a format string instead of concatenation.
error_text +=
"\n" + l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_CAPS_LOCK_HINT);
}
// Display a hint to switch keyboards if there are other active input
// methods.
if (ime_manager->GetActiveIMEState()->GetNumActiveInputMethods() > 1) {
error_text +=
"\n" + l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_KEYBOARD_SWITCH_HINT);
}
}
std::string help_link;
if (login_attempts > 1)
help_link = l10n_util::GetStringUTF8(IDS_LEARN_MORE);
webui_handler_->ShowError(login_attempts, error_text, help_link,
help_topic_id);
} }
void LoginDisplayMojo::ShowErrorScreen(LoginDisplay::SigninError error_id) { void LoginDisplayMojo::ShowErrorScreen(LoginDisplay::SigninError error_id) {
...@@ -96,6 +157,100 @@ void LoginDisplayMojo::ShowUnrecoverableCrypthomeErrorDialog() { ...@@ -96,6 +157,100 @@ void LoginDisplayMojo::ShowUnrecoverableCrypthomeErrorDialog() {
host_->ShowUnrecoverableCrypthomeErrorDialog(); host_->ShowUnrecoverableCrypthomeErrorDialog();
} }
void LoginDisplayMojo::Login(const UserContext& user_context,
const SigninSpecifics& specifics) {
if (host_)
host_->existing_user_controller()->Login(user_context, specifics);
}
bool LoginDisplayMojo::IsSigninInProgress() const {
NOTIMPLEMENTED();
return false;
}
void LoginDisplayMojo::Signout() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::OnSigninScreenReady() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowEnterpriseEnrollmentScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowEnableDebuggingScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowKioskEnableScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowKioskAutolaunchScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowWrongHWIDScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::ShowUpdateRequiredScreen() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::CancelUserAdding() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::RemoveUser(const AccountId& account_id) {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::SetWebUIHandler(
LoginDisplayWebUIHandler* webui_handler) {
webui_handler_ = webui_handler;
}
bool LoginDisplayMojo::IsShowGuest() const {
NOTIMPLEMENTED();
return false;
}
bool LoginDisplayMojo::IsShowUsers() const {
NOTIMPLEMENTED();
return false;
}
bool LoginDisplayMojo::ShowUsersHasChanged() const {
NOTIMPLEMENTED();
return false;
}
bool LoginDisplayMojo::IsAllowNewUser() const {
NOTIMPLEMENTED();
return false;
}
bool LoginDisplayMojo::AllowNewUserChanged() const {
NOTIMPLEMENTED();
return false;
}
bool LoginDisplayMojo::IsUserSigninCompleted() const {
NOTIMPLEMENTED();
return false;
}
void LoginDisplayMojo::HandleGetUsers() {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::CheckUserStatus(const AccountId& account_id) {
NOTIMPLEMENTED();
}
void LoginDisplayMojo::OnUserImageChanged(const user_manager::User& user) { void LoginDisplayMojo::OnUserImageChanged(const user_manager::User& user) {
LoginScreenClient::Get()->login_screen()->SetAvatarForUser( LoginScreenClient::Get()->login_screen()->SetAvatarForUser(
user.GetAccountId(), user.GetAccountId(),
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/ui/login_display.h" #include "chrome/browser/chromeos/login/ui/login_display.h"
#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
#include "components/user_manager/user_manager.h" #include "components/user_manager/user_manager.h"
namespace chromeos { namespace chromeos {
...@@ -18,6 +19,7 @@ class LoginDisplayHostMojo; ...@@ -18,6 +19,7 @@ class LoginDisplayHostMojo;
// Interface used by UI-agnostic code to send messages to views-based login // Interface used by UI-agnostic code to send messages to views-based login
// screen. // screen.
class LoginDisplayMojo : public LoginDisplay, class LoginDisplayMojo : public LoginDisplay,
public SigninScreenHandlerDelegate,
public user_manager::UserManager::Observer { public user_manager::UserManager::Observer {
public: public:
LoginDisplayMojo(Delegate* delegate, LoginDisplayHostMojo* host); LoginDisplayMojo(Delegate* delegate, LoginDisplayHostMojo* host);
...@@ -41,11 +43,36 @@ class LoginDisplayMojo : public LoginDisplay, ...@@ -41,11 +43,36 @@ class LoginDisplayMojo : public LoginDisplay,
void ShowWhitelistCheckFailedError() override; void ShowWhitelistCheckFailedError() override;
void ShowUnrecoverableCrypthomeErrorDialog() override; void ShowUnrecoverableCrypthomeErrorDialog() override;
// SigninScreenHandlerDelegate:
void Login(const UserContext& user_context,
const SigninSpecifics& specifics) override;
bool IsSigninInProgress() const override;
void Signout() override;
void OnSigninScreenReady() override;
void ShowEnterpriseEnrollmentScreen() override;
void ShowEnableDebuggingScreen() override;
void ShowKioskEnableScreen() override;
void ShowKioskAutolaunchScreen() override;
void ShowWrongHWIDScreen() override;
void ShowUpdateRequiredScreen() override;
void CancelUserAdding() override;
void RemoveUser(const AccountId& account_id) override;
void SetWebUIHandler(LoginDisplayWebUIHandler* webui_handler) override;
bool IsShowGuest() const override;
bool IsShowUsers() const override;
bool ShowUsersHasChanged() const override;
bool IsAllowNewUser() const override;
bool AllowNewUserChanged() const override;
bool IsUserSigninCompleted() const override;
void HandleGetUsers() override;
void CheckUserStatus(const AccountId& account_id) override;
// user_manager::UserManager::Observer: // user_manager::UserManager::Observer:
void OnUserImageChanged(const user_manager::User& user) override; void OnUserImageChanged(const user_manager::User& user) override;
private: private:
LoginDisplayHostMojo* const host_ = nullptr; LoginDisplayHostMojo* const host_ = nullptr;
LoginDisplayWebUIHandler* webui_handler_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(LoginDisplayMojo); DISALLOW_COPY_AND_ASSIGN(LoginDisplayMojo);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment