0

[OOBE Cleanup] Eliminate LD::Delegate::ResetAutoLoginTimer

ResetAutoLoginTimer was called on the user activity. This CL just moves
the user activity observation directly to the ExistingUserController

BUG=b:275061367

Change-Id: I60de81e5f817d3a2580de52f2498661fe48b475d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4370681
Reviewed-by: Renato Silva <rrsilva@google.com>
Commit-Queue: Roman Sorokin <rsorokin@google.com>
Reviewed-by: Danila Kuzmin <dkuzmin@google.com>
Cr-Commit-Position: refs/heads/main@{#1122283}
This commit is contained in:
Roman Sorokin
2023-03-27 07:02:04 +00:00
committed by Chromium LUCI CQ
parent 859d5f51fb
commit 869030e014
14 changed files with 27 additions and 92 deletions

@ -480,13 +480,6 @@ void LoginScreenController::FocusOobeDialog() {
client_->FocusOobeDialog();
}
void LoginScreenController::NotifyUserActivity() {
if (!client_) {
return;
}
client_->OnUserActivity();
}
void LoginScreenController::OnAuthenticateComplete(
OnAuthenticateCallback callback,
bool success) {

@ -100,7 +100,6 @@ class ASH_EXPORT LoginScreenController : public LoginScreen,
void ShowParentAccessHelpApp();
void ShowLockScreenNotificationSettings();
void FocusOobeDialog();
void NotifyUserActivity();
// Enable or disable authentication for the debug overlay.
enum class ForceFailAuth { kOff, kImmediate, kDelayed };

@ -113,7 +113,6 @@ class MockLoginScreenClient : public LoginScreenClient {
MOCK_METHOD(void, ShowLockScreenNotificationSettings, (), (override));
MOCK_METHOD(void, FocusOobeDialog, (), (override));
MOCK_METHOD(void, OnFocusLeavingSystemTray, (bool reverse), (override));
MOCK_METHOD(void, OnUserActivity, (), (override));
MOCK_METHOD(void, OnLoginScreenShown, (), (override));
MOCK_METHOD(void, OnSystemTrayBubbleShown, (), (override));
MOCK_METHOD(views::Widget*, GetLoginWindowWidget, (), (override));

@ -304,30 +304,6 @@ class UserAddingScreenIndicator : public views::View {
} // namespace
class LockContentsView::AutoLoginUserActivityHandler
: public ui::UserActivityObserver {
public:
AutoLoginUserActivityHandler() {
observation_.Observe(ui::UserActivityDetector::Get());
}
AutoLoginUserActivityHandler(const AutoLoginUserActivityHandler&) = delete;
AutoLoginUserActivityHandler& operator=(const AutoLoginUserActivityHandler&) =
delete;
~AutoLoginUserActivityHandler() override = default;
void OnUserActivity(const ui::Event* event) override {
if (Shell::Get()->login_screen_controller()) {
Shell::Get()->login_screen_controller()->NotifyUserActivity();
}
}
private:
base::ScopedObservation<ui::UserActivityDetector, ui::UserActivityObserver>
observation_{this};
};
// static
const int LockContentsView::kLoginAttemptsBeforeGaiaDialog = 4;
@ -340,11 +316,6 @@ LockContentsView::LockContentsView(
screen_type_(screen_type),
data_dispatcher_(data_dispatcher),
detachable_base_model_(std::move(detachable_base_model)) {
if (screen_type == LockScreen::ScreenType::kLogin) {
auto_login_user_activity_handler_ =
std::make_unique<AutoLoginUserActivityHandler>();
}
data_dispatcher_->AddObserver(this);
Shell::Get()->system_tray_notifier()->AddSystemTrayObserver(this);
keyboard::KeyboardUIController::Get()->AddObserver(this);

@ -236,8 +236,6 @@ class ASH_EXPORT LockContentsView
bool AreMediaControlsEnabled() const;
private:
class AutoLoginUserActivityHandler;
using DisplayLayoutAction = base::RepeatingCallback<void(bool landscape)>;
// Focus the next/previous widget.
@ -536,11 +534,6 @@ class ASH_EXPORT LockContentsView
// Accelerators handled by login screen.
std::map<ui::Accelerator, LoginAcceleratorAction> accel_map_;
// Notifies Chrome when user activity is detected on the login screen so that
// the auto-login timer can be reset.
std::unique_ptr<AutoLoginUserActivityHandler>
auto_login_user_activity_handler_;
BottomIndicatorState bottom_status_indicator_state_ =
BottomIndicatorState::kNone;

@ -162,9 +162,6 @@ class ASH_PUBLIC_EXPORT LoginScreenClient {
// Called when the lock screen is shown.
virtual void OnLoginScreenShown() = 0;
// Used by Ash to signal that user activity occurred on the login screen.
virtual void OnUserActivity() = 0;
// Get login screen widget. Currently used to set proper accessibility
// navigation.
virtual views::Widget* GetLoginWindowWidget() = 0;

@ -17,6 +17,7 @@
#include "ash/public/cpp/login_screen.h"
#include "ash/public/cpp/notification_utils.h"
#include "base/barrier_closure.h"
#include "base/check_is_test.h"
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/functional/bind.h"
@ -127,6 +128,8 @@
#include "services/network/public/mojom/network_context.mojom.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/user_activity/user_activity_detector.h"
#include "ui/base/user_activity/user_activity_observer.h"
#include "ui/message_center/public/cpp/notification.h"
#include "ui/message_center/public/cpp/notification_delegate.h"
#include "ui/views/widget/widget.h"
@ -383,6 +386,12 @@ ExistingUserController::ExistingUserController()
base::Unretained(this)));
observed_user_manager_.Observe(user_manager::UserManager::Get());
if (ui::UserActivityDetector::Get()) {
ui::UserActivityDetector::Get()->AddObserver(this);
} else {
CHECK_IS_TEST();
}
}
void ExistingUserController::Init(const user_manager::UserList& users) {
@ -495,7 +504,12 @@ void ExistingUserController::Observe(
////////////////////////////////////////////////////////////////////////////////
// ExistingUserController, private:
ExistingUserController::~ExistingUserController() = default;
ExistingUserController::~ExistingUserController() {
ui::UserActivityDetector* activity_detector = ui::UserActivityDetector::Get();
if (activity_detector) {
activity_detector->RemoveObserver(this);
}
}
////////////////////////////////////////////////////////////////////////////////
// ExistingUserController, LoginDisplay::Delegate implementation:
@ -1352,7 +1366,7 @@ void ExistingUserController::ConfigureAutoLogin() {
}
}
void ExistingUserController::ResetAutoLoginTimer() {
void ExistingUserController::OnUserActivity(const ui::Event* event) {
// Only restart the auto-login timer if it's already running.
if (auto_login_timer_ && auto_login_timer_->IsRunning()) {
StopAutoLoginTimer();

@ -31,6 +31,7 @@
#include "content/public/browser/notification_registrar.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/cros_system_api/dbus/cryptohome/dbus-constants.h"
#include "ui/base/user_activity/user_activity_observer.h"
#include "url/gurl.h"
namespace base {
@ -58,7 +59,8 @@ class ExistingUserController : public LoginDisplay::Delegate,
public content::NotificationObserver,
public LoginPerformer::Delegate,
public UserSessionManagerDelegate,
public user_manager::UserManager::Observer {
public user_manager::UserManager::Observer,
public ui::UserActivityObserver {
public:
// Returns the current existing user controller fetched from the current
// LoginDisplayHost instance.
@ -99,7 +101,9 @@ class ExistingUserController : public LoginDisplay::Delegate,
void Login(const UserContext& user_context,
const SigninSpecifics& specifics) override;
void OnStartKioskEnableScreen() override;
void ResetAutoLoginTimer() override;
// ui::UserActivityObserver:
void OnUserActivity(const ui::Event* event) override;
void CompleteLogin(const UserContext& user_context);
void OnGaiaScreenReady();

@ -202,7 +202,7 @@ TEST_F(ExistingUserControllerAutoLoginTest, ResetAutoLoginTimer) {
EXPECT_FALSE(auto_login_timer());
// When the timer isn't running, nothing should happen.
existing_user_controller()->ResetAutoLoginTimer();
existing_user_controller()->OnUserActivity(/*event=*/nullptr);
EXPECT_FALSE(auto_login_timer());
// Start the timer.
@ -216,7 +216,7 @@ TEST_F(ExistingUserControllerAutoLoginTest, ResetAutoLoginTimer) {
// User activity should restart the timer, so check to see that the
// timer delay was modified.
set_auto_login_delay(kAutoLoginDelay1);
existing_user_controller()->ResetAutoLoginTimer();
existing_user_controller()->OnUserActivity(/*event=*/nullptr);
ASSERT_TRUE(auto_login_timer());
EXPECT_TRUE(auto_login_timer()->IsRunning());
EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),

@ -26,9 +26,6 @@ class LoginDisplay {
// Called when the user requests kiosk enable screen.
virtual void OnStartKioskEnableScreen() = 0;
// Restarts the auto-login timer if it is running.
virtual void ResetAutoLoginTimer() = 0;
protected:
virtual ~Delegate();
};

@ -12,28 +12,14 @@ namespace ash {
// LoginDisplayWebUI, public: --------------------------------------------------
LoginDisplayWebUI::~LoginDisplayWebUI() {
ui::UserActivityDetector* activity_detector = ui::UserActivityDetector::Get();
if (activity_detector && activity_detector->HasObserver(this))
activity_detector->RemoveObserver(this);
}
LoginDisplayWebUI::~LoginDisplayWebUI() = default;
// LoginDisplay implementation: ------------------------------------------------
LoginDisplayWebUI::LoginDisplayWebUI() = default;
void LoginDisplayWebUI::Init(const user_manager::UserList& users,
bool show_guest) {
ui::UserActivityDetector* activity_detector = ui::UserActivityDetector::Get();
if (activity_detector && !activity_detector->HasObserver(this))
activity_detector->AddObserver(this);
}
// ---- Common methods
// ---- Gaia screen methods
// ---- Not yet classified methods
bool show_guest) {}
void LoginDisplayWebUI::SetUIEnabled(bool is_enabled) {
LoginDisplayHost* host = LoginDisplayHost::default_host();
@ -41,9 +27,4 @@ void LoginDisplayWebUI::SetUIEnabled(bool is_enabled) {
host->GetWebUILoginView()->SetUIEnabled(is_enabled);
}
void LoginDisplayWebUI::OnUserActivity(const ui::Event* event) {
if (delegate_)
delegate_->ResetAutoLoginTimer();
}
} // namespace ash

@ -7,12 +7,11 @@
#include "chrome/browser/ash/login/ui/login_display.h"
#include "components/user_manager/user.h"
#include "ui/base/user_activity/user_activity_observer.h"
namespace ash {
// WebUI-based login UI implementation.
class LoginDisplayWebUI : public LoginDisplay, public ui::UserActivityObserver {
class LoginDisplayWebUI : public LoginDisplay {
public:
LoginDisplayWebUI();
@ -24,9 +23,6 @@ class LoginDisplayWebUI : public LoginDisplay, public ui::UserActivityObserver {
// LoginDisplay implementation:
void Init(const user_manager::UserList& users, bool show_guest) override;
void SetUIEnabled(bool is_enabled) override;
// ui::UserActivityDetector implementation:
void OnUserActivity(const ui::Event* event) override;
};
} // namespace ash

@ -375,14 +375,6 @@ void LoginScreenClientImpl::SetPublicSessionKeyboardLayout(
account_id, locale, result);
}
void LoginScreenClientImpl::OnUserActivity() {
if (ash::LoginDisplayHost::default_host()) {
ash::LoginDisplayHost::default_host()
->GetExistingUserController()
->ResetAutoLoginTimer();
}
}
views::Widget* LoginScreenClientImpl::GetLoginWindowWidget() {
if (ash::LoginDisplayHost::default_host()) {
return ash::LoginDisplayHost::default_host()->GetLoginWindowWidget();

@ -128,7 +128,6 @@ class LoginScreenClientImpl : public ash::LoginScreenClient {
void OnFocusLeavingSystemTray(bool reverse) override;
void OnSystemTrayBubbleShown() override;
void OnLoginScreenShown() override;
void OnUserActivity() override;
views::Widget* GetLoginWindowWidget() override;
private: