Commit 47fc3f1a authored by Roman Aleksandrov's avatar Roman Aleksandrov Committed by Commit Bot

GestureScreen: Skip screen properly.

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

Bug: 1064561
Change-Id: I953ec454a738fab1e9f58b08e27eec7356965d2d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2141103Reviewed-by: default avatarRoman Sorokin [CET] <rsorokin@chromium.org>
Commit-Queue: Roman Aleksandrov <raleksandrov@google.com>
Cr-Commit-Position: refs/heads/master@{#757956}
parent 15f6db59
...@@ -28,9 +28,19 @@ constexpr const char kGestureBackPage[] = "gestureBack"; ...@@ -28,9 +28,19 @@ constexpr const char kGestureBackPage[] = "gestureBack";
} // namespace } // namespace
// static
std::string GestureNavigationScreen::GetResultString(Result result) {
switch (result) {
case Result::NEXT:
return "Next";
case Result::NOT_APPLICABLE:
return BaseScreen::kNotApplicable;
}
}
GestureNavigationScreen::GestureNavigationScreen( GestureNavigationScreen::GestureNavigationScreen(
GestureNavigationScreenView* view, GestureNavigationScreenView* view,
const base::RepeatingClosure& exit_callback) const ScreenExitCallback& exit_callback)
: BaseScreen(GestureNavigationScreenView::kScreenId, : BaseScreen(GestureNavigationScreenView::kScreenId,
OobeScreenPriority::DEFAULT), OobeScreenPriority::DEFAULT),
view_(view), view_(view),
...@@ -50,7 +60,7 @@ void GestureNavigationScreen::GesturePageChange(const std::string& new_page) { ...@@ -50,7 +60,7 @@ void GestureNavigationScreen::GesturePageChange(const std::string& new_page) {
current_page_ = new_page; current_page_ = new_page;
} }
void GestureNavigationScreen::ShowImpl() { bool GestureNavigationScreen::MaybeSkip() {
AccessibilityManager* accessibility_manager = AccessibilityManager::Get(); AccessibilityManager* accessibility_manager = AccessibilityManager::Get();
if (chrome_user_manager_util::IsPublicSessionOrEphemeralLogin() || if (chrome_user_manager_util::IsPublicSessionOrEphemeralLogin() ||
!ash::features::IsHideShelfControlsInTabletModeEnabled() || !ash::features::IsHideShelfControlsInTabletModeEnabled() ||
...@@ -59,18 +69,21 @@ void GestureNavigationScreen::ShowImpl() { ...@@ -59,18 +69,21 @@ void GestureNavigationScreen::ShowImpl() {
accessibility_manager->IsSpokenFeedbackEnabled() || accessibility_manager->IsSpokenFeedbackEnabled() ||
accessibility_manager->IsAutoclickEnabled() || accessibility_manager->IsAutoclickEnabled() ||
accessibility_manager->IsSwitchAccessEnabled()) { accessibility_manager->IsSwitchAccessEnabled()) {
exit_callback_.Run(); exit_callback_.Run(Result::NOT_APPLICABLE);
return; return true;
} }
// Skip the screen if the device is not in tablet mode, unless tablet mode // Skip the screen if the device is not in tablet mode, unless tablet mode
// first user run is forced on the device. // first user run is forced on the device.
if (!ash::TabletMode::Get()->InTabletMode() && if (!ash::TabletMode::Get()->InTabletMode() &&
!chromeos::switches::ShouldOobeUseTabletModeFirstRun()) { !chromeos::switches::ShouldOobeUseTabletModeFirstRun()) {
exit_callback_.Run(); exit_callback_.Run(Result::NOT_APPLICABLE);
return; return true;
} }
return false;
}
void GestureNavigationScreen::ShowImpl() {
// Begin keeping track of current page and start time for the page shown time // Begin keeping track of current page and start time for the page shown time
// metrics. // metrics.
current_page_ = kGestureIntroPage; current_page_ = kGestureIntroPage;
...@@ -91,7 +104,7 @@ void GestureNavigationScreen::OnUserAction(const std::string& action_id) { ...@@ -91,7 +104,7 @@ void GestureNavigationScreen::OnUserAction(const std::string& action_id) {
ash::prefs::kGestureEducationNotificationShown, true); ash::prefs::kGestureEducationNotificationShown, true);
RecordPageShownTimeMetrics(); RecordPageShownTimeMetrics();
exit_callback_.Run(); exit_callback_.Run(Result::NEXT);
} else { } else {
BaseScreen::OnUserAction(action_id); BaseScreen::OnUserAction(action_id);
} }
......
...@@ -17,21 +17,32 @@ namespace chromeos { ...@@ -17,21 +17,32 @@ namespace chromeos {
// The OOBE screen dedicated to gesture navigation education. // The OOBE screen dedicated to gesture navigation education.
class GestureNavigationScreen : public BaseScreen { class GestureNavigationScreen : public BaseScreen {
public: public:
enum class Result { NEXT, NOT_APPLICABLE };
static std::string GetResultString(Result result);
using ScreenExitCallback = base::RepeatingCallback<void(Result result)>;
GestureNavigationScreen(GestureNavigationScreenView* view, GestureNavigationScreen(GestureNavigationScreenView* view,
const base::RepeatingClosure& exit_callback); const ScreenExitCallback& exit_callback);
~GestureNavigationScreen() override; ~GestureNavigationScreen() override;
GestureNavigationScreen(const GestureNavigationScreen&) = delete; GestureNavigationScreen(const GestureNavigationScreen&) = delete;
GestureNavigationScreen operator=(const GestureNavigationScreen&) = delete; GestureNavigationScreen operator=(const GestureNavigationScreen&) = delete;
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_;
}
// Called when the currently shown page is changed. // Called when the currently shown page is changed.
void GesturePageChange(const std::string& new_page); void GesturePageChange(const std::string& new_page);
// BaseScreen:
bool MaybeSkip() override;
protected: protected:
// BaseScreen: // BaseScreen:
void ShowImpl() override; void ShowImpl() override;
...@@ -43,7 +54,7 @@ class GestureNavigationScreen : public BaseScreen { ...@@ -43,7 +54,7 @@ class GestureNavigationScreen : public BaseScreen {
void RecordPageShownTimeMetrics(); void RecordPageShownTimeMetrics();
GestureNavigationScreenView* view_; GestureNavigationScreenView* view_;
base::RepeatingClosure exit_callback_; ScreenExitCallback exit_callback_;
// Used to keep track of the current elapsed time that each page has been // Used to keep track of the current elapsed time that each page has been
// shown for. // shown for.
......
...@@ -54,10 +54,10 @@ class GestureNavigationScreenTest ...@@ -54,10 +54,10 @@ class GestureNavigationScreenTest
static_cast<GestureNavigationScreen*>( static_cast<GestureNavigationScreen*>(
WizardController::default_controller()->screen_manager()->GetScreen( WizardController::default_controller()->screen_manager()->GetScreen(
GestureNavigationScreenView::kScreenId)); GestureNavigationScreenView::kScreenId));
original_callback_ = gesture_screen->get_exit_callback_for_testing();
gesture_screen->set_exit_callback_for_testing( gesture_screen->set_exit_callback_for_testing(
base::BindRepeating(&GestureNavigationScreenTest::HandleScreenExit, base::BindRepeating(&GestureNavigationScreenTest::HandleScreenExit,
base::Unretained(this))); base::Unretained(this)));
OobeBaseTest::SetUpOnMainThread(); OobeBaseTest::SetUpOnMainThread();
} }
...@@ -106,14 +106,19 @@ class GestureNavigationScreenTest ...@@ -106,14 +106,19 @@ class GestureNavigationScreenTest
run_loop.Run(); run_loop.Run();
} }
base::Optional<GestureNavigationScreen::Result> screen_result_;
base::HistogramTester histogram_tester_;
private: private:
void HandleScreenExit() { void HandleScreenExit(GestureNavigationScreen::Result result) {
ASSERT_FALSE(screen_exited_); ASSERT_FALSE(screen_exited_);
screen_exited_ = true; screen_exited_ = 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();
} }
GestureNavigationScreen::ScreenExitCallback original_callback_;
bool screen_exited_ = false; bool screen_exited_ = false;
base::RepeatingClosure screen_exit_callback_; base::RepeatingClosure screen_exit_callback_;
base::test::ScopedFeatureList feature_list_; base::test::ScopedFeatureList feature_list_;
...@@ -166,6 +171,11 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, FlowTest) { ...@@ -166,6 +171,11 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, FlowTest) {
test::OobeJS().TapOnPath({"gesture-navigation", "gesture-back-next-button"}); test::OobeJS().TapOnPath({"gesture-navigation", "gesture-back-next-button"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), GestureNavigationScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 1);
} }
// Ensure the flow is skipped when in clamshell mode. // Ensure the flow is skipped when in clamshell mode.
...@@ -176,6 +186,8 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ScreenSkippedInClamshell) { ...@@ -176,6 +186,8 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ScreenSkippedInClamshell) {
if (ShouldBeSkippedInClamshell()) { if (ShouldBeSkippedInClamshell()) {
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
GestureNavigationScreen::Result::NOT_APPLICABLE);
} else { } else {
OobeScreenWaiter(GestureNavigationScreenView::kScreenId).Wait(); OobeScreenWaiter(GestureNavigationScreenView::kScreenId).Wait();
} }
...@@ -189,6 +201,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ...@@ -189,6 +201,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest,
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
GestureNavigationScreen::Result::NOT_APPLICABLE);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 0);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 0);
} }
// Ensure the flow is skipped when autoclick is enabled. // Ensure the flow is skipped when autoclick is enabled.
...@@ -199,6 +217,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ...@@ -199,6 +217,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest,
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
GestureNavigationScreen::Result::NOT_APPLICABLE);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 0);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 0);
} }
// Ensure the flow is skipped when switch access is enabled. // Ensure the flow is skipped when switch access is enabled.
...@@ -209,6 +233,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ...@@ -209,6 +233,12 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest,
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
GestureNavigationScreen::Result::NOT_APPLICABLE);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 0);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 0);
} }
// Ensure the flow is skipped when shelf navigation buttons are enabled. // Ensure the flow is skipped when shelf navigation buttons are enabled.
...@@ -220,13 +250,17 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, ...@@ -220,13 +250,17 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest,
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(),
GestureNavigationScreen::Result::NOT_APPLICABLE);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 0);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 0);
} }
// Ensure the page shown time metrics are being recorded during the gesture // Ensure the page shown time metrics are being recorded during the gesture
// navigation screen flow // navigation screen flow
IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) { IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) {
base::HistogramTester histogram_tester_;
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
OobeScreenWaiter(GestureNavigationScreenView::kScreenId).Wait(); OobeScreenWaiter(GestureNavigationScreenView::kScreenId).Wait();
...@@ -244,6 +278,7 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) { ...@@ -244,6 +278,7 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) {
test::OobeJS().TapOnPath({"gesture-navigation", "gesture-back-next-button"}); test::OobeJS().TapOnPath({"gesture-navigation", "gesture-back-next-button"});
WaitForScreenExit(); WaitForScreenExit();
EXPECT_EQ(screen_result_.value(), GestureNavigationScreen::Result::NEXT);
histogram_tester_.ExpectTotalCount( histogram_tester_.ExpectTotalCount(
"OOBE.GestureNavigationScreen.PageShownTime.Intro", 1); "OOBE.GestureNavigationScreen.PageShownTime.Intro", 1);
...@@ -253,6 +288,10 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) { ...@@ -253,6 +288,10 @@ IN_PROC_BROWSER_TEST_P(GestureNavigationScreenTest, PageShownMetricsTest) {
"OOBE.GestureNavigationScreen.PageShownTime.Overview", 1); "OOBE.GestureNavigationScreen.PageShownTime.Overview", 1);
histogram_tester_.ExpectTotalCount( histogram_tester_.ExpectTotalCount(
"OOBE.GestureNavigationScreen.PageShownTime.Back", 1); "OOBE.GestureNavigationScreen.PageShownTime.Back", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTimeByExitReason.Gesture-navigation.Next", 1);
histogram_tester_.ExpectTotalCount(
"OOBE.StepCompletionTime.Gesture-navigation", 1);
} }
} // namespace chromeos } // namespace chromeos
...@@ -1200,8 +1200,10 @@ void WizardController::OnMultiDeviceSetupScreenExit() { ...@@ -1200,8 +1200,10 @@ void WizardController::OnMultiDeviceSetupScreenExit() {
ShowGestureNavigationScreen(); ShowGestureNavigationScreen();
} }
void WizardController::OnGestureNavigationScreenExit() { void WizardController::OnGestureNavigationScreenExit(
OnScreenExit(GestureNavigationScreenView::kScreenId, kDefaultExitReason); GestureNavigationScreen::Result result) {
OnScreenExit(GestureNavigationScreenView::kScreenId,
GestureNavigationScreen::GetResultString(result));
ShowMarketingOptInScreen(); ShowMarketingOptInScreen();
} }
......
...@@ -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/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"
#include "chrome/browser/chromeos/login/screens/packaged_license_screen.h" #include "chrome/browser/chromeos/login/screens/packaged_license_screen.h"
...@@ -248,7 +249,7 @@ class WizardController { ...@@ -248,7 +249,7 @@ class WizardController {
void OnAppDownloadingScreenExit(); void OnAppDownloadingScreenExit();
void OnAssistantOptInFlowScreenExit(); void OnAssistantOptInFlowScreenExit();
void OnMultiDeviceSetupScreenExit(); void OnMultiDeviceSetupScreenExit();
void OnGestureNavigationScreenExit(); void OnGestureNavigationScreenExit(GestureNavigationScreen::Result result);
void OnMarketingOptInScreenExit(); void OnMarketingOptInScreenExit();
void OnResetScreenExit(); void OnResetScreenExit();
void OnDeviceModificationCanceled(); void OnDeviceModificationCanceled();
......
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