Commit 023255df authored by Roman Aleksandrov's avatar Roman Aleksandrov Committed by Commit Bot

FingerprintSetupScreen: Skip screen properly.

Use new method for skipping screen. Add tests for UMA stats.

Bug: 1064561
Change-Id: Ieabfdab904e6e83501a3188a3ff8d4184da0bb10
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2142264
Commit-Queue: Roman Aleksandrov <raleksandrov@google.com>
Reviewed-by: default avatarRoman Sorokin [CET] <rsorokin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758226}
parent 6b8c63ec
...@@ -33,6 +33,7 @@ class FingerprintSetupTest : public OobeBaseTest { ...@@ -33,6 +33,7 @@ class FingerprintSetupTest : public OobeBaseTest {
// Override the screen exit callback with our own method. // Override the screen exit callback with our own method.
FingerprintSetupScreen* fingerprint_screen = FingerprintSetupScreen::Get( FingerprintSetupScreen* fingerprint_screen = FingerprintSetupScreen::Get(
WizardController::default_controller()->screen_manager()); WizardController::default_controller()->screen_manager());
original_callback_ = fingerprint_screen->get_exit_callback_for_testing();
fingerprint_screen->set_exit_callback_for_testing( fingerprint_screen->set_exit_callback_for_testing(
base::BindRepeating(&FingerprintSetupTest::OnFingerprintSetupScreenExit, base::BindRepeating(&FingerprintSetupTest::OnFingerprintSetupScreenExit,
base::Unretained(this))); base::Unretained(this)));
...@@ -55,8 +56,10 @@ class FingerprintSetupTest : public OobeBaseTest { ...@@ -55,8 +56,10 @@ class FingerprintSetupTest : public OobeBaseTest {
run_loop.Run(); run_loop.Run();
} }
void OnFingerprintSetupScreenExit() { void OnFingerprintSetupScreenExit(FingerprintSetupScreen::Result result) {
screen_exit_ = true; screen_exit_ = true;
screen_result_ = result;
original_callback_.Run(result);
if (screen_exit_callback_) { if (screen_exit_callback_) {
std::move(screen_exit_callback_).Run(); std::move(screen_exit_callback_).Run();
} }
...@@ -84,8 +87,12 @@ class FingerprintSetupTest : public OobeBaseTest { ...@@ -84,8 +87,12 @@ class FingerprintSetupTest : public OobeBaseTest {
{"fingerprint-setup-impl", "fingerprintAddAnother"}); {"fingerprint-setup-impl", "fingerprintAddAnother"});
} }
base::Optional<FingerprintSetupScreen::Result> screen_result_;
base::HistogramTester histogram_tester_;
private: private:
bool screen_exit_ = false; bool screen_exit_ = false;
FingerprintSetupScreen::ScreenExitCallback original_callback_;
base::RepeatingClosure screen_exit_callback_; base::RepeatingClosure screen_exit_callback_;
}; };
...@@ -104,6 +111,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollHalf) { ...@@ -104,6 +111,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollHalf) {
test::OobeJS().TapOnPath({"fingerprint-setup-impl", "skipFingerprintEnroll"}); test::OobeJS().TapOnPath({"fingerprint-setup-impl", "skipFingerprintEnroll"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), FingerprintSetupScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 1);
} }
IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollFull) { IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollFull) {
...@@ -115,6 +127,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollFull) { ...@@ -115,6 +127,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollFull) {
test::OobeJS().TapOnPath({"fingerprint-setup-impl", "fingerprintEnrollDone"}); test::OobeJS().TapOnPath({"fingerprint-setup-impl", "fingerprintEnrollDone"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), FingerprintSetupScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 1);
} }
IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollLimit) { IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollLimit) {
...@@ -133,6 +150,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollLimit) { ...@@ -133,6 +150,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintEnrollLimit) {
test::OobeJS().TapOnPath({"fingerprint-setup-impl", "fingerprintEnrollDone"}); test::OobeJS().TapOnPath({"fingerprint-setup-impl", "fingerprintEnrollDone"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), FingerprintSetupScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 1);
} }
IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintDisabled) { IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintDisabled) {
...@@ -143,6 +165,12 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintDisabled) { ...@@ -143,6 +165,12 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintDisabled) {
FingerprintSetupScreenView::kScreenId); FingerprintSetupScreenView::kScreenId);
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
FingerprintSetupScreen::Result::NOT_APPLICABLE);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 0);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 0);
} }
IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupScreenElements) { IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupScreenElements) {
...@@ -161,6 +189,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupCancel) { ...@@ -161,6 +189,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupCancel) {
test::OobeJS().TapOnPath({"fingerprint-setup-impl", "skipFingerprintSetup"}); test::OobeJS().TapOnPath({"fingerprint-setup-impl", "skipFingerprintSetup"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), FingerprintSetupScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 1);
} }
IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupNext) { IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupNext) {
...@@ -192,6 +225,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupLater) { ...@@ -192,6 +225,11 @@ IN_PROC_BROWSER_TEST_F(FingerprintSetupTest, FingerprintSetupLater) {
test::OobeJS().TapOnPath({"fingerprint-setup-impl", "setupFingerprintLater"}); test::OobeJS().TapOnPath({"fingerprint-setup-impl", "setupFingerprintLater"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), FingerprintSetupScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Fingerprint-setup.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Fingerprint-setup", 1);
} }
} // namespace chromeos } // namespace chromeos
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen.h" #include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen.h"
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/chromeos/login/users/chrome_user_manager_util.h" #include "chrome/browser/chromeos/login/users/chrome_user_manager_util.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
...@@ -15,6 +16,16 @@ constexpr char kUserActionClose[] = "fingerprint-setup-done"; ...@@ -15,6 +16,16 @@ constexpr char kUserActionClose[] = "fingerprint-setup-done";
} // namespace } // namespace
// static
std::string FingerprintSetupScreen::GetResultString(Result result) {
switch (result) {
case Result::NEXT:
return "Next";
case Result::NOT_APPLICABLE:
return BaseScreen::kNotApplicable;
}
}
FingerprintSetupScreen* FingerprintSetupScreen::Get(ScreenManager* manager) { FingerprintSetupScreen* FingerprintSetupScreen::Get(ScreenManager* manager) {
return static_cast<FingerprintSetupScreen*>( return static_cast<FingerprintSetupScreen*>(
manager->GetScreen(FingerprintSetupScreenView::kScreenId)); manager->GetScreen(FingerprintSetupScreenView::kScreenId));
...@@ -22,7 +33,7 @@ FingerprintSetupScreen* FingerprintSetupScreen::Get(ScreenManager* manager) { ...@@ -22,7 +33,7 @@ FingerprintSetupScreen* FingerprintSetupScreen::Get(ScreenManager* manager) {
FingerprintSetupScreen::FingerprintSetupScreen( FingerprintSetupScreen::FingerprintSetupScreen(
FingerprintSetupScreenView* view, FingerprintSetupScreenView* view,
const base::RepeatingClosure& exit_callback) const ScreenExitCallback& exit_callback)
: BaseScreen(FingerprintSetupScreenView::kScreenId, : BaseScreen(FingerprintSetupScreenView::kScreenId,
OobeScreenPriority::DEFAULT), OobeScreenPriority::DEFAULT),
view_(view), view_(view),
...@@ -35,13 +46,17 @@ FingerprintSetupScreen::~FingerprintSetupScreen() { ...@@ -35,13 +46,17 @@ FingerprintSetupScreen::~FingerprintSetupScreen() {
view_->Bind(nullptr); view_->Bind(nullptr);
} }
void FingerprintSetupScreen::ShowImpl() { bool FingerprintSetupScreen::MaybeSkip() {
if (!chromeos::quick_unlock::IsFingerprintEnabled( if (!chromeos::quick_unlock::IsFingerprintEnabled(
ProfileManager::GetActiveUserProfile()) || ProfileManager::GetActiveUserProfile()) ||
chrome_user_manager_util::IsPublicSessionOrEphemeralLogin()) { chrome_user_manager_util::IsPublicSessionOrEphemeralLogin()) {
exit_callback_.Run(); exit_callback_.Run(Result::NOT_APPLICABLE);
return; return true;
} }
return false;
}
void FingerprintSetupScreen::ShowImpl() {
view_->Show(); view_->Show();
} }
...@@ -51,7 +66,7 @@ void FingerprintSetupScreen::HideImpl() { ...@@ -51,7 +66,7 @@ void FingerprintSetupScreen::HideImpl() {
void FingerprintSetupScreen::OnUserAction(const std::string& action_id) { void FingerprintSetupScreen::OnUserAction(const std::string& action_id) {
if (action_id == kUserActionClose) { if (action_id == kUserActionClose) {
exit_callback_.Run(); exit_callback_.Run(Result::NEXT);
return; return;
} }
BaseScreen::OnUserAction(action_id); BaseScreen::OnUserAction(action_id);
......
...@@ -20,17 +20,28 @@ class FingerprintSetupScreenView; ...@@ -20,17 +20,28 @@ class FingerprintSetupScreenView;
// user to enroll fingerprint on the device. // user to enroll fingerprint on the device.
class FingerprintSetupScreen : public BaseScreen { class FingerprintSetupScreen : public BaseScreen {
public: public:
enum class Result { NEXT, NOT_APPLICABLE };
static std::string GetResultString(Result result);
using ScreenExitCallback = base::RepeatingCallback<void(Result result)>;
FingerprintSetupScreen(FingerprintSetupScreenView* view, FingerprintSetupScreen(FingerprintSetupScreenView* view,
const base::RepeatingClosure& exit_callback); const ScreenExitCallback& exit_callback);
~FingerprintSetupScreen() override; ~FingerprintSetupScreen() override;
static FingerprintSetupScreen* Get(ScreenManager* manager); static FingerprintSetupScreen* Get(ScreenManager* manager);
void set_exit_callback_for_testing( void set_exit_callback_for_testing(const ScreenExitCallback& exit_callback) {
const base::RepeatingClosure& exit_callback) {
exit_callback_ = exit_callback; exit_callback_ = exit_callback;
} }
const ScreenExitCallback& get_exit_callback_for_testing() {
return exit_callback_;
}
// BaseScreen:
bool MaybeSkip() override;
protected: protected:
// BaseScreen: // BaseScreen:
void ShowImpl() override; void ShowImpl() override;
...@@ -39,7 +50,7 @@ class FingerprintSetupScreen : public BaseScreen { ...@@ -39,7 +50,7 @@ class FingerprintSetupScreen : public BaseScreen {
private: private:
FingerprintSetupScreenView* const view_; FingerprintSetupScreenView* const view_;
base::RepeatingClosure exit_callback_; ScreenExitCallback exit_callback_;
DISALLOW_COPY_AND_ASSIGN(FingerprintSetupScreen); DISALLOW_COPY_AND_ASSIGN(FingerprintSetupScreen);
}; };
......
...@@ -1124,8 +1124,10 @@ void WizardController::OnSyncConsentFinished() { ...@@ -1124,8 +1124,10 @@ void WizardController::OnSyncConsentFinished() {
ShowFingerprintSetupScreen(); ShowFingerprintSetupScreen();
} }
void WizardController::OnFingerprintSetupScreenExit() { void WizardController::OnFingerprintSetupScreenExit(
OnScreenExit(FingerprintSetupScreenView::kScreenId, kDefaultExitReason); FingerprintSetupScreen::Result result) {
OnScreenExit(FingerprintSetupScreenView::kScreenId,
FingerprintSetupScreen::GetResultString(result));
ShowDiscoverScreen(); ShowDiscoverScreen();
} }
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.h" #include "chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h" #include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h"
#include "chrome/browser/chromeos/login/screens/eula_screen.h" #include "chrome/browser/chromeos/login/screens/eula_screen.h"
#include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen.h"
#include "chrome/browser/chromeos/login/screens/gesture_navigation_screen.h" #include "chrome/browser/chromeos/login/screens/gesture_navigation_screen.h"
#include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.h" #include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.h"
#include "chrome/browser/chromeos/login/screens/network_screen.h" #include "chrome/browser/chromeos/login/screens/network_screen.h"
...@@ -240,7 +241,7 @@ class WizardController { ...@@ -240,7 +241,7 @@ class WizardController {
void OnTermsOfServiceAccepted(); void OnTermsOfServiceAccepted();
void OnSyncConsentScreenExit(); void OnSyncConsentScreenExit();
void OnSyncConsentFinished(); void OnSyncConsentFinished();
void OnFingerprintSetupScreenExit(); void OnFingerprintSetupScreenExit(FingerprintSetupScreen::Result result);
void OnDiscoverScreenExit(); void OnDiscoverScreenExit();
void OnArcTermsOfServiceScreenExit(ArcTermsOfServiceScreen::Result result); void OnArcTermsOfServiceScreenExit(ArcTermsOfServiceScreen::Result result);
void OnArcTermsOfServiceSkipped(); void OnArcTermsOfServiceSkipped();
......
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