Commit 3bcccb0a authored by Aga Wronska's avatar Aga Wronska Committed by Commit Bot

Remove dev screen for choosing online/offline setup and run final

demo mode setup flow.

* Change DemoSetupController delegate into callback passed to Enroll()
* Pass info about enrollment type separately from Enroll() request
* Store DemoSetupController instance in WizardController instead of
  DemoSetupScreen for easier storage and access to demo setup flow status

Change-Id: I43f2f28dfc2daea519849d222ea5a73561522516
Bug: 862445
Test: Run DemoSetupTest, DemoSetupControllerTest and wizard_controller_browsertest.
Reviewed-on: https://chromium-review.googlesource.com/1155152
Commit-Queue: Aga Wronska <agawronska@chromium.org>
Reviewed-by: default avatarMichael Giuffrida <michaelpg@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Cr-Commit-Position: refs/heads/master@{#580937}
parent 85d4d667
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h"
#include "chrome/browser/chromeos/arc/policy/arc_policy_util.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_util.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.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/user_flow.h" #include "chrome/browser/chromeos/login/user_flow.h"
#include "chrome/browser/chromeos/login/users/chrome_user_manager.h" #include "chrome/browser/chromeos/login/users/chrome_user_manager.h"
...@@ -553,14 +554,7 @@ bool IsArcStatsReportingEnabled() { ...@@ -553,14 +554,7 @@ bool IsArcStatsReportingEnabled() {
} }
bool IsArcDemoModeSetupFlow() { bool IsArcDemoModeSetupFlow() {
chromeos::LoginDisplayHost* const host = return chromeos::DemoSetupController::IsOobeDemoSetupFlowInProgress();
chromeos::LoginDisplayHost::default_host();
if (!host)
return false;
const chromeos::WizardController* const wizard_controller =
host->GetWizardController();
return wizard_controller && wizard_controller->is_in_demo_mode_setup_flow();
} }
void UpdateArcFileSystemCompatibilityPrefIfNeeded( void UpdateArcFileSystemCompatibilityPrefIfNeeded(
......
// Copyright (c) 2018 The Chromium Authors. All rights reserved. // Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include <string> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
...@@ -26,6 +26,11 @@ constexpr char kOfflineDevicePolicyFileName[] = "device_policy"; ...@@ -26,6 +26,11 @@ constexpr char kOfflineDevicePolicyFileName[] = "device_policy";
constexpr char kOfflineDeviceLocalAccountPolicyFileName[] = constexpr char kOfflineDeviceLocalAccountPolicyFileName[] =
"local_account_policy"; "local_account_policy";
// The policy blob data for offline demo-mode is embedded into the filesystem.
// TODO(mukai, agawronska): fix this when switching to dm-verity image.
constexpr const base::FilePath::CharType kOfflineDemoModeDir[] =
FILE_PATH_LITERAL("/usr/share/chromeos-assets/demo_mode_resources/policy");
bool CheckOfflinePolicyFilesExist(const base::FilePath& policy_dir, bool CheckOfflinePolicyFilesExist(const base::FilePath& policy_dir,
std::string* message) { std::string* message) {
base::FilePath device_policy_path = base::FilePath device_policy_path =
...@@ -93,22 +98,48 @@ constexpr char DemoSetupController::kDemoModeDomain[]; ...@@ -93,22 +98,48 @@ constexpr char DemoSetupController::kDemoModeDomain[];
bool DemoSetupController::IsOobeDemoSetupFlowInProgress() { bool DemoSetupController::IsOobeDemoSetupFlowInProgress() {
const WizardController* const wizard_controller = const WizardController* const wizard_controller =
WizardController::default_controller(); WizardController::default_controller();
return wizard_controller && wizard_controller->is_in_demo_mode_setup_flow(); return wizard_controller &&
wizard_controller->demo_setup_controller() != nullptr;
} }
DemoSetupController::DemoSetupController(Delegate* delegate) DemoSetupController::DemoSetupController() : weak_ptr_factory_(this) {}
: delegate_(delegate), weak_ptr_factory_(this) {
DCHECK(delegate_);
}
DemoSetupController::~DemoSetupController() { DemoSetupController::~DemoSetupController() {
if (device_local_account_policy_store_) if (device_local_account_policy_store_)
device_local_account_policy_store_->RemoveObserver(this); device_local_account_policy_store_->RemoveObserver(this);
} }
void DemoSetupController::EnrollOnline() { bool DemoSetupController::IsOfflineEnrollment() const {
return enrollment_type_ && *enrollment_type_ == EnrollmentType::kOffline;
}
void DemoSetupController::Enroll(OnSetupSuccess on_setup_success,
OnSetupError on_setup_error) {
DCHECK(enrollment_type_)
<< "Enrollment type needs to be explicitly set before calling Enroll()";
DCHECK_EQ(mode_, policy::EnrollmentConfig::MODE_NONE); DCHECK_EQ(mode_, policy::EnrollmentConfig::MODE_NONE);
DCHECK(!enrollment_helper_); DCHECK(!enrollment_helper_);
on_setup_success_ = std::move(on_setup_success);
on_setup_error_ = std::move(on_setup_error);
switch (*enrollment_type_) {
case EnrollmentType::kOnline:
EnrollOnline();
return;
case EnrollmentType::kOffline: {
const base::FilePath offline_data_dir =
policy_dir_for_tests_.empty() ? base::FilePath(kOfflineDemoModeDir)
: policy_dir_for_tests_;
EnrollOffline(offline_data_dir);
return;
}
default:
NOTREACHED() << "Unknown demo mode enrollment type";
}
}
void DemoSetupController::EnrollOnline() {
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(
...@@ -124,8 +155,6 @@ void DemoSetupController::EnrollOnline() { ...@@ -124,8 +155,6 @@ void DemoSetupController::EnrollOnline() {
} }
void DemoSetupController::EnrollOffline(const base::FilePath& policy_dir) { void DemoSetupController::EnrollOffline(const base::FilePath& policy_dir) {
DCHECK_EQ(mode_, policy::EnrollmentConfig::MODE_NONE);
DCHECK(!enrollment_helper_);
DCHECK(policy_dir_.empty()); DCHECK(policy_dir_.empty());
policy_dir_ = policy_dir; policy_dir_ = policy_dir;
mode_ = policy::EnrollmentConfig::MODE_OFFLINE_DEMO; mode_ = policy::EnrollmentConfig::MODE_OFFLINE_DEMO;
...@@ -145,7 +174,7 @@ void DemoSetupController::OnOfflinePolicyFilesExisted(std::string* message, ...@@ -145,7 +174,7 @@ void DemoSetupController::OnOfflinePolicyFilesExisted(std::string* message,
DCHECK(!policy_dir_.empty()); DCHECK(!policy_dir_.empty());
if (!ok) { if (!ok) {
SetupFailed(*message, false); SetupFailed(*message, DemoSetupError::kRecoverable);
return; return;
} }
...@@ -172,12 +201,13 @@ void DemoSetupController::OnEnrollmentError(policy::EnrollmentStatus status) { ...@@ -172,12 +201,13 @@ void DemoSetupController::OnEnrollmentError(policy::EnrollmentStatus status) {
"validation_status: %d lock_status: %d", "validation_status: %d lock_status: %d",
status.status(), status.client_status(), status.store_status(), status.status(), status.client_status(), status.store_status(),
status.validation_status(), status.lock_status()), status.validation_status(), status.lock_status()),
false); DemoSetupError::kRecoverable);
} }
void DemoSetupController::OnOtherError( void DemoSetupController::OnOtherError(
EnterpriseEnrollmentHelper::OtherError error) { EnterpriseEnrollmentHelper::OtherError error) {
SetupFailed(base::StringPrintf("Other error: %d", error), false); SetupFailed(base::StringPrintf("Other error: %d", error),
DemoSetupError::kRecoverable);
} }
void DemoSetupController::OnDeviceEnrolled( void DemoSetupController::OnDeviceEnrolled(
...@@ -200,7 +230,8 @@ void DemoSetupController::OnDeviceEnrolled( ...@@ -200,7 +230,8 @@ void DemoSetupController::OnDeviceEnrolled(
return; return;
} }
Reset(); Reset();
delegate_->OnSetupSuccess(); if (!on_setup_success_.is_null())
std::move(on_setup_success_).Run();
} }
void DemoSetupController::OnMultipleLicensesAvailable( void DemoSetupController::OnMultipleLicensesAvailable(
...@@ -221,18 +252,25 @@ void DemoSetupController::SetDeviceLocalAccountPolicyStoreForTest( ...@@ -221,18 +252,25 @@ void DemoSetupController::SetDeviceLocalAccountPolicyStoreForTest(
device_local_account_policy_store_ = store; device_local_account_policy_store_ = store;
} }
void DemoSetupController::SetOfflineDataDirForTest(
const base::FilePath& offline_dir) {
policy_dir_for_tests_ = offline_dir;
}
void DemoSetupController::OnDeviceLocalAccountPolicyLoaded( void DemoSetupController::OnDeviceLocalAccountPolicyLoaded(
base::Optional<std::string> blob) { base::Optional<std::string> blob) {
if (!blob.has_value()) { if (!blob.has_value()) {
// This is very unlikely to happen since the file existence is already // This is very unlikely to happen since the file existence is already
// checked as CheckOfflinePolicyFilesExist. // checked as CheckOfflinePolicyFilesExist.
SetupFailed("Policy file for the device local account not found", true); SetupFailed("Policy file for the device local account not found",
DemoSetupError::kFatal);
return; return;
} }
enterprise_management::PolicyFetchResponse policy; enterprise_management::PolicyFetchResponse policy;
if (!policy.ParseFromString(blob.value())) { if (!policy.ParseFromString(blob.value())) {
SetupFailed("Error parsing local account policy blob.", true); SetupFailed("Error parsing local account policy blob.",
DemoSetupError::kFatal);
return; return;
} }
...@@ -240,7 +278,8 @@ void DemoSetupController::OnDeviceLocalAccountPolicyLoaded( ...@@ -240,7 +278,8 @@ void DemoSetupController::OnDeviceLocalAccountPolicyLoaded(
enterprise_management::PolicyData policy_data; enterprise_management::PolicyData policy_data;
if (policy.policy_data().empty() || if (policy.policy_data().empty() ||
!policy_data.ParseFromString(policy.policy_data())) { !policy_data.ParseFromString(policy.policy_data())) {
SetupFailed("Error parsing local account policy data.", true); SetupFailed("Error parsing local account policy data.",
DemoSetupError::kFatal);
return; return;
} }
...@@ -252,17 +291,20 @@ void DemoSetupController::OnDeviceLocalAccountPolicyLoaded( ...@@ -252,17 +291,20 @@ void DemoSetupController::OnDeviceLocalAccountPolicyLoaded(
} }
if (!device_local_account_policy_store_) { if (!device_local_account_policy_store_) {
SetupFailed("Can't find the store for the local account policy.", true); SetupFailed("Can't find the store for the local account policy.",
DemoSetupError::kFatal);
return; return;
} }
device_local_account_policy_store_->AddObserver(this); device_local_account_policy_store_->AddObserver(this);
device_local_account_policy_store_->Store(policy); device_local_account_policy_store_->Store(policy);
} }
void DemoSetupController::SetupFailed(const std::string& message, bool fatal) { void DemoSetupController::SetupFailed(const std::string& message,
DemoSetupError error) {
Reset(); Reset();
LOG(ERROR) << message << " fatal=" << fatal; LOG(ERROR) << message << " fatal=" << (error == DemoSetupError::kFatal);
delegate_->OnSetupError(fatal); if (!on_setup_error_.is_null())
std::move(on_setup_error_).Run(error);
} }
void DemoSetupController::Reset() { void DemoSetupController::Reset() {
...@@ -281,12 +323,14 @@ void DemoSetupController::Reset() { ...@@ -281,12 +323,14 @@ void DemoSetupController::Reset() {
void DemoSetupController::OnStoreLoaded(policy::CloudPolicyStore* store) { void DemoSetupController::OnStoreLoaded(policy::CloudPolicyStore* store) {
DCHECK_EQ(store, device_local_account_policy_store_); DCHECK_EQ(store, device_local_account_policy_store_);
Reset(); Reset();
delegate_->OnSetupSuccess(); if (!on_setup_success_.is_null())
std::move(on_setup_success_).Run();
} }
void DemoSetupController::OnStoreError(policy::CloudPolicyStore* store) { void DemoSetupController::OnStoreError(policy::CloudPolicyStore* store) {
DCHECK_EQ(store, device_local_account_policy_store_); DCHECK_EQ(store, device_local_account_policy_store_);
SetupFailed("Failed to store the local account policy", true); SetupFailed("Failed to store the local account policy",
DemoSetupError::kFatal);
} }
} // namespace chromeos } // namespace chromeos
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_SETUP_CONTROLLER_H_ #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_SETUP_CONTROLLER_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_SETUP_CONTROLLER_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_SETUP_CONTROLLER_H_
#include <string>
#include "base/callback_forward.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
...@@ -20,38 +23,54 @@ class DemoSetupController ...@@ -20,38 +23,54 @@ class DemoSetupController
: public EnterpriseEnrollmentHelper::EnrollmentStatusConsumer, : public EnterpriseEnrollmentHelper::EnrollmentStatusConsumer,
public policy::CloudPolicyStore::Observer { public policy::CloudPolicyStore::Observer {
public: public:
// Domain that demo mode devices are enrolled into. // Type of demo mode enrollment.
static constexpr char kDemoModeDomain[] = "cros-demo-mode.com"; enum class EnrollmentType {
// Online enrollment into demo mode that is established with DMServer.
kOnline,
// Offline enrollment into demo mode that is established locally.
kOffline,
};
// Delegate that will be notified about result of setup flow when it is // Type of demo mode setup error.
// finished. enum class DemoSetupError {
class Delegate { // Recoverable or temporary demo mode setup error. Another attempt to setup
public: // demo mode may succeed.
virtual ~Delegate() = default; kRecoverable,
// Fatal demo mode setup error. Device requires powerwash to recover from
// the resulting state.
kFatal,
};
// Called when the setup flow finished with error. |fatal| is true if the // Demo mode setup callbacks.
// error isn't recoverable and needs powerwash. using OnSetupSuccess = base::OnceClosure;
virtual void OnSetupError(bool fatal) = 0; using OnSetupError = base::OnceCallback<void(DemoSetupError)>;
// Called when the setup flow finished successfully. // Domain that demo mode devices are enrolled into.
virtual void OnSetupSuccess() = 0; static constexpr char kDemoModeDomain[] = "cros-demo-mode.com";
};
// Returns whether demo mode setup flow is in progress in OOBE. // Utility method that returns whether demo mode setup flow is in progress in
// OOBE.
static bool IsOobeDemoSetupFlowInProgress(); static bool IsOobeDemoSetupFlowInProgress();
explicit DemoSetupController(Delegate* delegate); DemoSetupController();
~DemoSetupController() override; ~DemoSetupController() override;
// Initiates online enrollment that registers and sets up the device in the // Sets enrollment type that will be used to setup the device. It has to be
// Demo Mode domain. // set before calling Enroll().
void EnrollOnline(); void set_enrollment_type(EnrollmentType enrollment_type) {
enrollment_type_ = enrollment_type;
}
// Initiates offline enrollment that locks the device and sets up offline // Whether offline enrollment is used for setup.
// policies required by Demo Mode. It requires no network connectivity since bool IsOfflineEnrollment() const;
// and all setup will be done locally. The policy files will be loaded
// from the |base_path|. // Initiates enrollment that sets up the device in the demo mode domain. The
void EnrollOffline(const base::FilePath& base_path); // |enrollment_type_| determines whether online or offline setup will be
// performed and it should be set with set_enrollment_type() before calling
// Enroll(). |on_setup_success| will be called when enrollment finishes
// successfully. |on_setup_error| will be called when enrollment finishes with
// an error.
void Enroll(OnSetupSuccess on_setup_success, OnSetupError on_setup_error);
// EnterpriseEnrollmentHelper::EnrollmentStatusConsumer: // EnterpriseEnrollmentHelper::EnrollmentStatusConsumer:
void OnDeviceEnrolled(const std::string& additional_token) override; void OnDeviceEnrolled(const std::string& additional_token) override;
...@@ -64,8 +83,19 @@ class DemoSetupController ...@@ -64,8 +83,19 @@ class DemoSetupController
const EnrollmentLicenseMap& licenses) override; const EnrollmentLicenseMap& licenses) override;
void SetDeviceLocalAccountPolicyStoreForTest(policy::CloudPolicyStore* store); void SetDeviceLocalAccountPolicyStoreForTest(policy::CloudPolicyStore* store);
void SetOfflineDataDirForTest(const base::FilePath& offline_dir);
private: private:
// Initiates online enrollment that registers and sets up the device in the
// demo mode domain.
void EnrollOnline();
// Initiates offline enrollment that locks the device and sets up offline
// policies required by demo mode. It requires no network connectivity since
// all setup will be done locally. The policy files will be loaded from the
// |policy_dir|.
void EnrollOffline(const base::FilePath& policy_dir);
// Called when the checks of policy files for the offline demo mode is done. // Called when the checks of policy files for the offline demo mode is done.
void OnOfflinePolicyFilesExisted(std::string* message, bool ok); void OnOfflinePolicyFilesExisted(std::string* message, bool ok);
...@@ -74,7 +104,7 @@ class DemoSetupController ...@@ -74,7 +104,7 @@ class DemoSetupController
void OnDeviceLocalAccountPolicyLoaded(base::Optional<std::string> blob); void OnDeviceLocalAccountPolicyLoaded(base::Optional<std::string> blob);
// Finish the flow with an error message. // Finish the flow with an error message.
void SetupFailed(const std::string& message, bool fatal); void SetupFailed(const std::string& message, DemoSetupError error);
// Clears the internal state. // Clears the internal state.
void Reset(); void Reset();
...@@ -83,7 +113,15 @@ class DemoSetupController ...@@ -83,7 +113,15 @@ class DemoSetupController
void OnStoreLoaded(policy::CloudPolicyStore* store) override; void OnStoreLoaded(policy::CloudPolicyStore* store) override;
void OnStoreError(policy::CloudPolicyStore* store) override; void OnStoreError(policy::CloudPolicyStore* store) override;
Delegate* delegate_ = nullptr; // Enrollment type that will be performed when Enroll() is called. Should be
// set explicitly.
base::Optional<EnrollmentType> enrollment_type_;
// Callback to call when enrollment finishes with an error.
OnSetupError on_setup_error_;
// Callback to call when enrollment finishes successfully.
OnSetupSuccess on_setup_success_;
// The mode of the current enrollment flow. // The mode of the current enrollment flow.
policy::EnrollmentConfig::Mode mode_ = policy::EnrollmentConfig::MODE_NONE; policy::EnrollmentConfig::Mode mode_ = policy::EnrollmentConfig::MODE_NONE;
...@@ -93,6 +131,9 @@ class DemoSetupController ...@@ -93,6 +131,9 @@ class DemoSetupController
// on the online enrollment. // on the online enrollment.
base::FilePath policy_dir_; base::FilePath policy_dir_;
// The directory containing policy blob files used for testing.
base::FilePath policy_dir_for_tests_;
// The CloudPolicyStore for the device local account for the offline policy. // The CloudPolicyStore for the device local account for the offline policy.
policy::CloudPolicyStore* device_local_account_policy_store_ = nullptr; policy::CloudPolicyStore* device_local_account_policy_store_ = nullptr;
......
...@@ -4,8 +4,12 @@ ...@@ -4,8 +4,12 @@
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include "base/files/file_util.h" #include <memory>
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h" #include "base/files/scoped_temp_dir.h"
#include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/scoped_task_environment.h" #include "base/test/scoped_task_environment.h"
...@@ -20,26 +24,27 @@ ...@@ -20,26 +24,27 @@
using chromeos::test::DemoModeSetupResult; using chromeos::test::DemoModeSetupResult;
using chromeos::test::MockDemoModeOfflineEnrollmentHelperCreator; using chromeos::test::MockDemoModeOfflineEnrollmentHelperCreator;
using chromeos::test::MockDemoModeOnlineEnrollmentHelperCreator; using chromeos::test::MockDemoModeOnlineEnrollmentHelperCreator;
using chromeos::test::SetupDummyOfflinePolicyDir;
using testing::_; using testing::_;
namespace chromeos { namespace chromeos {
namespace { namespace {
class MockDemoSetupControllerDelegate : public DemoSetupController::Delegate { class DemoSetupControllerTestHelper {
public: public:
MockDemoSetupControllerDelegate() DemoSetupControllerTestHelper()
: run_loop_(std::make_unique<base::RunLoop>()) {} : run_loop_(std::make_unique<base::RunLoop>()) {}
~MockDemoSetupControllerDelegate() override = default; virtual ~DemoSetupControllerTestHelper() = default;
void OnSetupError(bool fatal) override { void OnSetupError(DemoSetupController::DemoSetupError error) {
EXPECT_FALSE(succeeded_.has_value()); EXPECT_FALSE(succeeded_.has_value());
succeeded_ = false; succeeded_ = false;
fatal_ = fatal; error_ = error;
run_loop_->Quit(); run_loop_->Quit();
} }
void OnSetupSuccess() override { void OnSetupSuccess() {
EXPECT_FALSE(succeeded_.has_value()); EXPECT_FALSE(succeeded_.has_value());
succeeded_ = true; succeeded_ = true;
run_loop_->Quit(); run_loop_->Quit();
...@@ -54,7 +59,9 @@ class MockDemoSetupControllerDelegate : public DemoSetupController::Delegate { ...@@ -54,7 +59,9 @@ class MockDemoSetupControllerDelegate : public DemoSetupController::Delegate {
} }
// Returns true if it receives a fatal error. // Returns true if it receives a fatal error.
bool IsErrorFatal() const { return fatal_; } bool IsErrorFatal() const {
return error_ == DemoSetupController::DemoSetupError::kFatal;
}
void Reset() { void Reset() {
succeeded_.reset(); succeeded_.reset();
...@@ -63,45 +70,13 @@ class MockDemoSetupControllerDelegate : public DemoSetupController::Delegate { ...@@ -63,45 +70,13 @@ class MockDemoSetupControllerDelegate : public DemoSetupController::Delegate {
private: private:
base::Optional<bool> succeeded_; base::Optional<bool> succeeded_;
bool fatal_ = false; DemoSetupController::DemoSetupError error_ =
DemoSetupController::DemoSetupError::kRecoverable;
std::unique_ptr<base::RunLoop> run_loop_; std::unique_ptr<base::RunLoop> run_loop_;
DISALLOW_COPY_AND_ASSIGN(MockDemoSetupControllerDelegate); DISALLOW_COPY_AND_ASSIGN(DemoSetupControllerTestHelper);
}; };
bool SetupDummyOfflineDir(const std::string& account_id,
base::ScopedTempDir* temp_dir) {
if (!temp_dir->CreateUniqueTempDir()) {
LOG(ERROR) << "Failed to create unique tempdir";
return false;
}
if (base::WriteFile(temp_dir->GetPath().AppendASCII("device_policy"), "",
0) != 0) {
LOG(ERROR) << "Failed to create device_policy file";
return false;
}
// We use MockCloudPolicyStore for the device local account policy in the
// tests, thus actual policy content can be empty. account_id is specified
// since it is used by DemoSetupController to look up the store.
std::string policy_blob;
if (!account_id.empty()) {
enterprise_management::PolicyData policy_data;
policy_data.set_username(account_id);
enterprise_management::PolicyFetchResponse policy;
policy.set_policy_data(policy_data.SerializeAsString());
policy_blob = policy.SerializeAsString();
}
if (base::WriteFile(temp_dir->GetPath().AppendASCII("local_account_policy"),
policy_blob.data(), policy_blob.size()) !=
static_cast<int>(policy_blob.size())) {
LOG(ERROR) << "Failed to create local_account_policy file";
return false;
}
return true;
}
} // namespace } // namespace
class DemoSetupControllerTest : public testing::Test { class DemoSetupControllerTest : public testing::Test {
...@@ -113,8 +88,8 @@ class DemoSetupControllerTest : public testing::Test { ...@@ -113,8 +88,8 @@ class DemoSetupControllerTest : public testing::Test {
SystemSaltGetter::Initialize(); SystemSaltGetter::Initialize();
DBusThreadManager::Initialize(); DBusThreadManager::Initialize();
DeviceSettingsService::Initialize(); DeviceSettingsService::Initialize();
delegate_ = std::make_unique<MockDemoSetupControllerDelegate>(); helper_ = std::make_unique<DemoSetupControllerTestHelper>();
tested_controller_ = std::make_unique<DemoSetupController>(delegate_.get()); tested_controller_ = std::make_unique<DemoSetupController>();
} }
void TearDown() override { void TearDown() override {
...@@ -123,7 +98,7 @@ class DemoSetupControllerTest : public testing::Test { ...@@ -123,7 +98,7 @@ class DemoSetupControllerTest : public testing::Test {
DeviceSettingsService::Shutdown(); DeviceSettingsService::Shutdown();
} }
std::unique_ptr<MockDemoSetupControllerDelegate> delegate_; std::unique_ptr<DemoSetupControllerTestHelper> helper_;
std::unique_ptr<DemoSetupController> tested_controller_; std::unique_ptr<DemoSetupController> tested_controller_;
private: private:
...@@ -134,7 +109,7 @@ class DemoSetupControllerTest : public testing::Test { ...@@ -134,7 +109,7 @@ class DemoSetupControllerTest : public testing::Test {
TEST_F(DemoSetupControllerTest, OfflineSuccess) { TEST_F(DemoSetupControllerTest, OfflineSuccess) {
base::ScopedTempDir temp_dir; base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflineDir("test", &temp_dir)); ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator< &MockDemoModeOfflineEnrollmentHelperCreator<
...@@ -145,8 +120,16 @@ TEST_F(DemoSetupControllerTest, OfflineSuccess) { ...@@ -145,8 +120,16 @@ TEST_F(DemoSetupControllerTest, OfflineSuccess) {
&mock_store, &policy::MockCloudPolicyStore::NotifyStoreLoaded)); &mock_store, &policy::MockCloudPolicyStore::NotifyStoreLoaded));
tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store); tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store);
tested_controller_->EnrollOffline(temp_dir.GetPath()); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(true)); DemoSetupController::EnrollmentType::kOffline);
tested_controller_->SetOfflineDataDirForTest(temp_dir.GetPath());
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(true));
} }
TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyLoadFailure) { TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyLoadFailure) {
...@@ -158,15 +141,23 @@ TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyLoadFailure) { ...@@ -158,15 +141,23 @@ TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyLoadFailure) {
EXPECT_CALL(mock_store, Store(_)).Times(0); EXPECT_CALL(mock_store, Store(_)).Times(0);
tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store); tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store);
tested_controller_->EnrollOffline( tested_controller_->set_enrollment_type(
DemoSetupController::EnrollmentType::kOffline);
tested_controller_->SetOfflineDataDirForTest(
base::FilePath(FILE_PATH_LITERAL("/no/such/path"))); base::FilePath(FILE_PATH_LITERAL("/no/such/path")));
EXPECT_TRUE(delegate_->WaitResult(false)); tested_controller_->Enroll(
EXPECT_FALSE(delegate_->IsErrorFatal()); 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, OfflineDeviceLocalAccountPolicyStoreFailed) { TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyStoreFailed) {
base::ScopedTempDir temp_dir; base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflineDir("test", &temp_dir)); ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator< &MockDemoModeOfflineEnrollmentHelperCreator<
...@@ -177,27 +168,43 @@ TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyStoreFailed) { ...@@ -177,27 +168,43 @@ TEST_F(DemoSetupControllerTest, OfflineDeviceLocalAccountPolicyStoreFailed) {
&mock_store, &policy::MockCloudPolicyStore::NotifyStoreError)); &mock_store, &policy::MockCloudPolicyStore::NotifyStoreError));
tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store); tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store);
tested_controller_->EnrollOffline(temp_dir.GetPath()); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(false)); DemoSetupController::EnrollmentType::kOffline);
EXPECT_TRUE(delegate_->IsErrorFatal()); tested_controller_->SetOfflineDataDirForTest(temp_dir.GetPath());
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_TRUE(helper_->IsErrorFatal());
} }
TEST_F(DemoSetupControllerTest, OfflineInvalidDeviceLocalAccountPolicyBlob) { TEST_F(DemoSetupControllerTest, OfflineInvalidDeviceLocalAccountPolicyBlob) {
base::ScopedTempDir temp_dir; base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflineDir("", &temp_dir)); ASSERT_TRUE(SetupDummyOfflinePolicyDir("", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator< &MockDemoModeOfflineEnrollmentHelperCreator<
DemoModeSetupResult::SUCCESS>); DemoModeSetupResult::SUCCESS>);
tested_controller_->EnrollOffline(temp_dir.GetPath()); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(false)); DemoSetupController::EnrollmentType::kOffline);
EXPECT_TRUE(delegate_->IsErrorFatal()); tested_controller_->SetOfflineDataDirForTest(temp_dir.GetPath());
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_TRUE(helper_->IsErrorFatal());
} }
TEST_F(DemoSetupControllerTest, OfflineError) { TEST_F(DemoSetupControllerTest, OfflineError) {
base::ScopedTempDir temp_dir; base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflineDir("test", &temp_dir)); ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
...@@ -206,43 +213,79 @@ TEST_F(DemoSetupControllerTest, OfflineError) { ...@@ -206,43 +213,79 @@ TEST_F(DemoSetupControllerTest, OfflineError) {
EXPECT_CALL(mock_store, Store(_)).Times(0); EXPECT_CALL(mock_store, Store(_)).Times(0);
tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store); tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store);
tested_controller_->EnrollOffline(temp_dir.GetPath()); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(false)); DemoSetupController::EnrollmentType::kOffline);
EXPECT_FALSE(delegate_->IsErrorFatal()); tested_controller_->SetOfflineDataDirForTest(temp_dir.GetPath());
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, OnlineSuccess) { TEST_F(DemoSetupControllerTest, OnlineSuccess) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
tested_controller_->EnrollOnline(); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(true)); DemoSetupController::EnrollmentType::kOnline);
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(true));
} }
TEST_F(DemoSetupControllerTest, OnlineError) { TEST_F(DemoSetupControllerTest, OnlineError) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
tested_controller_->EnrollOnline(); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(false)); DemoSetupController::EnrollmentType::kOnline);
EXPECT_FALSE(delegate_->IsErrorFatal()); 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>);
tested_controller_->EnrollOnline(); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(false)); DemoSetupController::EnrollmentType::kOnline);
EXPECT_FALSE(delegate_->IsErrorFatal()); 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());
delegate_->Reset(); helper_->Reset();
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
tested_controller_->EnrollOnline(); tested_controller_->set_enrollment_type(
EXPECT_TRUE(delegate_->WaitResult(true)); DemoSetupController::EnrollmentType::kOnline);
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(true));
} }
} // namespace chromeos } // namespace chromeos
...@@ -7,10 +7,14 @@ ...@@ -7,10 +7,14 @@
#include <string> #include <string>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h" #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h"
#include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_mock.h" #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_mock.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 "components/policy/proto/device_management_backend.pb.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -72,6 +76,40 @@ EnterpriseEnrollmentHelper* MockDemoModeOfflineEnrollmentHelperCreator( ...@@ -72,6 +76,40 @@ EnterpriseEnrollmentHelper* MockDemoModeOfflineEnrollmentHelperCreator(
return mock; return mock;
} }
// Creates fake offline policy directory to be used in tests.
bool SetupDummyOfflinePolicyDir(const std::string& account_id,
base::ScopedTempDir* temp_dir) {
if (!temp_dir->CreateUniqueTempDir()) {
LOG(ERROR) << "Failed to create unique tempdir";
return false;
}
if (base::WriteFile(temp_dir->GetPath().AppendASCII("device_policy"), "",
0) != 0) {
LOG(ERROR) << "Failed to create device_policy file";
return false;
}
// We use MockCloudPolicyStore for the device local account policy in the
// tests, thus actual policy content can be empty. account_id is specified
// since it is used by DemoSetupController to look up the store.
std::string policy_blob;
if (!account_id.empty()) {
enterprise_management::PolicyData policy_data;
policy_data.set_username(account_id);
enterprise_management::PolicyFetchResponse policy;
policy.set_policy_data(policy_data.SerializeAsString());
policy_blob = policy.SerializeAsString();
}
if (base::WriteFile(temp_dir->GetPath().AppendASCII("local_account_policy"),
policy_blob.data(), policy_blob.size()) !=
static_cast<int>(policy_blob.size())) {
LOG(ERROR) << "Failed to create local_account_policy file";
return false;
}
return true;
}
} // namespace test } // namespace test
} // namespace chromeos } // namespace chromeos
......
...@@ -5,10 +5,12 @@ ...@@ -5,10 +5,12 @@
#include <string> #include <string>
#include "base/command_line.h" #include "base/command_line.h"
#include "base/files/scoped_temp_dir.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/strings/strcat.h" #include "base/strings/strcat.h"
#include "base/timer/timer.h" #include "base/timer/timer.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_test_utils.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_test_utils.h"
#include "chrome/browser/chromeos/login/login_manager_test.h" #include "chrome/browser/chromeos/login/login_manager_test.h"
#include "chrome/browser/chromeos/login/mock_network_state_helper.h" #include "chrome/browser/chromeos/login/mock_network_state_helper.h"
...@@ -16,6 +18,7 @@ ...@@ -16,6 +18,7 @@
#include "chrome/browser/chromeos/login/screens/demo_setup_screen.h" #include "chrome/browser/chromeos/login/screens/demo_setup_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/screen_exit_code.h" #include "chrome/browser/chromeos/login/screens/screen_exit_code.h"
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/js_checker.h"
#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"
...@@ -27,6 +30,7 @@ ...@@ -27,6 +30,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/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"
#include "third_party/cros_system_api/dbus/service_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h"
...@@ -35,6 +39,7 @@ ...@@ -35,6 +39,7 @@
using chromeos::test::DemoModeSetupResult; using chromeos::test::DemoModeSetupResult;
using chromeos::test::MockDemoModeOfflineEnrollmentHelperCreator; using chromeos::test::MockDemoModeOfflineEnrollmentHelperCreator;
using chromeos::test::MockDemoModeOnlineEnrollmentHelperCreator; using chromeos::test::MockDemoModeOnlineEnrollmentHelperCreator;
using chromeos::test::SetupDummyOfflinePolicyDir;
namespace chromeos { namespace chromeos {
...@@ -48,7 +53,7 @@ constexpr char kDefaultNetworkServicePath[] = "/service/eth1"; ...@@ -48,7 +53,7 @@ constexpr char kDefaultNetworkServicePath[] = "/service/eth1";
constexpr char kDefaultNetworkName[] = "eth1"; constexpr char kDefaultNetworkName[] = "eth1";
constexpr base::TimeDelta kJsConditionCheckFrequency = constexpr base::TimeDelta kJsConditionCheckFrequency =
base::TimeDelta::FromMilliseconds(200); base::TimeDelta::FromMilliseconds(10);
// How js query is executed. // How js query is executed.
enum class JSExecution { kSync, kAsync }; enum class JSExecution { kSync, kAsync };
...@@ -57,7 +62,7 @@ enum class JSExecution { kSync, kAsync }; ...@@ -57,7 +62,7 @@ enum class JSExecution { kSync, kAsync };
enum class OobeButton { kBack, kNext, kText }; enum class OobeButton { kBack, kNext, kText };
// Dialogs that are a part of Demo Mode setup screens. // Dialogs that are a part of Demo Mode setup screens.
enum class DemoSetupDialog { kNetwork, kEula, kSettings, kProgress, kError }; enum class DemoSetupDialog { kNetwork, kEula, kProgress, kError };
// Returns js id of the given |button| type. // Returns js id of the given |button| type.
std::string ButtonToStringId(OobeButton button) { std::string ButtonToStringId(OobeButton button) {
...@@ -80,8 +85,6 @@ std::string DialogToStringId(DemoSetupDialog dialog) { ...@@ -80,8 +85,6 @@ std::string DialogToStringId(DemoSetupDialog dialog) {
return "networkDialog"; return "networkDialog";
case DemoSetupDialog::kEula: case DemoSetupDialog::kEula:
return "eulaDialog"; return "eulaDialog";
case DemoSetupDialog::kSettings:
return "demoSetupSettingsDialog";
case DemoSetupDialog::kProgress: case DemoSetupDialog::kProgress:
return "demoSetupProgressDialog"; return "demoSetupProgressDialog";
case DemoSetupDialog::kError: case DemoSetupDialog::kError:
...@@ -316,21 +319,31 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -316,21 +319,31 @@ class DemoSetupTest : public LoginManagerTest {
JSExecuteAsync(query); JSExecuteAsync(query);
} }
void SkipToDialog(DemoSetupDialog dialog) { void SkipToErrorDialog() {
InvokeDemoMode(); // Simulate online setup error.
ClickOkOnConfirmationDialog(); EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
auto* const wizard_controller = WizardController::default_controller(); auto* const wizard_controller = WizardController::default_controller();
wizard_controller->SimulateDemoModeSetupForTesting(); wizard_controller->SimulateDemoModeSetupForTesting();
// Enrollment type is set in the part of the flow that is skipped, That is
// why we need to set it here.
wizard_controller->demo_setup_controller()->set_enrollment_type(
DemoSetupController::EnrollmentType::kOnline);
wizard_controller->AdvanceToScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP); wizard_controller->AdvanceToScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP)); // 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);
}
const std::string query = base::StrCat( void WaitForScreenDialog(OobeScreen screen, DemoSetupDialog dialog) {
{ScreenToContentQuery(OobeScreen::SCREEN_OOBE_DEMO_SETUP), const std::string query =
".showScreenForTesting('", DialogToStringId(dialog), "')"}); base::StrCat({"!", ScreenToContentQuery(screen), ".$.",
EXPECT_TRUE(JSExecute(query)); DialogToStringId(dialog), ".hidden"});
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, dialog)); JsConditionWaiter(js_checker(), query).Wait();
} }
void SkipToScreen(OobeScreen screen) { void SkipToScreen(OobeScreen screen) {
...@@ -348,6 +361,22 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -348,6 +361,22 @@ class DemoSetupTest : public LoginManagerTest {
OobeScreen::SCREEN_OOBE_DEMO_SETUP)); OobeScreen::SCREEN_OOBE_DEMO_SETUP));
} }
void SimulateOfflineEnvironment() {
DemoSetupController* controller =
WizardController::default_controller()->demo_setup_controller();
// Simulate offline data directory.
ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &fake_policy_dir_));
controller->SetOfflineDataDirForTest(fake_policy_dir_.GetPath());
// Simulate policy store.
EXPECT_CALL(mock_policy_store_, Store(testing::_))
.WillRepeatedly(testing::InvokeWithoutArgs(
&mock_policy_store_,
&policy::MockCloudPolicyStore::NotifyStoreLoaded));
controller->SetDeviceLocalAccountPolicyStoreForTest(&mock_policy_store_);
}
// Simulates device being connected to the network. // Simulates device being connected to the network.
void SimulateNetworkConnected() { void SimulateNetworkConnected() {
ShillServiceClient::TestInterface* service = ShillServiceClient::TestInterface* service =
...@@ -400,6 +429,10 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -400,6 +429,10 @@ class DemoSetupTest : public LoginManagerTest {
content::ExecuteScriptAsync(web_contents(), script); content::ExecuteScriptAsync(web_contents(), script);
} }
// TODO(agawronska): Maybe create a separate test fixture for offline setup.
base::ScopedTempDir fake_policy_dir_;
policy::MockCloudPolicyStore mock_policy_store_;
DISALLOW_COPY_AND_ASSIGN(DemoSetupTest); DISALLOW_COPY_AND_ASSIGN(DemoSetupTest);
}; };
...@@ -469,16 +502,8 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) { ...@@ -469,16 +502,8 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP)); // TODO(agawronska): Progress dialog transition is async - extra work is
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, // needed to be able to check it reliably.
DemoSetupDialog::kSettings));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings, OobeButton::kNext,
JSExecution::kAsync);
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kProgress));
OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
} }
...@@ -525,32 +550,57 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -525,32 +550,57 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP)); // TODO(agawronska): Progress dialog transition is async - extra work is
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, // needed to be able to check it reliably.
DemoSetupDialog::kSettings)); WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError);
}
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP, IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
DemoSetupDialog::kSettings, OobeButton::kNext, // Simulate offline setup success.
JSExecution::kAsync); EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, &MockDemoModeOfflineEnrollmentHelperCreator<
DemoSetupDialog::kProgress)); DemoModeSetupResult::SUCCESS>);
SimulateNetworkDisconnected();
// Wait for progress dialog to be hidden. InvokeDemoMode();
const std::string progress_dialog_hidden_query = base::StrCat( ClickOkOnConfirmationDialog();
{"!!", ScreenToContentQuery(OobeScreen::SCREEN_OOBE_DEMO_SETUP), ".$.",
DialogToStringId(DemoSetupDialog::kProgress), ".hidden"});
JsConditionWaiter(js_checker(), progress_dialog_hidden_query).Wait();
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, // It needs to be done after demo setup controller was created (demo setup
DemoSetupDialog::kError)); // flow was started).
SimulateOfflineEnvironment();
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP, OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
DemoSetupDialog::kError, OobeButton::kBack, EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_WELCOME).Wait(); ClickOobeButton(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, OobeButton::kText,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_FALSE(IsScreenDialogElementEnabled(
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext)));
const std::string offline_setup_item_name =
l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME);
ClickNetworkListElement(offline_setup_item_name);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
OobeButton::kText, JSExecution::kSync);
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.
OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
// Simulate offline setup failure.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
SimulateNetworkDisconnected(); SimulateNetworkDisconnected();
...@@ -558,6 +608,10 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -558,6 +608,10 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
InvokeDemoMode(); InvokeDemoMode();
ClickOkOnConfirmationDialog(); ClickOkOnConfirmationDialog();
// It needs to be done after demo setup controller was created (demo setup
// flow was started).
SimulateOfflineEnvironment();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
...@@ -578,31 +632,13 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -578,31 +632,13 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula, ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
OobeButton::kText, JSExecution::kAsync); OobeButton::kText, JSExecution::kSync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP)); // TODO(agawronska): Progress dialog transition is async - extra work is
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, // needed to be able to check it reliably.
DemoSetupDialog::kSettings)); WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError);
ClickScreenDialogButtonWithId(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings,
"[name=offlineSetup]", JSExecution::kSync);
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings, OobeButton::kNext,
JSExecution::kAsync);
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kProgress));
// Wait for progress dialog to be hidden.
const std::string progress_dialog_hidden_query = base::StrCat(
{"!!", ScreenToContentQuery(OobeScreen::SCREEN_OOBE_DEMO_SETUP), ".$.",
DialogToStringId(DemoSetupDialog::kProgress), ".hidden"});
JsConditionWaiter(js_checker(), progress_dialog_hidden_query).Wait();
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError));
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) {
...@@ -657,44 +693,44 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, BackOnNetworkScreen) { ...@@ -657,44 +693,44 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, BackOnNetworkScreen) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, BackOnSettingsScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, BackOnArcTermsScreen) {
SkipToDialog(DemoSetupDialog::kSettings); // User cannot go to ARC ToS screen without accepting eula - simulate that.
StartupUtils::MarkEulaAccepted();
SkipToScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
ClickOobeButton(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, OobeButton::kBack,
JSExecution::kSync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
}
IN_PROC_BROWSER_TEST_F(DemoSetupTest, BackOnErrorScreen) {
SkipToErrorDialog();
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP, ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings, OobeButton::kBack, DemoSetupDialog::kError, OobeButton::kBack,
JSExecution::kAsync); JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_WELCOME).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_WELCOME).Wait();
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, RetryOnErrorScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, RetryOnErrorScreen) {
// Simulate successful online setup after retry. SkipToErrorDialog();
// Simulate successful online setup on retry.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
SkipToDialog(DemoSetupDialog::kError);
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP, ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError, OobeButton::kText, DemoSetupDialog::kError, OobeButton::kText,
JSExecution::kAsync); JSExecution::kAsync);
EXPECT_TRUE(IsDialogShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP, // TODO(agawronska): Progress dialog transition is async - extra work is
DemoSetupDialog::kProgress)); // needed to be able to check it reliably.
OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowOnlineAndOfflineButton) {
SkipToDialog(DemoSetupDialog::kSettings);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings,
"[name=onlineSetup]"));
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings,
"[name=offlineSetup]"));
}
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowOfflineSetupOptionOnNetworkList) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, ShowOfflineSetupOptionOnNetworkList) {
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK);
...@@ -716,18 +752,6 @@ class DemoSetupOfflineDisabledTest : public DemoSetupTest { ...@@ -716,18 +752,6 @@ class DemoSetupOfflineDisabledTest : public DemoSetupTest {
DISALLOW_COPY_AND_ASSIGN(DemoSetupOfflineDisabledTest); DISALLOW_COPY_AND_ASSIGN(DemoSetupOfflineDisabledTest);
}; };
IN_PROC_BROWSER_TEST_F(DemoSetupOfflineDisabledTest, DoNotShowOfflineButton) {
SkipToDialog(DemoSetupDialog::kSettings);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings,
"[name=onlineSetup]"));
EXPECT_FALSE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kSettings,
"[name=offlineSetup]"));
}
IN_PROC_BROWSER_TEST_F(DemoSetupOfflineDisabledTest, IN_PROC_BROWSER_TEST_F(DemoSetupOfflineDisabledTest,
NoOfflineSetupOptionOnNetworkList) { NoOfflineSetupOptionOnNetworkList) {
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK);
......
...@@ -4,24 +4,16 @@ ...@@ -4,24 +4,16 @@
#include "chrome/browser/chromeos/login/screens/demo_setup_screen.h" #include "chrome/browser/chromeos/login/screens/demo_setup_screen.h"
#include "base/files/file_path.h" #include "base/bind.h"
#include "base/logging.h"
#include "chrome/browser/chromeos/login/screen_manager.h"
#include "chrome/browser/chromeos/login/screens/base_screen_delegate.h" #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
#include "chrome/browser/chromeos/login/screens/demo_setup_screen_view.h" #include "chrome/browser/chromeos/login/screens/demo_setup_screen_view.h"
#include "chrome/browser/chromeos/policy/enrollment_config.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
namespace { namespace {
constexpr char kUserActionOnlineSetup[] = "online-setup"; constexpr char kUserActionStartSetup[] = "start-setup";
constexpr char kUserActionOfflineSetup[] = "offline-setup";
constexpr char kUserActionClose[] = "close-setup"; constexpr char kUserActionClose[] = "close-setup";
// The policy blob data for offline demo-mode is embedded into the filesystem.
// TODO(mukai, agawronska): fix this when switching to dm-verity image.
constexpr const base::FilePath::CharType kOfflineDemoModeDir[] =
FILE_PATH_LITERAL("/usr/share/chromeos-assets/demo_mode_resources/policy");
} // namespace } // namespace
namespace chromeos { namespace chromeos {
...@@ -29,10 +21,10 @@ namespace chromeos { ...@@ -29,10 +21,10 @@ namespace chromeos {
DemoSetupScreen::DemoSetupScreen(BaseScreenDelegate* base_screen_delegate, DemoSetupScreen::DemoSetupScreen(BaseScreenDelegate* base_screen_delegate,
DemoSetupScreenView* view) DemoSetupScreenView* view)
: BaseScreen(base_screen_delegate, OobeScreen::SCREEN_OOBE_DEMO_SETUP), : BaseScreen(base_screen_delegate, OobeScreen::SCREEN_OOBE_DEMO_SETUP),
view_(view) { view_(view),
weak_ptr_factory_(this) {
DCHECK(view_); DCHECK(view_);
view_->Bind(this); view_->Bind(this);
demo_controller_.reset(new DemoSetupController(this));
} }
DemoSetupScreen::~DemoSetupScreen() { DemoSetupScreen::~DemoSetupScreen() {
...@@ -51,10 +43,8 @@ void DemoSetupScreen::Hide() { ...@@ -51,10 +43,8 @@ void DemoSetupScreen::Hide() {
} }
void DemoSetupScreen::OnUserAction(const std::string& action_id) { void DemoSetupScreen::OnUserAction(const std::string& action_id) {
if (action_id == kUserActionOnlineSetup) { if (action_id == kUserActionStartSetup) {
demo_controller_->EnrollOnline(); StartEnrollment();
} else if (action_id == kUserActionOfflineSetup) {
demo_controller_->EnrollOffline(base::FilePath(kOfflineDemoModeDir));
} else if (action_id == kUserActionClose) { } else if (action_id == kUserActionClose) {
Finish(ScreenExitCode::DEMO_MODE_SETUP_CANCELED); Finish(ScreenExitCode::DEMO_MODE_SETUP_CANCELED);
} else { } else {
...@@ -62,11 +52,22 @@ void DemoSetupScreen::OnUserAction(const std::string& action_id) { ...@@ -62,11 +52,22 @@ void DemoSetupScreen::OnUserAction(const std::string& action_id) {
} }
} }
void DemoSetupScreen::OnSetupError(bool fatal) { void DemoSetupScreen::OnSetupError(DemoSetupController::DemoSetupError error) {
// TODO(mukai): propagate |fatal| information and change the error message. // TODO(mukai): propagate |error| information and change the error message.
view_->OnSetupFinished(false, std::string()); view_->OnSetupFinished(false, std::string());
} }
void DemoSetupScreen::StartEnrollment() {
// Demo setup screen is only shown in OOBE.
DCHECK(DemoSetupController::IsOobeDemoSetupFlowInProgress());
DemoSetupController* demo_controller =
WizardController::default_controller()->demo_setup_controller();
demo_controller->Enroll(base::BindOnce(&DemoSetupScreen::OnSetupSuccess,
weak_ptr_factory_.GetWeakPtr()),
base::BindOnce(&DemoSetupScreen::OnSetupError,
weak_ptr_factory_.GetWeakPtr()));
}
void DemoSetupScreen::OnSetupSuccess() { void DemoSetupScreen::OnSetupSuccess() {
Finish(ScreenExitCode::DEMO_MODE_SETUP_FINISHED); Finish(ScreenExitCode::DEMO_MODE_SETUP_FINISHED);
} }
...@@ -74,7 +75,6 @@ void DemoSetupScreen::OnSetupSuccess() { ...@@ -74,7 +75,6 @@ void DemoSetupScreen::OnSetupSuccess() {
void DemoSetupScreen::OnViewDestroyed(DemoSetupScreenView* view) { void DemoSetupScreen::OnViewDestroyed(DemoSetupScreenView* view) {
if (view_ == view) if (view_ == view)
view_ = nullptr; view_ = nullptr;
demo_controller_.reset();
} }
} // namespace chromeos } // namespace chromeos
...@@ -5,8 +5,10 @@ ...@@ -5,8 +5,10 @@
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEMO_SETUP_SCREEN_H_ #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEMO_SETUP_SCREEN_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEMO_SETUP_SCREEN_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEMO_SETUP_SCREEN_H_
#include <memory> #include <string>
#include "base/macros.h"
#include "base/memory/weak_ptr.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/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
...@@ -17,8 +19,7 @@ class DemoSetupScreenView; ...@@ -17,8 +19,7 @@ class DemoSetupScreenView;
// Controlls demo mode setup. The screen can be shown during OOBE. It allows // Controlls demo mode setup. The screen can be shown during OOBE. It allows
// user to setup retail demo mode on the device. // user to setup retail demo mode on the device.
class DemoSetupScreen : public BaseScreen, class DemoSetupScreen : public BaseScreen {
public DemoSetupController::Delegate {
public: public:
DemoSetupScreen(BaseScreenDelegate* base_screen_delegate, DemoSetupScreen(BaseScreenDelegate* base_screen_delegate,
DemoSetupScreenView* view); DemoSetupScreenView* view);
...@@ -29,17 +30,22 @@ class DemoSetupScreen : public BaseScreen, ...@@ -29,17 +30,22 @@ class DemoSetupScreen : public BaseScreen,
void Hide() override; void Hide() override;
void OnUserAction(const std::string& action_id) override; void OnUserAction(const std::string& action_id) override;
// DemoSetupManager::Delegate:
void OnSetupError(bool fatal) override;
void OnSetupSuccess() override;
// Called when view is being destroyed. If Screen is destroyed earlier // Called when view is being destroyed. If Screen is destroyed earlier
// then it has to call Bind(nullptr). // then it has to call Bind(nullptr).
void OnViewDestroyed(DemoSetupScreenView* view); void OnViewDestroyed(DemoSetupScreenView* view);
private: private:
void StartEnrollment();
// Called when the setup flow finished with error.
void OnSetupError(DemoSetupController::DemoSetupError error);
// Called when the setup flow finished successfully.
void OnSetupSuccess();
DemoSetupScreenView* view_; DemoSetupScreenView* view_;
std::unique_ptr<DemoSetupController> demo_controller_;
base::WeakPtrFactory<DemoSetupScreen> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DemoSetupScreen); DISALLOW_COPY_AND_ASSIGN(DemoSetupScreen);
}; };
......
// Copyright (c) 2018 The Chromium Authors. All rights reserved. // Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h" #include "chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h"
#include "chrome/browser/chromeos/customization/customization_document.h" #include "chrome/browser/chromeos/customization/customization_document.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.h" #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.h"
#include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
#include "chrome/browser/chromeos/login/existing_user_controller.h" #include "chrome/browser/chromeos/login/existing_user_controller.h"
...@@ -816,7 +817,7 @@ void WizardController::OnWelcomeContinued() { ...@@ -816,7 +817,7 @@ void WizardController::OnWelcomeContinued() {
} }
void WizardController::OnNetworkBack() { void WizardController::OnNetworkBack() {
if (is_in_demo_setup_flow_) { if (demo_setup_controller_) {
ShowDemoModePreferencesScreen(); ShowDemoModePreferencesScreen();
} else { } else {
ShowWelcomeScreen(); ShowWelcomeScreen();
...@@ -824,6 +825,11 @@ void WizardController::OnNetworkBack() { ...@@ -824,6 +825,11 @@ void WizardController::OnNetworkBack() {
} }
void WizardController::OnNetworkConnected() { void WizardController::OnNetworkConnected() {
if (demo_setup_controller_) {
demo_setup_controller_->set_enrollment_type(
DemoSetupController::EnrollmentType::kOnline);
}
if (is_official_build_) { if (is_official_build_) {
if (!StartupUtils::IsEulaAccepted()) { if (!StartupUtils::IsEulaAccepted()) {
ShowEulaScreen(); ShowEulaScreen();
...@@ -842,8 +848,10 @@ void WizardController::OnNetworkConnected() { ...@@ -842,8 +848,10 @@ void WizardController::OnNetworkConnected() {
} }
void WizardController::OnOfflineDemoModeSetup() { void WizardController::OnOfflineDemoModeSetup() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
is_offline_demo_setup_ = true; demo_setup_controller_->set_enrollment_type(
DemoSetupController::EnrollmentType::kOffline);
if (is_official_build_) { if (is_official_build_) {
if (!StartupUtils::IsEulaAccepted()) { if (!StartupUtils::IsEulaAccepted()) {
ShowEulaScreen(); ShowEulaScreen();
...@@ -865,7 +873,7 @@ void WizardController::OnConnectionFailed() { ...@@ -865,7 +873,7 @@ void WizardController::OnConnectionFailed() {
} }
void WizardController::OnUpdateCompleted() { void WizardController::OnUpdateCompleted() {
if (is_in_demo_setup_flow_) { if (demo_setup_controller_) {
ShowDemoModeSetupScreen(); ShowDemoModeSetupScreen();
return; return;
} }
...@@ -889,8 +897,7 @@ void WizardController::OnEulaAccepted() { ...@@ -889,8 +897,7 @@ void WizardController::OnEulaAccepted() {
PerformPostEulaActions(); PerformPostEulaActions();
// TODO(crbug.com/857275): Show Play Store ToS when available offline. // TODO(crbug.com/857275): Show Play Store ToS when available offline.
if (is_offline_demo_setup_) { if (demo_setup_controller_ && demo_setup_controller_->IsOfflineEnrollment()) {
DCHECK(is_in_demo_setup_flow_);
ShowDemoModeSetupScreen(); ShowDemoModeSetupScreen();
return; return;
} }
...@@ -1031,7 +1038,7 @@ void WizardController::OnArcTermsOfServiceSkipped() { ...@@ -1031,7 +1038,7 @@ void WizardController::OnArcTermsOfServiceSkipped() {
} }
void WizardController::OnArcTermsOfServiceAccepted() { void WizardController::OnArcTermsOfServiceAccepted() {
if (is_in_demo_setup_flow_) { if (demo_setup_controller_) {
InitiateOOBEUpdate(); InitiateOOBEUpdate();
return; return;
} }
...@@ -1052,7 +1059,7 @@ void WizardController::OnArcTermsOfServiceAccepted() { ...@@ -1052,7 +1059,7 @@ void WizardController::OnArcTermsOfServiceAccepted() {
} }
void WizardController::OnArcTermsOfServiceBack() { void WizardController::OnArcTermsOfServiceBack() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
DCHECK(StartupUtils::IsEulaAccepted()); DCHECK(StartupUtils::IsEulaAccepted());
ShowNetworkScreen(); ShowNetworkScreen();
} }
...@@ -1102,29 +1109,26 @@ void WizardController::OnAutoEnrollmentCheckCompleted() { ...@@ -1102,29 +1109,26 @@ void WizardController::OnAutoEnrollmentCheckCompleted() {
} }
void WizardController::OnDemoSetupFinished() { void WizardController::OnDemoSetupFinished() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
is_in_demo_setup_flow_ = false; demo_setup_controller_.reset();
is_offline_demo_setup_ = false;
PerformOOBECompletedActions(); PerformOOBECompletedActions();
ShowLoginScreen(LoginScreenContext()); ShowLoginScreen(LoginScreenContext());
} }
void WizardController::OnDemoSetupCanceled() { void WizardController::OnDemoSetupCanceled() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
is_in_demo_setup_flow_ = false; demo_setup_controller_.reset();
is_offline_demo_setup_ = false;
ShowWelcomeScreen(); ShowWelcomeScreen();
} }
void WizardController::OnDemoPreferencesContinued() { void WizardController::OnDemoPreferencesContinued() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
ShowNetworkScreen(); ShowNetworkScreen();
} }
void WizardController::OnDemoPreferencesCanceled() { void WizardController::OnDemoPreferencesCanceled() {
DCHECK(is_in_demo_setup_flow_); DCHECK(demo_setup_controller_);
is_in_demo_setup_flow_ = false; demo_setup_controller_.reset();
is_offline_demo_setup_ = false;
ShowWelcomeScreen(); ShowWelcomeScreen();
} }
...@@ -1427,12 +1431,12 @@ void WizardController::AdvanceToScreen(OobeScreen screen) { ...@@ -1427,12 +1431,12 @@ void WizardController::AdvanceToScreen(OobeScreen screen) {
} }
void WizardController::StartDemoModeSetup() { void WizardController::StartDemoModeSetup() {
is_in_demo_setup_flow_ = true; demo_setup_controller_ = std::make_unique<DemoSetupController>();
ShowDemoModePreferencesScreen(); ShowDemoModePreferencesScreen();
} }
void WizardController::SimulateDemoModeSetupForTesting() { void WizardController::SimulateDemoModeSetupForTesting() {
is_in_demo_setup_flow_ = true; demo_setup_controller_ = std::make_unique<DemoSetupController>();
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
......
...@@ -44,6 +44,7 @@ namespace login { ...@@ -44,6 +44,7 @@ namespace login {
class NetworkStateHelper; class NetworkStateHelper;
} // namespace login } // namespace login
class DemoSetupController;
class ErrorScreen; class ErrorScreen;
struct Geoposition; struct Geoposition;
class LoginDisplayHost; class LoginDisplayHost;
...@@ -106,7 +107,10 @@ class WizardController : public BaseScreenDelegate, ...@@ -106,7 +107,10 @@ class WizardController : public BaseScreenDelegate,
// Starts Demo Mode setup flow. The flow starts from network screen and reuses // Starts Demo Mode setup flow. The flow starts from network screen and reuses
// some of regular OOBE screens. It consists of the following screens: // some of regular OOBE screens. It consists of the following screens:
// chromeos::OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES // chromeos::OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES
// chromeos::OobeScreen::SCREEN_OOBE_NETWORK
// chromeos::OobeScreen::SCREEN_OOBE_EULA // chromeos::OobeScreen::SCREEN_OOBE_EULA
// chromeos::OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE
// chromeos::OobeScreen::SCREEN_OOBE_UPDATE
// chromeos::OobeScreen::SCREEN_OOBE_DEMO_SETUP // chromeos::OobeScreen::SCREEN_OOBE_DEMO_SETUP
void StartDemoModeSetup(); void StartDemoModeSetup();
...@@ -127,6 +131,12 @@ class WizardController : public BaseScreenDelegate, ...@@ -127,6 +131,12 @@ class WizardController : public BaseScreenDelegate,
// reworked at hackaton. // reworked at hackaton.
void EnableUserImageScreenReturnToPreviousHack(); void EnableUserImageScreenReturnToPreviousHack();
// Returns current DemoSetupController if demo setup flow is in progress or
// nullptr otherwise.
DemoSetupController* demo_setup_controller() const {
return demo_setup_controller_.get();
}
// Returns a pointer to the current screen or nullptr if there's no such // Returns a pointer to the current screen or nullptr if there's no such
// screen. // screen.
BaseScreen* current_screen() const { return current_screen_; } BaseScreen* current_screen() const { return current_screen_; }
...@@ -134,9 +144,6 @@ class WizardController : public BaseScreenDelegate, ...@@ -134,9 +144,6 @@ class WizardController : public BaseScreenDelegate,
// Returns true if the current wizard instance has reached the login screen. // Returns true if the current wizard instance has reached the login screen.
bool login_screen_started() const { return login_screen_started_; } bool login_screen_started() const { return login_screen_started_; }
// Whether demo mode setup OOBE flow is currently in progress.
bool is_in_demo_mode_setup_flow() const { return is_in_demo_setup_flow_; }
// Returns a given screen. Creates it lazily. // Returns a given screen. Creates it lazily.
BaseScreen* GetScreen(OobeScreen screen); BaseScreen* GetScreen(OobeScreen screen);
...@@ -434,16 +441,6 @@ class WizardController : public BaseScreenDelegate, ...@@ -434,16 +441,6 @@ class WizardController : public BaseScreenDelegate,
bool is_in_session_oobe_ = false; bool is_in_session_oobe_ = false;
// Whether the currently presented flow is Demo Mode setup.
bool is_in_demo_setup_flow_ = false;
// TODO(agawronska): Refactor |is_in_demo_setup_flow_| and
// |is_offline_demo_setup_| to DemoSetupController and use it here to
// determine demo setup configuration.
// Whether offline demo setup was chosen as a part of
// demo mode setup. Should be check together with |is_in_demo_setup_flow_|.
bool is_offline_demo_setup_ = false;
// Indicates that once image selection screen finishes we should return to // Indicates that once image selection screen finishes we should return to
// a previous screen instead of proceeding with usual flow. // a previous screen instead of proceeding with usual flow.
bool user_image_screen_return_to_previous_hack_ = false; bool user_image_screen_return_to_previous_hack_ = false;
...@@ -480,6 +477,10 @@ class WizardController : public BaseScreenDelegate, ...@@ -480,6 +477,10 @@ class WizardController : public BaseScreenDelegate,
// Helper for network realted operations. // Helper for network realted operations.
std::unique_ptr<login::NetworkStateHelper> network_state_helper_; std::unique_ptr<login::NetworkStateHelper> network_state_helper_;
// Controller of the demo mode setup. It has the lifetime of the single demo
// mode setup flow.
std::unique_ptr<DemoSetupController> demo_setup_controller_;
// Maps screen names to last time of their shows. // Maps screen names to last time of their shows.
std::map<std::string, base::Time> screen_show_times_; std::map<std::string, base::Time> screen_show_times_;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/browser/chromeos/base/locale_util.h" #include "chrome/browser/chromeos/base/locale_util.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/enrollment/enrollment_screen.h" #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
#include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h" #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h"
...@@ -2166,10 +2167,6 @@ class WizardControllerDemoSetupTest : public WizardControllerFlowTest { ...@@ -2166,10 +2167,6 @@ class WizardControllerDemoSetupTest : public WizardControllerFlowTest {
testing::Mock::VerifyAndClearExpectations(mock_welcome_screen_); testing::Mock::VerifyAndClearExpectations(mock_welcome_screen_);
} }
bool IsInDemoSetupFlow() const {
return WizardController::default_controller()->is_in_demo_setup_flow_;
}
template <class T, class H> template <class T, class H>
void SkipToScreen(OobeScreen screen, MockOutShowHide<T, H>* screen_mock) { void SkipToScreen(OobeScreen screen, MockOutShowHide<T, H>* screen_mock) {
EXPECT_CALL(*screen_mock, Show()).Times(1); EXPECT_CALL(*screen_mock, Show()).Times(1);
...@@ -2185,7 +2182,7 @@ class WizardControllerDemoSetupTest : public WizardControllerFlowTest { ...@@ -2185,7 +2182,7 @@ class WizardControllerDemoSetupTest : public WizardControllerFlowTest {
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnlineDemoSetupFlowFinished) { OnlineDemoSetupFlowFinished) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1); EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1);
...@@ -2195,7 +2192,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2195,7 +2192,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
WizardController::default_controller()->StartDemoModeSetup(); WizardController::default_controller()->StartDemoModeSetup();
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1); EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
...@@ -2204,7 +2201,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2204,7 +2201,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED); ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); EXPECT_CALL(*mock_eula_screen_, Show()).Times(1);
...@@ -2212,7 +2209,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2212,7 +2209,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_CONNECTED); OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_CONNECTED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_arc_terms_of_service_screen_, Show()).Times(1); EXPECT_CALL(*mock_arc_terms_of_service_screen_, Show()).Times(1);
...@@ -2220,7 +2217,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2220,7 +2217,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED); OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED);
CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE); CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1); EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); EXPECT_CALL(*mock_update_screen_, Show()).Times(1);
...@@ -2231,7 +2228,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2231,7 +2228,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_UPDATE); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_UPDATE);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); EXPECT_CALL(*mock_update_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1); EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1);
...@@ -2239,19 +2236,19 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2239,19 +2236,19 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnExit(*mock_arc_terms_of_service_screen_, ScreenExitCode::UPDATE_INSTALLED); OnExit(*mock_arc_terms_of_service_screen_, ScreenExitCode::UPDATE_INSTALLED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_FINISHED); OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_FINISHED);
EXPECT_TRUE(StartupUtils::IsOobeCompleted()); EXPECT_TRUE(StartupUtils::IsOobeCompleted());
EXPECT_TRUE(ExistingUserController::current_controller()); EXPECT_TRUE(ExistingUserController::current_controller());
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OfflineDemoSetupFlowFinished) { OfflineDemoSetupFlowFinished) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1); EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1);
...@@ -2261,7 +2258,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2261,7 +2258,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
WizardController::default_controller()->StartDemoModeSetup(); WizardController::default_controller()->StartDemoModeSetup();
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1); EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
...@@ -2270,7 +2267,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2270,7 +2267,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED); ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); EXPECT_CALL(*mock_eula_screen_, Show()).Times(1);
...@@ -2278,7 +2275,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2278,7 +2275,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_OFFLINE_DEMO_SETUP); OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_OFFLINE_DEMO_SETUP);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1); EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1);
...@@ -2286,18 +2283,18 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ...@@ -2286,18 +2283,18 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest,
OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED); OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_FINISHED); OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_FINISHED);
EXPECT_TRUE(StartupUtils::IsOobeCompleted()); EXPECT_TRUE(StartupUtils::IsOobeCompleted());
EXPECT_TRUE(ExistingUserController::current_controller()); EXPECT_TRUE(ExistingUserController::current_controller());
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1); EXPECT_CALL(*mock_welcome_screen_, Hide()).Times(1);
...@@ -2307,7 +2304,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2307,7 +2304,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
WizardController::default_controller()->StartDemoModeSetup(); WizardController::default_controller()->StartDemoModeSetup();
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1); EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
...@@ -2316,7 +2313,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2316,7 +2313,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED); ScreenExitCode::DEMO_MODE_PREFERENCES_CONTINUED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); EXPECT_CALL(*mock_eula_screen_, Show()).Times(1);
...@@ -2324,7 +2321,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2324,7 +2321,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_CONNECTED); OnExit(*mock_network_screen_, ScreenExitCode::NETWORK_CONNECTED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_arc_terms_of_service_screen_, Show()).Times(1); EXPECT_CALL(*mock_arc_terms_of_service_screen_, Show()).Times(1);
...@@ -2332,7 +2329,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2332,7 +2329,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED); OnExit(*mock_eula_screen_, ScreenExitCode::EULA_ACCEPTED);
CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE); CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1); EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); EXPECT_CALL(*mock_update_screen_, Show()).Times(1);
...@@ -2340,11 +2337,10 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2340,11 +2337,10 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
OnExit(*mock_arc_terms_of_service_screen_, OnExit(*mock_arc_terms_of_service_screen_,
ScreenExitCode::ARC_TERMS_OF_SERVICE_ACCEPTED); ScreenExitCode::ARC_TERMS_OF_SERVICE_ACCEPTED);
// Let update screen smooth time process (time = 0ms).
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_UPDATE); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_UPDATE);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); EXPECT_CALL(*mock_update_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1); EXPECT_CALL(*mock_demo_setup_screen_, Show()).Times(1);
...@@ -2352,7 +2348,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2352,7 +2348,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
OnExit(*mock_arc_terms_of_service_screen_, ScreenExitCode::UPDATE_INSTALLED); OnExit(*mock_arc_terms_of_service_screen_, ScreenExitCode::UPDATE_INSTALLED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_demo_setup_screen_, Hide()).Times(1); EXPECT_CALL(*mock_demo_setup_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_welcome_screen_, Show()).Times(1); EXPECT_CALL(*mock_welcome_screen_, Show()).Times(1);
...@@ -2361,18 +2357,18 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) { ...@@ -2361,18 +2357,18 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoSetupCanceled) {
OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_CANCELED); OnExit(*mock_demo_setup_screen_, ScreenExitCode::DEMO_MODE_SETUP_CANCELED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoPreferencesCanceled) { IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoPreferencesCanceled) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
SkipToScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, SkipToScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES,
mock_demo_preferences_screen_); mock_demo_preferences_screen_);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1); EXPECT_CALL(*mock_demo_preferences_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_welcome_screen_, Show()).Times(1); EXPECT_CALL(*mock_welcome_screen_, Show()).Times(1);
...@@ -2381,17 +2377,17 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoPreferencesCanceled) { ...@@ -2381,17 +2377,17 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, DemoPreferencesCanceled) {
ScreenExitCode::DEMO_MODE_PREFERENCES_CANCELED); ScreenExitCode::DEMO_MODE_PREFERENCES_CANCELED);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, NetworkBackPressed) { IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, NetworkBackPressed) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK, mock_network_screen_); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK, mock_network_screen_);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_demo_preferences_screen_, Show()).Times(1); EXPECT_CALL(*mock_demo_preferences_screen_, Show()).Times(1);
...@@ -2399,17 +2395,17 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, NetworkBackPressed) { ...@@ -2399,17 +2395,17 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, NetworkBackPressed) {
OnExit(*mock_eula_screen_, ScreenExitCode::NETWORK_BACK); OnExit(*mock_eula_screen_, ScreenExitCode::NETWORK_BACK);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, EulaBackPressed) { IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, EulaBackPressed) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
SkipToScreen(OobeScreen::SCREEN_OOBE_EULA, mock_eula_screen_); SkipToScreen(OobeScreen::SCREEN_OOBE_EULA, mock_eula_screen_);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_EULA);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
...@@ -2417,12 +2413,12 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, EulaBackPressed) { ...@@ -2417,12 +2413,12 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, EulaBackPressed) {
OnExit(*mock_eula_screen_, ScreenExitCode::EULA_BACK); OnExit(*mock_eula_screen_, ScreenExitCode::EULA_BACK);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) { IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) {
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_WELCOME);
EXPECT_FALSE(IsInDemoSetupFlow()); EXPECT_FALSE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
WaitUntilJSIsReady(); WaitUntilJSIsReady();
// User cannot go to ARC ToS screen without accepting eula - simulate that. // User cannot go to ARC ToS screen without accepting eula - simulate that.
...@@ -2431,7 +2427,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) { ...@@ -2431,7 +2427,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) {
mock_arc_terms_of_service_screen_); mock_arc_terms_of_service_screen_);
CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE); CheckCurrentScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1); EXPECT_CALL(*mock_arc_terms_of_service_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
...@@ -2440,7 +2436,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) { ...@@ -2440,7 +2436,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerDemoSetupTest, ArcTosBackPressed) {
ScreenExitCode::ARC_TERMS_OF_SERVICE_BACK); ScreenExitCode::ARC_TERMS_OF_SERVICE_BACK);
CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK); CheckCurrentScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsInDemoSetupFlow()); EXPECT_TRUE(DemoSetupController::IsOobeDemoSetupFlowInProgress());
} }
class WizardControllerOobeResumeTest : public WizardControllerTest { class WizardControllerOobeResumeTest : public WizardControllerTest {
......
...@@ -27,29 +27,6 @@ ...@@ -27,29 +27,6 @@
<link rel="stylesheet" href="demo_setup.css"> <link rel="stylesheet" href="demo_setup.css">
<link rel="stylesheet" href="oobe_flex_layout.css"> <link rel="stylesheet" href="oobe_flex_layout.css">
<oobe-dialog id="demoSetupSettingsDialog" role="dialog" has-buttons>
<h1 slot="title">Choose demo mode settings</h1>
<div slot="footer" class="flex layout vertical">
<paper-radio-group id="setupGroup"
selectable="cr-radio-button" selected="onlineSetup">
<cr-radio-button name="onlineSetup"
class="options-list-item flex layout horizontal center">
<div>Online setup</div>
</cr-radio-button>
<template is="dom-if" if="[[offlineDemoModeEnabled_]]">
<cr-radio-button name="offlineSetup"
class="options-list-item flex layout horizontal center">
<div>Offline setup</div>
</cr-radio-button>
</template>
</paper-radio-group>
</div>
<div slot="bottom-buttons" class="layout horizontal justified">
<oobe-back-button inverse on-tap="onCloseClicked_"></oobe-back-button>
<oobe-next-button inverse on-tap="onNextClicked_"></oobe-next-button>
</div>
</oobe-dialog>
<oobe-dialog id="demoSetupProgressDialog" role="dialog" has-buttons hidden> <oobe-dialog id="demoSetupProgressDialog" role="dialog" has-buttons hidden>
<hd-iron-icon slot="oobe-icon" <hd-iron-icon slot="oobe-icon"
icon1x="demo-setup-32:computer" icon2x="demo-setup-64:computer"> icon1x="demo-setup-32:computer" icon2x="demo-setup-64:computer">
...@@ -77,7 +54,7 @@ ...@@ -77,7 +54,7 @@
</div> </div>
<div slot="bottom-buttons" class="layout horizontal justified"> <div slot="bottom-buttons" class="layout horizontal justified">
<oobe-back-button inverse on-tap="onCloseClicked_"></oobe-back-button> <oobe-back-button inverse on-tap="onCloseClicked_"></oobe-back-button>
<oobe-text-button inverse on-tap="startSetup_"> <oobe-text-button inverse on-tap="onRetryClicked_">
<div> <div>
[[i18nDynamic(locale, 'demoSetupErrorScreenRetryButtonLabel')]] [[i18nDynamic(locale, 'demoSetupErrorScreenRetryButtonLabel')]]
</div> </div>
......
...@@ -13,40 +13,20 @@ Polymer({ ...@@ -13,40 +13,20 @@ Polymer({
behaviors: [I18nBehavior, OobeDialogHostBehavior], behaviors: [I18nBehavior, OobeDialogHostBehavior],
properties: { properties: {
/**
* Whether offline demo mode is enabled. If it is disabled offline setup
* option will not be shown in UI.
*/
offlineDemoModeEnabled_: {
type: Boolean,
value: false,
},
/**
* Whether offline demo setup was selected. Available setup types: online
* and offline.
*/
isOfflineSetup_: {
type: Boolean,
value: false,
},
/** Ordered array of screen ids that are a part of demo setup flow. */ /** Ordered array of screen ids that are a part of demo setup flow. */
screens_: { screens_: {
type: Array, type: Array,
readonly: true, readonly: true,
value: function() { value: function() {
return [ return ['demoSetupProgressDialog', 'demoSetupErrorDialog'];
'demoSetupSettingsDialog', 'demoSetupProgressDialog',
'demoSetupErrorDialog'
];
}, },
}, },
}, },
/** Resets demo setup flow to the initial screen. */ /** Resets demo setup flow to the initial screen and starts setup. */
reset: function() { reset: function() {
this.showScreen_(this.screens_[0]); this.showScreen_('demoSetupProgressDialog');
chrome.send('login.DemoSetupScreen.userActed', ['start-setup']);
}, },
/** Called after resources are updated. */ /** Called after resources are updated. */
...@@ -74,19 +54,6 @@ Polymer({ ...@@ -74,19 +54,6 @@ Polymer({
this.showScreen_(id); this.showScreen_(id);
}, },
/**
* Shows progress dialog and starts demo setup.
* @private
*/
startSetup_: function() {
this.showScreen_('demoSetupProgressDialog');
if (this.isOfflineSetup_) {
chrome.send('login.DemoSetupScreen.userActed', ['offline-setup']);
} else {
chrome.send('login.DemoSetupScreen.userActed', ['online-setup']);
}
},
/** /**
* Shows screen with the given id. * Shows screen with the given id.
* @param {string} id Screen id. * @param {string} id Screen id.
...@@ -113,22 +80,12 @@ Polymer({ ...@@ -113,22 +80,12 @@ Polymer({
} }
}, },
/**
* Next button click handler.
* @private
*/
onNextClicked_: function() {
const selected = this.$.setupGroup.selected;
this.isOfflineSetup_ = (selected == 'offlineSetup');
this.startSetup_();
},
/** /**
* Retry button click handler. * Retry button click handler.
* @private * @private
*/ */
onRetryClicked_: function() { onRetryClicked_: function() {
this.startSetup_(); this.reset();
}, },
/** /**
......
...@@ -10,26 +10,31 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() { ...@@ -10,26 +10,31 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() {
return { return {
EXTERNAL_API: ['onSetupFinished'], EXTERNAL_API: ['onSetupFinished'],
/**
* Demo setup module.
* @private
*/
demoSetupModule_: null,
/** @override */ /** @override */
decorate: function() { decorate: function() {
var demoSetupScreen = $('demo-setup-content'); this.demoSetupModule_ = $('demo-setup-content');
demoSetupScreen.offlineDemoModeEnabled_ =
loadTimeData.getValue('offlineDemoModeEnabled');
}, },
/** Returns a control which should receive an initial focus. */ /** Returns a control which should receive an initial focus. */
get defaultControl() { get defaultControl() {
return $('demo-setup-content'); return this.demoSetupModule_;
}, },
/** Called after resources are updated. */ /** Called after resources are updated. */
updateLocalizedContent: function() { updateLocalizedContent: function() {
$('demo-setup-content').updateLocalizedContent(); this.demoSetupModule_.updateLocalizedContent();
}, },
/** @override */ /** @override */
onBeforeShow: function(data) { onBeforeShow: function() {
$('demo-setup-content').reset(); this.demoSetupModule_.reset();
}, },
/** /**
...@@ -39,7 +44,7 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() { ...@@ -39,7 +44,7 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() {
* populated if setup finished with an error. * populated if setup finished with an error.
*/ */
onSetupFinished: function(isSuccess, message) { onSetupFinished: function(isSuccess, message) {
$('demo-setup-content').onSetupFinished(isSuccess, message); this.demoSetupModule_.onSetupFinished(isSuccess, message);
}, },
}; };
}); });
...@@ -4,13 +4,9 @@ ...@@ -4,13 +4,9 @@
#include "chrome/browser/ui/webui/chromeos/login/demo_setup_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/demo_setup_screen_handler.h"
#include "base/command_line.h"
#include "base/values.h"
#include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/screens/demo_setup_screen.h" #include "chrome/browser/chromeos/login/screens/demo_setup_screen.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/chromeos_switches.h"
#include "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
namespace { namespace {
...@@ -61,12 +57,4 @@ void DemoSetupScreenHandler::DeclareLocalizedValues( ...@@ -61,12 +57,4 @@ void DemoSetupScreenHandler::DeclareLocalizedValues(
IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_RETRY_BUTTON_LABEL); IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_RETRY_BUTTON_LABEL);
} }
void DemoSetupScreenHandler::GetAdditionalParameters(
base::DictionaryValue* dict) {
const bool is_offline_demo_mode_enabled =
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableOfflineDemoMode);
dict->SetBoolean("offlineDemoModeEnabled", is_offline_demo_mode_enabled);
}
} // namespace chromeos } // namespace chromeos
...@@ -30,7 +30,6 @@ class DemoSetupScreenHandler : public BaseScreenHandler, ...@@ -30,7 +30,6 @@ class DemoSetupScreenHandler : public BaseScreenHandler,
void Initialize() override; void Initialize() override;
void DeclareLocalizedValues( void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override; ::login::LocalizedValuesBuilder* builder) override;
void GetAdditionalParameters(base::DictionaryValue* dict) override;
private: private:
DemoSetupScreen* screen_ = nullptr; DemoSetupScreen* screen_ = nullptr;
......
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