| Index: chrome/browser/chromeos/login/screens/device_disabled_screen.cc
|
| diff --git a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
|
| index 9812c75fb7294a483f116284ba6ae4905e5720e6..b84b336f256fe381896b7fd5295163e294cefd66 100644
|
| --- a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
|
| +++ b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
|
| @@ -6,17 +6,30 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "base/logging.h"
|
| +#include "base/prefs/pref_service.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/browser_process_platform_part.h"
|
| #include "chrome/browser/chromeos/login/screens/screen_observer.h"
|
| #include "chrome/browser/chromeos/login/wizard_controller.h"
|
| +#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
|
| +#include "chrome/browser/chromeos/policy/enterprise_install_attributes.h"
|
| +#include "chrome/browser/chromeos/policy/server_backed_device_state.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chromeos/chromeos_switches.h"
|
| +#include "components/policy/core/common/cloud/cloud_policy_constants.h"
|
|
|
| namespace chromeos {
|
|
|
| DeviceDisabledScreen::DeviceDisabledScreen(ScreenObserver* observer,
|
| DeviceDisabledScreenActor* actor)
|
| : BaseScreen(observer),
|
| - actor_(actor) {
|
| + showing_(false),
|
| + actor_(actor),
|
| + weak_factory_(this) {
|
| DCHECK(actor_);
|
| if (actor_)
|
| actor_->SetDelegate(this);
|
| @@ -24,18 +37,61 @@ DeviceDisabledScreen::DeviceDisabledScreen(ScreenObserver* observer,
|
|
|
| DeviceDisabledScreen::~DeviceDisabledScreen() {
|
| if (actor_)
|
| - actor_->SetDelegate(NULL);
|
| + actor_->SetDelegate(nullptr);
|
| }
|
|
|
| void DeviceDisabledScreen::PrepareToShow() {
|
| }
|
|
|
| void DeviceDisabledScreen::Show() {
|
| - if (actor_)
|
| - actor_->Show();
|
| + if (!actor_ || showing_)
|
| + return;
|
| +
|
| + bool is_device_disabled = false;
|
| + g_browser_process->local_state()->GetDictionary(
|
| + prefs::kServerBackedDeviceState)->GetBoolean(policy::kDeviceStateDisabled,
|
| + &is_device_disabled);
|
| + if (!is_device_disabled ||
|
| + CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kDisableDeviceDisabling)) {
|
| + // Skip the screen if the device is not marked as disabled or device
|
| + // disabling has been turned off by flag.
|
| + IndicateDeviceNotDisabled();
|
| + return;
|
| + }
|
| +
|
| + policy::BrowserPolicyConnectorChromeOS* connector =
|
| + g_browser_process->platform_part()->browser_policy_connector_chromeos();
|
| + if (connector->GetDeviceMode() == policy::DEVICE_MODE_PENDING) {
|
| + // Ensure that the device mode is known before proceeding.
|
| + connector->GetInstallAttributes()->ReadImmutableAttributes(
|
| + base::Bind(&DeviceDisabledScreen::Show,
|
| + weak_factory_.GetWeakPtr()));
|
| + return;
|
| + }
|
| +
|
| + if (connector->GetDeviceMode() != policy::DEVICE_MODE_NOT_SET) {
|
| + // Skip the screen if the device is owned already. The device disabling
|
| + // screen should only be shown during OOBE.
|
| + IndicateDeviceNotDisabled();
|
| + return;
|
| + }
|
| +
|
| + showing_ = true;
|
| +
|
| + std::string message;
|
| + g_browser_process->local_state()->GetDictionary(
|
| + prefs::kServerBackedDeviceState)->GetString(
|
| + policy::kDeviceStateDisabledMessage,
|
| + &message);
|
| + actor_->Show(message);
|
| }
|
|
|
| void DeviceDisabledScreen::Hide() {
|
| + if (!showing_)
|
| + return;
|
| + showing_ = false;
|
| +
|
| if (actor_)
|
| actor_->Hide();
|
| }
|
| @@ -46,7 +102,11 @@ std::string DeviceDisabledScreen::GetName() const {
|
|
|
| void DeviceDisabledScreen::OnActorDestroyed(DeviceDisabledScreenActor* actor) {
|
| if (actor_ == actor)
|
| - actor_ = NULL;
|
| + actor_ = nullptr;
|
| +}
|
| +
|
| +void DeviceDisabledScreen::IndicateDeviceNotDisabled() {
|
| + get_screen_observer()->OnExit(ScreenObserver::DEVICE_NOT_DISABLED);
|
| }
|
|
|
| } // namespace chromeos
|
|
|