Commit 16d88668 authored by Michael Giuffrida's avatar Michael Giuffrida Committed by Commit Bot

Install demo mode resources CrOS component during demo setup

Register and download the demo mode resources CrOS component during
online demo mode setup. This happens before online enrollment starts.

Also updates offline-enrolled Demo Mode to always use the offline
resources image instead of attempting to download the CrOS component.

Bug: 869455
Change-Id: I6a947eab916f68bba4730a9ab611136be7fe1bc1
Reviewed-on: https://chromium-review.googlesource.com/1198018
Commit-Queue: Michael Giuffrida <michaelpg@chromium.org>
Reviewed-by: default avatarAga Wronska <agawronska@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589355}
parent e6de331b
...@@ -176,7 +176,8 @@ class DemoExtensionsExternalLoaderTest : public testing::Test { ...@@ -176,7 +176,8 @@ class DemoExtensionsExternalLoaderTest : public testing::Test {
bool wait_for_offline_resources_load) { bool wait_for_offline_resources_load) {
if (mount_demo_resources) { if (mount_demo_resources) {
image_loader_client_->SetMountPathForComponent( image_loader_client_->SetMountPathForComponent(
"demo-mode-resources", offline_demo_resources_.GetPath()); DemoSession::kDemoModeResourcesComponentName,
offline_demo_resources_.GetPath());
} }
ASSERT_TRUE(DemoSession::StartIfInDemoMode()); ASSERT_TRUE(DemoSession::StartIfInDemoMode());
......
...@@ -68,9 +68,10 @@ class DemoModeResourcesRemoverTest : public testing::Test { ...@@ -68,9 +68,10 @@ class DemoModeResourcesRemoverTest : public testing::Test {
ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
components_path_override_ = std::make_unique<base::ScopedPathOverride>( components_path_override_ = std::make_unique<base::ScopedPathOverride>(
chromeos::DIR_PREINSTALLED_COMPONENTS, scoped_temp_dir_.GetPath()); chromeos::DIR_PREINSTALLED_COMPONENTS, scoped_temp_dir_.GetPath());
demo_resources_path_ = scoped_temp_dir_.GetPath() demo_resources_path_ =
.AppendASCII("cros-components") scoped_temp_dir_.GetPath()
.AppendASCII("demo-mode-resources"); .AppendASCII("cros-components")
.AppendASCII(DemoSession::kDemoModeResourcesComponentName);
scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>( scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
std::make_unique<FakeChromeUserManager>()); std::make_unique<FakeChromeUserManager>());
......
...@@ -48,9 +48,6 @@ DemoSession* g_demo_session = nullptr; ...@@ -48,9 +48,6 @@ DemoSession* g_demo_session = nullptr;
// Type of demo config forced on for tests. // Type of demo config forced on for tests.
base::Optional<DemoSession::DemoModeConfig> g_force_demo_config; base::Optional<DemoSession::DemoModeConfig> g_force_demo_config;
// The name of the offline demo resource image loader component.
constexpr char kDemoResourcesComponentName[] = "demo-mode-resources";
// Path relative to the path at which offline demo resources are loaded that // Path relative to the path at which offline demo resources are loaded that
// contains image with demo Android apps. // contains image with demo Android apps.
constexpr base::FilePath::CharType kDemoAppsPath[] = constexpr base::FilePath::CharType kDemoAppsPath[] =
...@@ -120,13 +117,17 @@ std::string GetHighlightsAppId() { ...@@ -120,13 +117,17 @@ std::string GetHighlightsAppId() {
} // namespace } // namespace
// static
const char DemoSession::kDemoModeResourcesComponentName[] =
"demo-mode-resources";
// static // static
base::FilePath DemoSession::GetPreInstalledDemoResourcesPath() { base::FilePath DemoSession::GetPreInstalledDemoResourcesPath() {
base::FilePath preinstalled_components_root; base::FilePath preinstalled_components_root;
base::PathService::Get(DIR_PREINSTALLED_COMPONENTS, base::PathService::Get(DIR_PREINSTALLED_COMPONENTS,
&preinstalled_components_root); &preinstalled_components_root);
return preinstalled_components_root.AppendASCII("cros-components") return preinstalled_components_root.AppendASCII("cros-components")
.AppendASCII(kDemoResourcesComponentName); .AppendASCII(kDemoModeResourcesComponentName);
} }
// static // static
...@@ -257,11 +258,16 @@ void DemoSession::EnsureOfflineResourcesLoaded( ...@@ -257,11 +258,16 @@ void DemoSession::EnsureOfflineResourcesLoaded(
return; return;
offline_resources_load_requested_ = true; offline_resources_load_requested_ = true;
if (offline_enrolled_) {
LoadPreinstalledOfflineResources();
return;
}
component_updater::CrOSComponentManager* cros_component_manager = component_updater::CrOSComponentManager* cros_component_manager =
g_browser_process->platform_part()->cros_component_manager(); g_browser_process->platform_part()->cros_component_manager();
if (cros_component_manager) { if (cros_component_manager) {
g_browser_process->platform_part()->cros_component_manager()->Load( g_browser_process->platform_part()->cros_component_manager()->Load(
kDemoResourcesComponentName, kDemoModeResourcesComponentName,
component_updater::CrOSComponentManager::MountPolicy::kMount, component_updater::CrOSComponentManager::MountPolicy::kMount,
component_updater::CrOSComponentManager::UpdatePolicy::kSkip, component_updater::CrOSComponentManager::UpdatePolicy::kSkip,
base::BindOnce(&DemoSession::InstalledComponentLoaded, base::BindOnce(&DemoSession::InstalledComponentLoaded,
...@@ -270,6 +276,8 @@ void DemoSession::EnsureOfflineResourcesLoaded( ...@@ -270,6 +276,8 @@ void DemoSession::EnsureOfflineResourcesLoaded(
// Cros component manager may be unset in tests - if that is the case, // Cros component manager may be unset in tests - if that is the case,
// report component install failure, so DemoSession attempts loading the // report component install failure, so DemoSession attempts loading the
// component directly from the pre-installed component path. // component directly from the pre-installed component path.
// TODO(michaelpg): Rework tests to require the online component to load in
// online-enrolled demo mode.
InstalledComponentLoaded( InstalledComponentLoaded(
component_updater::CrOSComponentManager::Error::INSTALL_FAILURE, component_updater::CrOSComponentManager::Error::INSTALL_FAILURE,
base::FilePath()); base::FilePath());
...@@ -341,10 +349,14 @@ void DemoSession::InstalledComponentLoaded( ...@@ -341,10 +349,14 @@ void DemoSession::InstalledComponentLoaded(
return; return;
} }
LoadPreinstalledOfflineResources();
}
void DemoSession::LoadPreinstalledOfflineResources() {
chromeos::DBusThreadManager::Get() chromeos::DBusThreadManager::Get()
->GetImageLoaderClient() ->GetImageLoaderClient()
->LoadComponentAtPath( ->LoadComponentAtPath(
kDemoResourcesComponentName, GetPreInstalledDemoResourcesPath(), kDemoModeResourcesComponentName, GetPreInstalledDemoResourcesPath(),
base::BindOnce(&DemoSession::OnOfflineResourcesLoaded, base::BindOnce(&DemoSession::OnOfflineResourcesLoaded,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
} }
......
...@@ -29,6 +29,7 @@ namespace chromeos { ...@@ -29,6 +29,7 @@ namespace chromeos {
// Tracks global demo session state. For example, whether the demo session has // Tracks global demo session state. For example, whether the demo session has
// started, and whether the demo session offline resources have been loaded. // started, and whether the demo session offline resources have been loaded.
// TODO(michaelpg): Componentize the logic for providing offline resources.
class DemoSession : public session_manager::SessionManagerObserver, class DemoSession : public session_manager::SessionManagerObserver,
extensions::ExtensionRegistryObserver { extensions::ExtensionRegistryObserver {
public: public:
...@@ -48,6 +49,10 @@ class DemoSession : public session_manager::SessionManagerObserver, ...@@ -48,6 +49,10 @@ class DemoSession : public session_manager::SessionManagerObserver,
kLast = kOffline, kLast = kOffline,
}; };
// The name of the demo mode resources CrOS component or preinstalled
// imageloader image.
static const char kDemoModeResourcesComponentName[];
// Location on disk where pre-installed demo mode resources are expected to be // Location on disk where pre-installed demo mode resources are expected to be
// found. // found.
static base::FilePath GetPreInstalledDemoResourcesPath(); static base::FilePath GetPreInstalledDemoResourcesPath();
...@@ -140,6 +145,9 @@ class DemoSession : public session_manager::SessionManagerObserver, ...@@ -140,6 +145,9 @@ class DemoSession : public session_manager::SessionManagerObserver,
component_updater::CrOSComponentManager::Error error, component_updater::CrOSComponentManager::Error error,
const base::FilePath& path); const base::FilePath& path);
// Loads the preinstalled offline resources image.
void LoadPreinstalledOfflineResources();
// Callback for the image loader request to load offline demo mode resources. // Callback for the image loader request to load offline demo mode resources.
// |mount_path| is the path at which the resources were loaded. // |mount_path| is the path at which the resources were loaded.
void OnOfflineResourcesLoaded(base::Optional<base::FilePath> mounted_path); void OnOfflineResourcesLoaded(base::Optional<base::FilePath> mounted_path);
......
...@@ -24,6 +24,8 @@ namespace chromeos { ...@@ -24,6 +24,8 @@ namespace chromeos {
namespace { namespace {
// TODO(michaelpg): Clean up tests for offline resources and differentiate
// between the CrOS component and the preinstalled resources image.
constexpr char kOfflineResourcesComponent[] = "demo-mode-resources"; constexpr char kOfflineResourcesComponent[] = "demo-mode-resources";
constexpr char kTestDemoModeResourcesMountPoint[] = constexpr char kTestDemoModeResourcesMountPoint[] =
"/run/imageloader/demo_mode_resources"; "/run/imageloader/demo_mode_resources";
......
...@@ -11,7 +11,9 @@ ...@@ -11,7 +11,9 @@
#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"
#include "base/threading/sequenced_task_runner_handle.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
...@@ -21,6 +23,7 @@ ...@@ -21,6 +23,7 @@
#include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chromeos/chromeos_switches.h" #include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "components/arc/arc_util.h" #include "components/arc/arc_util.h"
#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -155,7 +158,7 @@ void DemoSetupController::Enroll(OnSetupSuccess on_setup_success, ...@@ -155,7 +158,7 @@ void DemoSetupController::Enroll(OnSetupSuccess on_setup_success,
switch (demo_config_) { switch (demo_config_) {
case DemoSession::DemoModeConfig::kOnline: case DemoSession::DemoModeConfig::kOnline:
EnrollOnline(); LoadDemoResourcesCrOSComponent();
return; return;
case DemoSession::DemoModeConfig::kOffline: { case DemoSession::DemoModeConfig::kOffline: {
const base::FilePath offline_data_dir = const base::FilePath offline_data_dir =
...@@ -169,9 +172,40 @@ void DemoSetupController::Enroll(OnSetupSuccess on_setup_success, ...@@ -169,9 +172,40 @@ void DemoSetupController::Enroll(OnSetupSuccess on_setup_success,
} }
} }
void DemoSetupController::EnrollOnline() { void DemoSetupController::LoadDemoResourcesCrOSComponent() {
component_updater::CrOSComponentManager* cros_component_manager =
g_browser_process->platform_part()->cros_component_manager();
// In tests, use the desired error code.
if (!cros_component_manager ||
chromeos::DBusThreadManager::Get()->IsUsingFakes()) {
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&DemoSetupController::OnDemoResourcesCrOSComponentLoaded,
weak_ptr_factory_.GetWeakPtr(),
component_error_for_tests_, base::FilePath()));
return;
}
cros_component_manager->Load(
DemoSession::kDemoModeResourcesComponentName,
component_updater::CrOSComponentManager::MountPolicy::kMount,
component_updater::CrOSComponentManager::UpdatePolicy::kDontForce,
base::BindOnce(&DemoSetupController::OnDemoResourcesCrOSComponentLoaded,
weak_ptr_factory_.GetWeakPtr()));
}
void DemoSetupController::OnDemoResourcesCrOSComponentLoaded(
component_updater::CrOSComponentManager::Error error,
const base::FilePath& path) {
DCHECK_EQ(demo_config_, DemoSession::DemoModeConfig::kOnline); DCHECK_EQ(demo_config_, DemoSession::DemoModeConfig::kOnline);
if (error != component_updater::CrOSComponentManager::Error::NONE) {
SetupFailed("Failed to load demo resources CrOS component with error: " +
std::to_string(static_cast<int>(error)),
DemoSetupError::kRecoverable);
return;
}
policy::BrowserPolicyConnectorChromeOS* connector = policy::BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos(); g_browser_process->platform_part()->browser_policy_connector_chromeos();
connector->GetDeviceCloudPolicyManager()->SetDeviceRequisition( connector->GetDeviceCloudPolicyManager()->SetDeviceRequisition(
...@@ -277,6 +311,11 @@ void DemoSetupController::OnDeviceAttributeUpdatePermission(bool granted) { ...@@ -277,6 +311,11 @@ void DemoSetupController::OnDeviceAttributeUpdatePermission(bool granted) {
NOTREACHED(); NOTREACHED();
} }
void DemoSetupController::SetCrOSComponentLoadErrorForTest(
component_updater::CrOSComponentManager::Error error) {
component_error_for_tests_ = error;
}
void DemoSetupController::SetDeviceLocalAccountPolicyStoreForTest( void DemoSetupController::SetDeviceLocalAccountPolicyStoreForTest(
policy::CloudPolicyStore* store) { policy::CloudPolicyStore* store) {
device_local_account_policy_store_ = store; device_local_account_policy_store_ = store;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
#include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h" #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h"
#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
#include "components/policy/core/common/cloud/cloud_policy_store.h" #include "components/policy/core/common/cloud/cloud_policy_store.h"
class PrefRegistrySimple; class PrefRegistrySimple;
...@@ -84,13 +85,23 @@ class DemoSetupController ...@@ -84,13 +85,23 @@ class DemoSetupController
void OnMultipleLicensesAvailable( void OnMultipleLicensesAvailable(
const EnrollmentLicenseMap& licenses) override; const EnrollmentLicenseMap& licenses) override;
void SetCrOSComponentLoadErrorForTest(
component_updater::CrOSComponentManager::Error error);
void SetDeviceLocalAccountPolicyStoreForTest(policy::CloudPolicyStore* store); void SetDeviceLocalAccountPolicyStoreForTest(policy::CloudPolicyStore* store);
void SetOfflineDataDirForTest(const base::FilePath& offline_dir); void SetOfflineDataDirForTest(const base::FilePath& offline_dir);
private: private:
// Initiates online enrollment that registers and sets up the device in the // Attempts to load the CrOS component with demo resources for online
// demo mode domain. // enrollment and passes the result to OnDemoResourcesCrOSComponentLoaded().
void EnrollOnline(); void LoadDemoResourcesCrOSComponent();
// Callback to initiate online enrollment once the CrOS component has loaded.
// If the component loaded successfully, registers and sets up the device in
// the demo mode domain. If |error| indicates the component couldn't be
// loaded, demo setup will fail.
void OnDemoResourcesCrOSComponentLoaded(
component_updater::CrOSComponentManager::Error error,
const base::FilePath& path);
// Initiates offline enrollment that locks the device and sets up offline // Initiates offline enrollment that locks the device and sets up offline
// policies required by demo mode. It requires no network connectivity since // policies required by demo mode. It requires no network connectivity since
...@@ -123,6 +134,11 @@ class DemoSetupController ...@@ -123,6 +134,11 @@ class DemoSetupController
// Should be set explicitly. // Should be set explicitly.
DemoSession::DemoModeConfig demo_config_ = DemoSession::DemoModeConfig::kNone; DemoSession::DemoModeConfig demo_config_ = DemoSession::DemoModeConfig::kNone;
// Error code to use when attempting to load the demo resources CrOS
// component.
component_updater::CrOSComponentManager::Error component_error_for_tests_ =
component_updater::CrOSComponentManager::Error::NONE;
// Callback to call when enrollment finishes with an error. // Callback to call when enrollment finishes with an error.
OnSetupError on_setup_error_; OnSetupError on_setup_error_;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_test_utils.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_test_utils.h"
#include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chrome/browser/chromeos/settings/device_settings_service.h"
#include "chrome/browser/chromeos/settings/stub_install_attributes.h" #include "chrome/browser/chromeos/settings/stub_install_attributes.h"
#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
#include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/scoped_testing_local_state.h"
#include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_browser_process.h"
#include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/cryptohome/system_salt_getter.h"
...@@ -257,6 +258,24 @@ TEST_F(DemoSetupControllerTest, OnlineError) { ...@@ -257,6 +258,24 @@ TEST_F(DemoSetupControllerTest, OnlineError) {
EXPECT_FALSE(helper_->IsErrorFatal()); EXPECT_FALSE(helper_->IsErrorFatal());
} }
TEST_F(DemoSetupControllerTest, OnlineComponentError) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline);
tested_controller_->SetCrOSComponentLoadErrorForTest(
component_updater::CrOSComponentManager::Error::
COMPATIBILITY_CHECK_FAILED);
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(false));
EXPECT_FALSE(helper_->IsErrorFatal());
}
TEST_F(DemoSetupControllerTest, EnrollTwice) { TEST_F(DemoSetupControllerTest, EnrollTwice) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
#include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/chromeos_switches.h" #include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
...@@ -618,6 +619,62 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -618,6 +619,62 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
EXPECT_FALSE(StartupUtils::IsDeviceRegistered()); EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) {
// Simulate failure to load demo resources CrOS component.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
SimulateNetworkConnected();
InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog();
// Set the component to fail to install when requested.
WizardController::default_controller()
->demo_setup_controller()
->SetCrOSComponentLoadErrorForTest(
component_updater::CrOSComponentManager::Error::INSTALL_FAILURE);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
ClickOobeButton(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, OobeButton::kText,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_TRUE(IsScreenDialogElementEnabled(
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
OobeButton::kText, JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
// TODO(agawronska): Progress dialog transition is async - extra work is
// needed to be able to check it reliably.
WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError);
EXPECT_FALSE(StartupUtils::IsOobeCompleted());
EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
}
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
// Simulate offline setup success. // Simulate offline setup success.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
......
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