Commit 853052eb authored by Thomas Tellier's avatar Thomas Tellier Committed by Commit Bot

Reland "Add a pop-up for Chrome OS secondary login screen"

This reverts commit 253d9157.

Reason for revert: Need to implement the feature

Original change's description:
> Revert "Add a pop-up for Chrome OS secondary login screen"
> 
> This reverts commit 3e085ec3.
> 
> Reason for revert: Test is crashing with a segmentation fault
> 
> Original change's description:
> > Add a pop-up for Chrome OS secondary login screen
> > 
> > Bug: 1066489
> > Change-Id: I5af5d0ab745176572dfa01cb02e6d45ac1b27c99
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2303429
> > Commit-Queue: Thomas Tellier <tellier@google.com>
> > Reviewed-by: Denis Kuznetsov [CET] <antrim@chromium.org>
> > Reviewed-by: Thomas Tellier <tellier@google.com>
> > Cr-Commit-Position: refs/heads/master@{#805844}
> 
> TBR=antrim@chromium.org,raleksandrov@google.com,tellier@google.com
> 
> Change-Id: I35550da66bba011cb35b9e50d38b4b02b572ce29
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: 1066489
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404061
> Reviewed-by: K. Moon <kmoon@chromium.org>
> Commit-Queue: K. Moon <kmoon@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#805939}

TBR=antrim@chromium.org,raleksandrov@google.com,kmoon@chromium.org,tellier@google.com

# Not skipping CQ checks because this is a reland.

Bug: 1066489
Change-Id: Id1eebd7da875a5c12f5f4821875b4590f7e76331
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404350Reviewed-by: default avatarK. Moon <kmoon@chromium.org>
Reviewed-by: default avatarThomas Tellier <tellier@google.com>
Commit-Queue: Thomas Tellier <tellier@google.com>
Cr-Commit-Position: refs/heads/master@{#806288}
parent b6bb0f23
...@@ -596,8 +596,8 @@ component("ash") { ...@@ -596,8 +596,8 @@ component("ash") {
"login/ui/login_pin_view.h", "login/ui/login_pin_view.h",
"login/ui/login_public_account_user_view.cc", "login/ui/login_public_account_user_view.cc",
"login/ui/login_public_account_user_view.h", "login/ui/login_public_account_user_view.h",
"login/ui/login_tooltip_view.cc", "login/ui/login_unpositioned_tooltip_view.cc",
"login/ui/login_tooltip_view.h", "login/ui/login_unpositioned_tooltip_view.h",
"login/ui/login_user_menu_view.cc", "login/ui/login_user_menu_view.cc",
"login/ui/login_user_menu_view.h", "login/ui/login_user_menu_view.h",
"login/ui/login_user_view.cc", "login/ui/login_user_view.cc",
......
...@@ -211,6 +211,15 @@ bool LoginScreenTestApi::IsEnterpriseEnrollmentButtonShown() { ...@@ -211,6 +211,15 @@ bool LoginScreenTestApi::IsEnterpriseEnrollmentButtonShown() {
return IsLoginShelfViewButtonShown(LoginShelfView::kEnterpriseEnrollment); return IsLoginShelfViewButtonShown(LoginShelfView::kEnterpriseEnrollment);
} }
// static
bool LoginScreenTestApi::IsUserAddingScreenBubbleShown() {
LockScreen::TestApi lock_screen_test(LockScreen::Get());
LockContentsView::TestApi lock_contents_test(
lock_screen_test.contents_view());
views::View* bubble = lock_contents_test.user_adding_screen_bubble();
return bubble && bubble->GetVisible();
}
// static // static
bool LoginScreenTestApi::IsWarningBubbleShown() { bool LoginScreenTestApi::IsWarningBubbleShown() {
LockScreen::TestApi lock_screen_test(LockScreen::Get()); LockScreen::TestApi lock_screen_test(LockScreen::Get());
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "ash/public/cpp/child_accounts/parent_access_controller.h" #include "ash/public/cpp/child_accounts/parent_access_controller.h"
#include "ash/public/cpp/login_accelerators.h" #include "ash/public/cpp/login_accelerators.h"
#include "ash/resources/vector_icons/vector_icons.h" #include "ash/resources/vector_icons/vector_icons.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shelf/shelf.h" #include "ash/shelf/shelf.h"
#include "ash/shelf/shelf_widget.h" #include "ash/shelf/shelf_widget.h"
#include "ash/shell.h" #include "ash/shell.h"
...@@ -126,20 +127,28 @@ constexpr int kBottomStatusIndicatorChildSpacingDp = 8; ...@@ -126,20 +127,28 @@ constexpr int kBottomStatusIndicatorChildSpacingDp = 8;
// Spacing between child of LoginBaseBubbleView. // Spacing between child of LoginBaseBubbleView.
constexpr int kBubbleBetweenChildSpacingDp = 16; constexpr int kBubbleBetweenChildSpacingDp = 16;
// Width of the management pop-up. // Width of login screen pop-ups.
constexpr int kManagementPopUpWidth = 400; constexpr int kLoginScreenPopUpWidth = 400;
// Padding around the management bubble view. // Padding around the login screen bubble view.
constexpr int kBubblePaddingDp = 16; constexpr int kBubblePaddingDp = 16;
// Size of the tooltip view info icon. // Size of the tooltip view info icon.
constexpr int kInfoIconSizeDp = 20; constexpr int kInfoIconSizeDp = 20;
// Maximum width of the management pop-up label. // Horizontal and vertical padding of login tooltip view.
constexpr int kManagementLabelMaxWidth = constexpr int kHorizontalPaddingLoginTooltipViewDp = 8;
kManagementPopUpWidth - 2 * kBubblePaddingDp - kInfoIconSizeDp - constexpr int kVerticalPaddingLoginTooltipViewDp = 8;
// Maximum width of the login screen pop-ups' labels.
constexpr int kLoginPopUpLabelMaxWidth =
kLoginScreenPopUpWidth - 2 * kBubblePaddingDp - kInfoIconSizeDp -
kBubbleBetweenChildSpacingDp; kBubbleBetweenChildSpacingDp;
// Y of the user adding pop-up in the screen coordinates when the auth user view
// is not set.
constexpr int kUserAddingPopUpDefaultYPosition = 100;
constexpr char kAuthErrorContainerName[] = "AuthErrorContainer"; constexpr char kAuthErrorContainerName[] = "AuthErrorContainer";
// Sets the preferred width for |view| with an arbitrary height. // Sets the preferred width for |view| with an arbitrary height.
...@@ -314,29 +323,49 @@ class LockContentsView::AuthErrorBubble : public LoginErrorBubble, ...@@ -314,29 +323,49 @@ class LockContentsView::AuthErrorBubble : public LoginErrorBubble,
} }
}; };
class LockContentsView::ManagementPopUp : public LoginTooltipView { class LockContentsView::LoginTooltipView : public LoginUnpositionedTooltipView {
public: public:
ManagementPopUp(const base::string16& message, views::View* anchor_view) LoginTooltipView(const base::string16& message, views::View* anchor_view)
: LoginTooltipView(message, anchor_view) { : LoginUnpositionedTooltipView(message, anchor_view) {}
// LoginBaseBubbleView:
gfx::Point CalculatePosition() override {
return CalculatePositionUsingDefaultStrategy(
PositioningStrategy::kShowOnLeftSideOrRightSide,
kHorizontalPaddingLoginTooltipViewDp,
kVerticalPaddingLoginTooltipViewDp);
}
};
class LoginScreenPopUp : public LoginUnpositionedTooltipView {
public:
LoginScreenPopUp(const base::string16& message, views::View* anchor_view)
: LoginUnpositionedTooltipView(message, anchor_view) {
views::BoxLayout* layout_manager = views::BoxLayout* layout_manager =
SetLayoutManager(std::make_unique<views::BoxLayout>( SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, views::BoxLayout::Orientation::kHorizontal,
gfx::Insets(kBubblePaddingDp), kBubbleBetweenChildSpacingDp)); gfx::Insets(kBubblePaddingDp), kBubbleBetweenChildSpacingDp));
layout_manager->set_cross_axis_alignment( layout_manager->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kStart); views::BoxLayout::CrossAxisAlignment::kStart);
label()->SetMaximumWidth(kManagementLabelMaxWidth); label()->SetMaximumWidth(kLoginPopUpLabelMaxWidth);
SetVisible(false); SetVisible(false);
} }
// LoginBaseBubbleView: // LoginBaseBubbleView:
gfx::Size CalculatePreferredSize() const override { gfx::Size CalculatePreferredSize() const override {
gfx::Size size; gfx::Size size;
size.set_width(kManagementPopUpWidth); size.set_width(kLoginScreenPopUpWidth);
size.set_height(GetHeightForWidth(kManagementPopUpWidth)); size.set_height(GetHeightForWidth(kLoginScreenPopUpWidth));
return size; return size;
} }
};
class LockContentsView::ManagementPopUp : public LoginScreenPopUp {
public:
ManagementPopUp(const base::string16& message, views::View* anchor_view)
: LoginScreenPopUp(message, anchor_view) {}
// LoginTooltipView: // LoginBaseBubbleView:
gfx::Point CalculatePosition() override { gfx::Point CalculatePosition() override {
DCHECK(GetAnchorView()); DCHECK(GetAnchorView());
gfx::Point top_center = GetAnchorView()->bounds().top_center(); gfx::Point top_center = GetAnchorView()->bounds().top_center();
...@@ -349,6 +378,56 @@ class LockContentsView::ManagementPopUp : public LoginTooltipView { ...@@ -349,6 +378,56 @@ class LockContentsView::ManagementPopUp : public LoginTooltipView {
} }
}; };
class LockContentsView::UserAddingPopUp : public LoginScreenPopUp {
public:
UserAddingPopUp(const base::string16& message,
LockContentsView* lock_contents_view)
: LoginScreenPopUp(message, lock_contents_view),
lock_contents_view_(lock_contents_view) {}
// LoginBaseBubbleView:
bool IsPersistent() const override { return true; }
// The pop-up is placed mid-way between the top of the screen and the auth
// user view. When the pop-up is shown, the screen should look like this:
// _____________________________________
// | |
// | _______________ |
// | | POP-UP | |
// | _______________ |
// | |
// | _______________ |
// | | | |
// | | | |
// | | AUTH USER | |
// | | VIEW | |
// | | | |
// | ... |
gfx::Point CalculatePosition() override {
DCHECK(lock_contents_view_);
gfx::Point popup_center;
popup_center.set_x(GetAnchorView()->bounds().width() / 2);
if (lock_contents_view_->CurrentBigUserView() &&
lock_contents_view_->CurrentBigUserView()->auth_user()) {
// Calculate auth_user y position in the screen coordinates.
gfx::Point auth_user_view_y(
0,
lock_contents_view_->CurrentBigUserView()->auth_user()->bounds().y());
ConvertPointToTarget(lock_contents_view_->CurrentBigUserView() /*source*/,
GetAnchorView() /*target*/, &auth_user_view_y);
popup_center.set_y(auth_user_view_y.y() / 2);
} else {
popup_center.set_y(kUserAddingPopUpDefaultYPosition +
GetPreferredSize().height() / 2);
}
// The position is defined by the coordinates of the top-left corner.
return popup_center - gfx::Vector2d(GetPreferredSize().width() / 2,
GetPreferredSize().height() / 2);
}
private:
LockContentsView* lock_contents_view_ = nullptr;
};
class LockContentsView::AutoLoginUserActivityHandler class LockContentsView::AutoLoginUserActivityHandler
: public ui::UserActivityObserver { : public ui::UserActivityObserver {
public: public:
...@@ -409,11 +488,11 @@ views::View* LockContentsView::TestApi::note_action() const { ...@@ -409,11 +488,11 @@ views::View* LockContentsView::TestApi::note_action() const {
return view_->note_action_; return view_->note_action_;
} }
LoginTooltipView* LockContentsView::TestApi::tooltip_bubble() const { views::View* LockContentsView::TestApi::tooltip_bubble() const {
return view_->tooltip_bubble_; return view_->tooltip_bubble_;
} }
LoginTooltipView* LockContentsView::TestApi::management_bubble() const { views::View* LockContentsView::TestApi::management_bubble() const {
return view_->management_bubble_; return view_->management_bubble_;
} }
...@@ -435,6 +514,10 @@ LockContentsView::TestApi::supervised_user_deprecation_bubble() const { ...@@ -435,6 +514,10 @@ LockContentsView::TestApi::supervised_user_deprecation_bubble() const {
return view_->supervised_user_deprecation_bubble_; return view_->supervised_user_deprecation_bubble_;
} }
views::View* LockContentsView::TestApi::user_adding_screen_bubble() const {
return view_->user_adding_screen_bubble_;
}
views::View* LockContentsView::TestApi::system_info() const { views::View* LockContentsView::TestApi::system_info() const {
return view_->system_info_; return view_->system_info_;
} }
...@@ -614,6 +697,13 @@ LockContentsView::LockContentsView( ...@@ -614,6 +697,13 @@ LockContentsView::LockContentsView(
auth_error_bubble_ = AddChildView(std::make_unique<AuthErrorBubble>()); auth_error_bubble_ = AddChildView(std::make_unique<AuthErrorBubble>());
if (Shell::Get()->session_controller()->GetSessionState() ==
session_manager::SessionState::LOGIN_SECONDARY) {
user_adding_screen_bubble_ = AddChildView(std::make_unique<UserAddingPopUp>(
l10n_util::GetStringUTF16(IDS_ASH_LOGIN_USER_ADDING_BANNER),
this /* anchor_view */));
}
OnLockScreenNoteStateChanged(initial_note_action_state); OnLockScreenNoteStateChanged(initial_note_action_state);
chromeos::PowerManagerClient::Get()->AddObserver(this); chromeos::PowerManagerClient::Get()->AddObserver(this);
RegisterAccelerators(); RegisterAccelerators();
...@@ -1832,6 +1922,12 @@ void LockContentsView::LayoutAuth(LoginBigUserView* to_update, ...@@ -1832,6 +1922,12 @@ void LockContentsView::LayoutAuth(LoginBigUserView* to_update,
Layout(); Layout();
apply_animation_post_layout(to_update); apply_animation_post_layout(to_update);
apply_animation_post_layout(opt_to_hide); apply_animation_post_layout(opt_to_hide);
// The user adding screen should be layout after the auth user view.
if (Shell::Get()->session_controller()->GetSessionState() ==
session_manager::SessionState::LOGIN_SECONDARY) {
user_adding_screen_bubble_->Show();
}
} }
void LockContentsView::SwapToBigUser(int user_index) { void LockContentsView::SwapToBigUser(int user_index) {
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "ash/login/ui/login_data_dispatcher.h" #include "ash/login/ui/login_data_dispatcher.h"
#include "ash/login/ui/login_display_style.h" #include "ash/login/ui/login_display_style.h"
#include "ash/login/ui/login_error_bubble.h" #include "ash/login/ui/login_error_bubble.h"
#include "ash/login/ui/login_tooltip_view.h" #include "ash/login/ui/login_unpositioned_tooltip_view.h"
#include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/non_accessible_view.h"
#include "ash/public/cpp/keyboard/keyboard_controller_observer.h" #include "ash/public/cpp/keyboard/keyboard_controller_observer.h"
#include "ash/public/cpp/login_accelerators.h" #include "ash/public/cpp/login_accelerators.h"
...@@ -73,6 +73,8 @@ class ASH_EXPORT LockContentsView ...@@ -73,6 +73,8 @@ class ASH_EXPORT LockContentsView
METADATA_HEADER(LockContentsView); METADATA_HEADER(LockContentsView);
class AuthErrorBubble; class AuthErrorBubble;
class ManagementPopUp; class ManagementPopUp;
class LoginTooltipView;
class UserAddingPopUp;
class UserState; class UserState;
enum class BottomIndicatorState { enum class BottomIndicatorState {
...@@ -93,12 +95,13 @@ class ASH_EXPORT LockContentsView ...@@ -93,12 +95,13 @@ class ASH_EXPORT LockContentsView
ScrollableUsersListView* users_list() const; ScrollableUsersListView* users_list() const;
LockScreenMediaControlsView* media_controls_view() const; LockScreenMediaControlsView* media_controls_view() const;
views::View* note_action() const; views::View* note_action() const;
LoginTooltipView* tooltip_bubble() const; views::View* tooltip_bubble() const;
LoginTooltipView* management_bubble() const; views::View* management_bubble() const;
LoginErrorBubble* auth_error_bubble() const; LoginErrorBubble* auth_error_bubble() const;
LoginErrorBubble* detachable_base_error_bubble() const; LoginErrorBubble* detachable_base_error_bubble() const;
LoginErrorBubble* warning_banner_bubble() const; LoginErrorBubble* warning_banner_bubble() const;
LoginErrorBubble* supervised_user_deprecation_bubble() const; LoginErrorBubble* supervised_user_deprecation_bubble() const;
views::View* user_adding_screen_bubble() const;
views::View* system_info() const; views::View* system_info() const;
views::View* bottom_status_indicator() const; views::View* bottom_status_indicator() const;
BottomIndicatorState bottom_status_indicator_status() const; BottomIndicatorState bottom_status_indicator_status() const;
...@@ -451,6 +454,9 @@ class ASH_EXPORT LockContentsView ...@@ -451,6 +454,9 @@ class ASH_EXPORT LockContentsView
LoginTooltipView* tooltip_bubble_; LoginTooltipView* tooltip_bubble_;
// Bubble for displaying management details. // Bubble for displaying management details.
ManagementPopUp* management_bubble_; ManagementPopUp* management_bubble_;
// Bubble for displaying a warning message when a secondary user is being
// added.
UserAddingPopUp* user_adding_screen_bubble_ = nullptr;
// Bubble for displaying warning banner message. // Bubble for displaying warning banner message.
LoginErrorBubble* warning_banner_bubble_; LoginErrorBubble* warning_banner_bubble_;
// Bubble for displaying supervised user deprecation message. // Bubble for displaying supervised user deprecation message.
......
// Copyright 2018 The Chromium Authors. All rights reserved. // Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/login/ui/login_tooltip_view.h" #include "ash/login/ui/login_unpositioned_tooltip_view.h"
#include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/non_accessible_view.h"
#include "ash/login/ui/views_utils.h" #include "ash/login/ui/views_utils.h"
...@@ -19,17 +19,14 @@ namespace ash { ...@@ -19,17 +19,14 @@ namespace ash {
namespace { namespace {
// Horizontal and vertical padding of login tooltip view.
constexpr int kHorizontalPaddingLoginTooltipViewDp = 8;
constexpr int kVerticalPaddingLoginTooltipViewDp = 8;
// The size of the info icon in the tooltip view. // The size of the info icon in the tooltip view.
constexpr int kInfoIconSizeDp = 20; constexpr int kInfoIconSizeDp = 20;
} // namespace } // namespace
LoginTooltipView::LoginTooltipView(const base::string16& message, LoginUnpositionedTooltipView::LoginUnpositionedTooltipView(
views::View* anchor_view) const base::string16& message,
views::View* anchor_view)
: LoginBaseBubbleView(anchor_view) { : LoginBaseBubbleView(anchor_view) {
views::ImageView* info_icon = new views::ImageView(); views::ImageView* info_icon = new views::ImageView();
info_icon->SetPreferredSize(gfx::Size(kInfoIconSizeDp, kInfoIconSizeDp)); info_icon->SetPreferredSize(gfx::Size(kInfoIconSizeDp, kInfoIconSizeDp));
...@@ -41,20 +38,15 @@ LoginTooltipView::LoginTooltipView(const base::string16& message, ...@@ -41,20 +38,15 @@ LoginTooltipView::LoginTooltipView(const base::string16& message,
AddChildView(label_); AddChildView(label_);
} }
LoginTooltipView::~LoginTooltipView() = default; LoginUnpositionedTooltipView::~LoginUnpositionedTooltipView() = default;
void LoginTooltipView::SetText(const base::string16& message) { void LoginUnpositionedTooltipView::SetText(const base::string16& message) {
label_->SetText(message); label_->SetText(message);
} }
void LoginTooltipView::GetAccessibleNodeData(ui::AXNodeData* node_data) { void LoginUnpositionedTooltipView::GetAccessibleNodeData(
ui::AXNodeData* node_data) {
node_data->role = ax::mojom::Role::kTooltip; node_data->role = ax::mojom::Role::kTooltip;
} }
gfx::Point LoginTooltipView::CalculatePosition() {
return CalculatePositionUsingDefaultStrategy(
PositioningStrategy::kShowOnLeftSideOrRightSide,
kHorizontalPaddingLoginTooltipViewDp, kVerticalPaddingLoginTooltipViewDp);
}
} // namespace ash } // namespace ash
// Copyright 2018 The Chromium Authors. All rights reserved. // Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef ASH_LOGIN_UI_LOGIN_TOOLTIP_VIEW_H_ #ifndef ASH_LOGIN_UI_LOGIN_UNPOSITIONED_TOOLTIP_VIEW_H_
#define ASH_LOGIN_UI_LOGIN_TOOLTIP_VIEW_H_ #define ASH_LOGIN_UI_LOGIN_UNPOSITIONED_TOOLTIP_VIEW_H_
#include "ash/login/ui/login_base_bubble_view.h" #include "ash/login/ui/login_base_bubble_view.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
...@@ -15,16 +15,18 @@ class Label; ...@@ -15,16 +15,18 @@ class Label;
namespace ash { namespace ash {
class LoginTooltipView : public LoginBaseBubbleView { // TODO(crbug.com/1109266): Get rid of this class and make
// LoginBaseBubbleView more configurable.
class LoginUnpositionedTooltipView : public LoginBaseBubbleView {
public: public:
LoginTooltipView(const base::string16& message, views::View* anchor_view); LoginUnpositionedTooltipView(const base::string16& message,
~LoginTooltipView() override; views::View* anchor_view);
~LoginUnpositionedTooltipView() override;
void SetText(const base::string16& message); void SetText(const base::string16& message);
// LoginBaseBubbleView: // LoginBaseBubbleView:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
gfx::Point CalculatePosition() override;
protected: protected:
views::Label* label() { return label_; } views::Label* label() { return label_; }
...@@ -32,9 +34,9 @@ class LoginTooltipView : public LoginBaseBubbleView { ...@@ -32,9 +34,9 @@ class LoginTooltipView : public LoginBaseBubbleView {
private: private:
views::Label* label_ = nullptr; views::Label* label_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(LoginTooltipView); DISALLOW_COPY_AND_ASSIGN(LoginUnpositionedTooltipView);
}; };
} // namespace ash } // namespace ash
#endif // ASH_LOGIN_UI_LOGIN_TOOLTIP_VIEW_H_ #endif // ASH_LOGIN_UI_LOGIN_UNPOSITIONED_TOOLTIP_VIEW_H_
...@@ -36,6 +36,7 @@ class ASH_PUBLIC_EXPORT LoginScreenTestApi { ...@@ -36,6 +36,7 @@ class ASH_PUBLIC_EXPORT LoginScreenTestApi {
static bool IsParentAccessButtonShown(); static bool IsParentAccessButtonShown();
static bool IsEnterpriseEnrollmentButtonShown(); static bool IsEnterpriseEnrollmentButtonShown();
static bool IsWarningBubbleShown(); static bool IsWarningBubbleShown();
static bool IsUserAddingScreenBubbleShown();
static bool IsSystemInfoShown(); static bool IsSystemInfoShown();
static bool IsPasswordFieldShown(const AccountId& account_id); static bool IsPasswordFieldShown(const AccountId& account_id);
static bool IsDisplayPasswordButtonShown(const AccountId& account_id); static bool IsDisplayPasswordButtonShown(const AccountId& account_id);
......
...@@ -1370,6 +1370,7 @@ ...@@ -1370,6 +1370,7 @@
<message name="IDS_OFFLINE_LOGIN_HTML" desc="Text which suggests enter as an existing user when valid network isn't presented."> <message name="IDS_OFFLINE_LOGIN_HTML" desc="Text which suggests enter as an existing user when valid network isn't presented.">
If you've already registered on this device, you can <ph name="LINK2_START">$1<ex>&gt;a&lt;</ex></ph>sign in as an existing user<ph name="LINK2_END">$2<ex>&gt;/a&lt;</ex></ph>. If you've already registered on this device, you can <ph name="LINK2_START">$1<ex>&gt;a&lt;</ex></ph>sign in as an existing user<ph name="LINK2_END">$2<ex>&gt;/a&lt;</ex></ph>.
</message> </message>
<!-- TODO(1066489): Should be synced with IDS_ASH_LOGIN_USER_ADDING_BANNER until we get rid of Web UI version of multiprofile. -->
<message name="IDS_LOGIN_USER_ADDING_BANNER" desc="Text shown on a banner in user adding screen."> <message name="IDS_LOGIN_USER_ADDING_BANNER" desc="Text shown on a banner in user adding screen.">
Add an account to multiple sign-in. All signed-in accounts can be accessed without a password, so this feature should only be used with trusted accounts. Add an account to multiple sign-in. All signed-in accounts can be accessed without a password, so this feature should only be used with trusted accounts.
</message> </message>
......
...@@ -150,10 +150,10 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, CancelAdding) { ...@@ -150,10 +150,10 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, CancelAdding) {
users[0].account_id); users[0].account_id);
} }
class UserAddingScreenWithViewBasedTest : public UserAddingScreenTest, class UserAddingScreenViewBasedTest : public UserAddingScreenTest,
public LoginScreenShownObserver { public LoginScreenShownObserver {
public: public:
UserAddingScreenWithViewBasedTest() : UserAddingScreenTest() { UserAddingScreenViewBasedTest() : UserAddingScreenTest() {
feature_list_.InitWithFeatures( feature_list_.InitWithFeatures(
{chromeos::features::kViewBasedMultiprofileLogin}, {}); {chromeos::features::kViewBasedMultiprofileLogin}, {});
} }
...@@ -179,7 +179,7 @@ class UserAddingScreenWithViewBasedTest : public UserAddingScreenTest, ...@@ -179,7 +179,7 @@ class UserAddingScreenWithViewBasedTest : public UserAddingScreenTest,
base::test::ScopedFeatureList feature_list_; base::test::ScopedFeatureList feature_list_;
}; };
IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, CancelAdding) { IN_PROC_BROWSER_TEST_F(UserAddingScreenViewBasedTest, CancelAdding) {
const auto& users = login_mixin_.users(); const auto& users = login_mixin_.users();
EXPECT_EQ(users.size(), user_manager::UserManager::Get()->GetUsers().size()); EXPECT_EQ(users.size(), user_manager::UserManager::Get()->GetUsers().size());
EXPECT_EQ(user_manager::UserManager::Get()->GetLoggedInUsers().size(), 0u); EXPECT_EQ(user_manager::UserManager::Get()->GetLoggedInUsers().size(), 0u);
...@@ -253,7 +253,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, UILogin) { ...@@ -253,7 +253,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, UILogin) {
session_manager::SessionState::ACTIVE); session_manager::SessionState::ACTIVE);
} }
IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, UILogin) { IN_PROC_BROWSER_TEST_F(UserAddingScreenViewBasedTest, UILogin) {
const auto& users = login_mixin_.users(); const auto& users = login_mixin_.users();
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(), EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_PRIMARY); session_manager::SessionState::LOGIN_PRIMARY);
...@@ -314,8 +314,8 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, AddingSeveralUsers) { ...@@ -314,8 +314,8 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, AddingSeveralUsers) {
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(), EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_SECONDARY); session_manager::SessionState::LOGIN_SECONDARY);
AddUser(users[n - i].account_id); AddUser(users[i].account_id);
users_in_session_order_.push_back(users[n - i].account_id); users_in_session_order_.push_back(users[i].account_id);
WaitUntilUserAddingFinishedOrCancelled(); WaitUntilUserAddingFinishedOrCancelled();
EXPECT_EQ(user_adding_finished(), i); EXPECT_EQ(user_adding_finished(), i);
...@@ -402,7 +402,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, AddingSeveralUsers) { ...@@ -402,7 +402,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, AddingSeveralUsers) {
EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId()); EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId());
} }
IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, AddingSeveralUsers) { IN_PROC_BROWSER_TEST_F(UserAddingScreenViewBasedTest, AddingSeveralUsers) {
const auto& users = login_mixin_.users(); const auto& users = login_mixin_.users();
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(), EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_PRIMARY); session_manager::SessionState::LOGIN_PRIMARY);
...@@ -424,8 +424,8 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, AddingSeveralUsers) { ...@@ -424,8 +424,8 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, AddingSeveralUsers) {
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(), EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_SECONDARY); session_manager::SessionState::LOGIN_SECONDARY);
AddUser(users[n - i].account_id); AddUser(users[i].account_id);
users_in_session_order_.push_back(users[n - i].account_id); users_in_session_order_.push_back(users[i].account_id);
WaitUntilUserAddingFinishedOrCancelled(); WaitUntilUserAddingFinishedOrCancelled();
EXPECT_EQ(user_adding_finished(), i); EXPECT_EQ(user_adding_finished(), i);
...@@ -544,7 +544,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, ScreenVisibilityAfterLock) { ...@@ -544,7 +544,7 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, ScreenVisibilityAfterLock) {
WaitUntilUserAddingFinishedOrCancelled(); WaitUntilUserAddingFinishedOrCancelled();
} }
IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, IN_PROC_BROWSER_TEST_F(UserAddingScreenViewBasedTest,
ScreenVisibilityAfterLock) { ScreenVisibilityAfterLock) {
const auto& users = login_mixin_.users(); const auto& users = login_mixin_.users();
LoginUser(users[0].account_id); LoginUser(users[0].account_id);
...@@ -576,4 +576,47 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest, ...@@ -576,4 +576,47 @@ IN_PROC_BROWSER_TEST_F(UserAddingScreenWithViewBasedTest,
WaitUntilUserAddingFinishedOrCancelled(); WaitUntilUserAddingFinishedOrCancelled();
} }
IN_PROC_BROWSER_TEST_F(UserAddingScreenViewBasedTest, InfoBubbleVisible) {
const auto& users = login_mixin_.users();
EXPECT_EQ(users.size(), user_manager::UserManager::Get()->GetUsers().size());
EXPECT_EQ(user_manager::UserManager::Get()->GetLoggedInUsers().size(), 0u);
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_PRIMARY);
EXPECT_FALSE(ash::LoginScreenTestApi::IsUserAddingScreenBubbleShown());
LoginUser(users[0].account_id);
EXPECT_EQ(user_manager::UserManager::Get()->GetLoggedInUsers().size(), 1u);
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::ACTIVE);
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
// Check if the user adding screen bubble is still shown after adding other
// users, as a re-layout is executed each time.
const int n = users.size();
for (int i = 1; i < n; ++i) {
UserAddingScreen::Get()->Start();
EXPECT_EQ(user_adding_started(), i);
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::LOGIN_SECONDARY);
EXPECT_TRUE(ash::LoginScreenTestApi::IsUserAddingScreenBubbleShown());
AddUser(users[i].account_id);
users_in_session_order_.push_back(users[i].account_id);
WaitUntilUserAddingFinishedOrCancelled();
EXPECT_EQ(user_adding_finished(), i);
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::ACTIVE);
EXPECT_TRUE(LoginDisplayHost::default_host() == nullptr);
ASSERT_EQ(user_manager->GetLoggedInUsers().size(),
static_cast<size_t>(i + 1));
}
EXPECT_EQ(session_manager::SessionManager::Get()->session_state(),
session_manager::SessionState::ACTIVE);
}
} // namespace chromeos } // namespace chromeos
...@@ -176,6 +176,11 @@ Try tapping the mic to ask me anything. ...@@ -176,6 +176,11 @@ Try tapping the mic to ask me anything.
This <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> is managed by <ph name="ENROLLMENT_DOMAIN">$2<ex>example.com</ex></ph>. Administrators may remotely configure the device. This <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> is managed by <ph name="ENROLLMENT_DOMAIN">$2<ex>example.com</ex></ph>. Administrators may remotely configure the device.
</message> </message>
<!-- Pop-up secondary login screen. -->
<message name="IDS_ASH_LOGIN_USER_ADDING_BANNER" desc="Text shown on a banner in user adding screen.">
Add an account to multiple sign-in. All signed-in accounts can be accessed without a password, so this feature should only be used with trusted accounts.
</message>
<!-- Status tray enterprise management. --> <!-- Status tray enterprise management. -->
<message name="IDS_ASH_ENTERPRISE_DEVICE_MANAGED_BY" desc="Text for notifications showing that this device is enterpise managed. Used when the organization's domain name is available."> <message name="IDS_ASH_ENTERPRISE_DEVICE_MANAGED_BY" desc="Text for notifications showing that this device is enterpise managed. Used when the organization's domain name is available.">
This device is managed by <ph name="DOMAIN">$1<ex>acmecorp.com</ex></ph>. This device is managed by <ph name="DOMAIN">$1<ex>acmecorp.com</ex></ph>.
......
196693999d71cfc3d1fa5df58fe75d414e89e601
\ No newline at end of file
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