Commit 1de54d4e authored by Aga Wronska's avatar Aga Wronska Committed by Commit Bot

Disallow demo mode on devices that do not support ARC++.

Bug: 868105
Test: DemoSetupTest, DemoSetupArcUnsupportedTest
Change-Id: I5b4616c620dabf11704a02fd9345e22515e5a373
Reviewed-on: https://chromium-review.googlesource.com/1164560
Commit-Queue: Aga Wronska <agawronska@chromium.org>
Reviewed-by: default avatarToni Baržić <tbarzic@chromium.org>
Reviewed-by: default avatarMichael Giuffrida <michaelpg@chromium.org>
Reviewed-by: default avatarJacob Dufault <jdufault@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583137}
parent 1b8c3298
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/task/post_task.h" #include "base/task/post_task.h"
...@@ -18,6 +19,8 @@ ...@@ -18,6 +19,8 @@
#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
#include "chrome/browser/chromeos/policy/enrollment_config.h" #include "chrome/browser/chromeos/policy/enrollment_config.h"
#include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
#include "chromeos/chromeos_switches.h"
#include "components/arc/arc_util.h"
#include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/google_service_auth_error.h"
namespace { namespace {
...@@ -95,6 +98,22 @@ namespace chromeos { ...@@ -95,6 +98,22 @@ namespace chromeos {
// static // static
constexpr char DemoSetupController::kDemoModeDomain[]; constexpr char DemoSetupController::kDemoModeDomain[];
// static
bool DemoSetupController::IsDemoModeAllowed() {
// Demo mode is only allowed on devices that support ARC++.
return arc::IsArcAvailable() &&
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableDemoMode);
}
// static
bool DemoSetupController::IsOfflineDemoModeAllowed() {
// Offline demo mode can be only enabled when demo mode feature is enabled.
return IsDemoModeAllowed() &&
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableOfflineDemoMode);
}
// static // static
bool DemoSetupController::IsOobeDemoSetupFlowInProgress() { bool DemoSetupController::IsOobeDemoSetupFlowInProgress() {
const WizardController* const wizard_controller = const WizardController* const wizard_controller =
......
...@@ -48,6 +48,13 @@ class DemoSetupController ...@@ -48,6 +48,13 @@ class DemoSetupController
// Domain that demo mode devices are enrolled into. // Domain that demo mode devices are enrolled into.
static constexpr char kDemoModeDomain[] = "cros-demo-mode.com"; static constexpr char kDemoModeDomain[] = "cros-demo-mode.com";
// Utility method that returns whether demo mode is allowed on the device.
static bool IsDemoModeAllowed();
// Utility method that returns whether offline demo mode is allowed on the
// device.
static bool IsOfflineDemoModeAllowed();
// Utility method that returns whether demo mode setup flow is in progress in // Utility method that returns whether demo mode setup flow is in progress in
// OOBE. // OOBE.
static bool IsOobeDemoSetupFlowInProgress(); static bool IsOobeDemoSetupFlowInProgress();
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "chromeos/network/network_handler.h" #include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state.h" #include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_state_handler.h"
#include "components/arc/arc_util.h"
#include "components/policy/core/common/cloud/mock_cloud_policy_store.h" #include "components/policy/core/common/cloud/mock_cloud_policy_store.h"
#include "content/public/test/browser_test_utils.h" #include "content/public/test/browser_test_utils.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
...@@ -57,6 +58,8 @@ constexpr char kDefaultNetworkName[] = "eth1"; ...@@ -57,6 +58,8 @@ constexpr char kDefaultNetworkName[] = "eth1";
constexpr base::TimeDelta kJsConditionCheckFrequency = constexpr base::TimeDelta kJsConditionCheckFrequency =
base::TimeDelta::FromMilliseconds(10); base::TimeDelta::FromMilliseconds(10);
constexpr int kInvokeDemoModeGestureTapsCount = 10;
// How js query is executed. // How js query is executed.
enum class JSExecution { kSync, kAsync }; enum class JSExecution { kSync, kAsync };
...@@ -169,6 +172,9 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -169,6 +172,9 @@ class DemoSetupTest : public LoginManagerTest {
LoginManagerTest::SetUpCommandLine(command_line); LoginManagerTest::SetUpCommandLine(command_line);
command_line->AppendSwitch(chromeos::switches::kEnableDemoMode); command_line->AppendSwitch(chromeos::switches::kEnableDemoMode);
command_line->AppendSwitch(chromeos::switches::kEnableOfflineDemoMode); command_line->AppendSwitch(chromeos::switches::kEnableOfflineDemoMode);
command_line->AppendSwitchASCII(switches::kArcAvailability,
"officially-supported");
ASSERT_TRUE(arc::IsArcAvailable());
} }
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
...@@ -238,10 +244,14 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -238,10 +244,14 @@ class DemoSetupTest : public LoginManagerTest {
"Play Store Terms of Service');")); "Play Store Terms of Service');"));
} }
void InvokeDemoMode() { void InvokeDemoModeWithAccelerator() {
EXPECT_TRUE(JSExecute("cr.ui.Oobe.handleAccelerator('demo_mode');")); EXPECT_TRUE(JSExecute("cr.ui.Oobe.handleAccelerator('demo_mode');"));
} }
void InvokeDemoModeWithTaps() {
MultiTapOobeContainer(kInvokeDemoModeGestureTapsCount);
}
// Simulates multi-tap gesture that consists of |tapCount| clicks on the OOBE // Simulates multi-tap gesture that consists of |tapCount| clicks on the OOBE
// outer-container. // outer-container.
void MultiTapOobeContainer(int tapsCount) { void MultiTapOobeContainer(int tapsCount) {
...@@ -459,7 +469,7 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -459,7 +469,7 @@ class DemoSetupTest : public LoginManagerTest {
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndProceed) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndProceed) {
EXPECT_FALSE(IsConfirmationDialogShown()); EXPECT_FALSE(IsConfirmationDialogShown());
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
EXPECT_TRUE(IsConfirmationDialogShown()); EXPECT_TRUE(IsConfirmationDialogShown());
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
...@@ -471,7 +481,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndProceed) { ...@@ -471,7 +481,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndProceed) {
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndCancel) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowConfirmationDialogAndCancel) {
EXPECT_FALSE(IsConfirmationDialogShown()); EXPECT_FALSE(IsConfirmationDialogShown());
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
EXPECT_TRUE(IsConfirmationDialogShown()); EXPECT_TRUE(IsConfirmationDialogShown());
ClickCancelOnConfirmationDialog(); ClickCancelOnConfirmationDialog();
...@@ -513,7 +523,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) { ...@@ -513,7 +523,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) {
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
SimulateNetworkConnected(); SimulateNetworkConnected();
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
...@@ -563,7 +573,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -563,7 +573,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
SimulateNetworkConnected(); SimulateNetworkConnected();
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
...@@ -614,7 +624,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) { ...@@ -614,7 +624,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
DemoModeSetupResult::SUCCESS>); DemoModeSetupResult::SUCCESS>);
SimulateNetworkDisconnected(); SimulateNetworkDisconnected();
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
// It needs to be done after demo setup controller was created (demo setup // It needs to be done after demo setup controller was created (demo setup
...@@ -658,7 +668,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -658,7 +668,7 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
&MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
SimulateNetworkDisconnected(); SimulateNetworkDisconnected();
InvokeDemoMode(); InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
// It needs to be done after demo setup controller was created (demo setup // It needs to be done after demo setup controller was created (demo setup
...@@ -814,4 +824,38 @@ IN_PROC_BROWSER_TEST_F(DemoSetupOfflineDisabledTest, ...@@ -814,4 +824,38 @@ IN_PROC_BROWSER_TEST_F(DemoSetupOfflineDisabledTest,
EXPECT_FALSE(IsCustomNetworkListElementShown("offlineDemoSetupListItemName")); EXPECT_FALSE(IsCustomNetworkListElementShown("offlineDemoSetupListItemName"));
} }
class DemoSetupArcUnsupportedTest : public DemoSetupTest {
public:
DemoSetupArcUnsupportedTest() = default;
~DemoSetupArcUnsupportedTest() override = default;
// DemoSetupTest:
void SetUpCommandLine(base::CommandLine* command_line) override {
LoginManagerTest::SetUpCommandLine(command_line);
command_line->AppendSwitch(chromeos::switches::kEnableDemoMode);
command_line->AppendSwitch(chromeos::switches::kEnableOfflineDemoMode);
command_line->AppendSwitchASCII(switches::kArcAvailability, "none");
ASSERT_FALSE(arc::IsArcAvailable());
}
private:
DISALLOW_COPY_AND_ASSIGN(DemoSetupArcUnsupportedTest);
};
IN_PROC_BROWSER_TEST_F(DemoSetupArcUnsupportedTest, DoNotStartWithAccelerator) {
EXPECT_FALSE(IsConfirmationDialogShown());
InvokeDemoModeWithAccelerator();
EXPECT_FALSE(IsConfirmationDialogShown());
}
IN_PROC_BROWSER_TEST_F(DemoSetupArcUnsupportedTest, DoNotInvokeWithTaps) {
EXPECT_FALSE(IsConfirmationDialogShown());
InvokeDemoModeWithTaps();
EXPECT_FALSE(IsConfirmationDialogShown());
}
} // namespace chromeos } // namespace chromeos
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
#include "ash/public/interfaces/event_rewriter_controller.mojom.h" #include "ash/public/interfaces/event_rewriter_controller.mojom.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/browser/chromeos/accessibility/magnification_manager.h" #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
#include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/lock/screen_locker.h" #include "chrome/browser/chromeos/login/lock/screen_locker.h"
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
#include "chrome/grit/chromium_strings.h" #include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/chromeos_constants.h" #include "chromeos/chromeos_constants.h"
#include "chromeos/chromeos_switches.h"
#include "components/login/base_screen_handler_utils.h" #include "components/login/base_screen_handler_utils.h"
#include "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -180,9 +179,8 @@ void CoreOobeHandler::Initialize() { ...@@ -180,9 +179,8 @@ void CoreOobeHandler::Initialize() {
void CoreOobeHandler::GetAdditionalParameters(base::DictionaryValue* dict) { void CoreOobeHandler::GetAdditionalParameters(base::DictionaryValue* dict) {
dict->SetKey("isInTabletMode", dict->SetKey("isInTabletMode",
base::Value(TabletModeClient::Get()->tablet_mode_enabled())); base::Value(TabletModeClient::Get()->tablet_mode_enabled()));
bool is_demo_mode_enabled = base::CommandLine::ForCurrentProcess()->HasSwitch( dict->SetKey("isDemoModeEnabled",
switches::kEnableDemoMode); base::Value(DemoSetupController::IsDemoModeAllowed()));
dict->SetKey("isDemoModeEnabled", base::Value(is_demo_mode_enabled));
} }
void CoreOobeHandler::RegisterMessages() { void CoreOobeHandler::RegisterMessages() {
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <stddef.h> #include <stddef.h>
#include "base/command_line.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include "chrome/browser/chromeos/login/screens/core_oobe_view.h" #include "chrome/browser/chromeos/login/screens/core_oobe_view.h"
...@@ -14,7 +13,6 @@ ...@@ -14,7 +13,6 @@
#include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h" #include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/network/network_handler.h" #include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_state_handler.h"
#include "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
...@@ -102,12 +100,8 @@ void NetworkScreenHandler::DeclareLocalizedValues( ...@@ -102,12 +100,8 @@ void NetworkScreenHandler::DeclareLocalizedValues(
void NetworkScreenHandler::GetAdditionalParameters( void NetworkScreenHandler::GetAdditionalParameters(
base::DictionaryValue* dict) { base::DictionaryValue* dict) {
const auto* const command_line = base::CommandLine::ForCurrentProcess(); dict->SetBoolean("offlineDemoModeEnabled",
// Offline demo mode can be only enabled when demo mode feature is enabled. DemoSetupController::IsOfflineDemoModeAllowed());
const bool is_offline_demo_mode_enabled =
command_line->HasSwitch(switches::kEnableDemoMode) &&
command_line->HasSwitch(switches::kEnableOfflineDemoMode);
dict->SetBoolean("offlineDemoModeEnabled", is_offline_demo_mode_enabled);
} }
void NetworkScreenHandler::Initialize() { void NetworkScreenHandler::Initialize() {
......
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