Commit 2edfb70f authored by bartfab's avatar bartfab Committed by Commit bot

Add a "device disabled" OOBE screen

This screen will be shown when the owner/administrator remotely disables
a device. The CL only adds the screen. A follow-up CL will hook it up
with the OOBE flow.

The UI and strings are still under review and may change slightly before
this feature launches.

BUG=425574
TEST=Manual

Review URL: https://codereview.chromium.org/669623006

Cr-Commit-Position: refs/heads/master@{#300731}
parent 410c610d
......@@ -5073,6 +5073,15 @@ Battery full
<message name="IDS_LOGIN_CONNECTING_INDICATOR_TEXT" desc="A message to show telling the user that the device is attempting to re-connect to the network.">
Connecting and verifying<ph name="ANIMATED_ELLIPSIS">$1<ex>...</ex></ph>
</message>
<message name="IDS_DEVICE_DISABLED_HEADING" desc="Heading of the message shown to the user when the device has been disabled by its owner.">
Locked
</message>
<message name="IDS_DEVICE_DISABLED_DEFAULT_MESSAGE" desc="Messsage shown to the user when the device has been disabled by its owner.">
Please return this device to its owner.
</message>
<message name="IDS_DEVICE_DISABLED_EXPLANATION" desc="Explanation shown to the user when the device has been disabled by its owner.">
This device was locked by its owner. Only an approved administrator can unlock it. Take this device to Tech Support for assistance.
</message>
<!-- Idle warning dialog -->
<message name="IDS_IDLE_WARNING_TITLE" desc="Title of the warning dialog shown when the user becomes idle and is about to get logged out.">
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/login/screens/device_disabled_screen.h"
#include <string>
#include "base/logging.h"
#include "base/values.h"
#include "chrome/browser/chromeos/login/screens/screen_observer.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
namespace chromeos {
DeviceDisabledScreen::DeviceDisabledScreen(ScreenObserver* observer,
DeviceDisabledScreenActor* actor)
: BaseScreen(observer),
actor_(actor) {
DCHECK(actor_);
if (actor_)
actor_->SetDelegate(this);
}
DeviceDisabledScreen::~DeviceDisabledScreen() {
if (actor_)
actor_->SetDelegate(NULL);
}
void DeviceDisabledScreen::PrepareToShow() {
}
void DeviceDisabledScreen::Show() {
if (actor_)
actor_->Show();
}
void DeviceDisabledScreen::Hide() {
if (actor_)
actor_->Hide();
}
std::string DeviceDisabledScreen::GetName() const {
return WizardController::kDeviceDisabledScreenName;
}
void DeviceDisabledScreen::OnActorDestroyed(DeviceDisabledScreenActor* actor) {
if (actor_ == actor)
actor_ = NULL;
}
} // namespace chromeos
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_H_
#include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen_actor.h"
namespace chromeos {
class ScreenObserver;
// Screen informing the user that the device has been disabled by its owner.
class DeviceDisabledScreen : public BaseScreen,
public DeviceDisabledScreenActor::Delegate {
public:
DeviceDisabledScreen(ScreenObserver* observer,
DeviceDisabledScreenActor* actor);
~DeviceDisabledScreen() override;
// BaseScreen:
void PrepareToShow() override;
void Show() override;
void Hide() override;
std::string GetName() const override;
// DeviceDisabledScreenActor::Delegate:
void OnActorDestroyed(DeviceDisabledScreenActor* actor) override;
private:
DeviceDisabledScreenActor* actor_;
DISALLOW_COPY_AND_ASSIGN(DeviceDisabledScreen);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_H_
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_ACTOR_H_
namespace chromeos {
// Interface between the device disabled screen and its representation.
class DeviceDisabledScreenActor {
public:
// Allows the representation to access information about the screen.
class Delegate {
public:
virtual ~Delegate() {
}
// Called when the actor is being destroyed. Note that if the Delegate is
// destroyed first, it must call SetDelegate(nullptr).
virtual void OnActorDestroyed(DeviceDisabledScreenActor* actor) = 0;
};
virtual ~DeviceDisabledScreenActor() {
}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(Delegate* delegate) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_ACTOR_H_
......@@ -16,6 +16,7 @@ class AppLaunchSplashScreenActor;
class AutoEnrollmentCheckScreenActor;
class CoreOobeActor;
class ControllerPairingScreenActor;
class DeviceDisabledScreenActor;
class EnrollmentScreenActor;
class ErrorScreenActor;
class EulaScreenActor;
......@@ -60,6 +61,7 @@ class OobeDisplay {
SCREEN_FATAL_ERROR,
SCREEN_OOBE_CONTROLLER_PAIRING,
SCREEN_OOBE_HOST_PAIRING,
SCREEN_DEVICE_DISABLED,
SCREEN_UNKNOWN
};
......@@ -87,6 +89,7 @@ class OobeDisplay {
virtual AppLaunchSplashScreenActor* GetAppLaunchSplashScreenActor() = 0;
virtual ControllerPairingScreenActor* GetControllerPairingScreenActor() = 0;
virtual HostPairingScreenActor* GetHostPairingScreenActor() = 0;
virtual DeviceDisabledScreenActor* GetDeviceDisabledScreenActor() = 0;
// Returns if JS side is fully loaded and ready to accept messages.
// If |false| is returned, then |display_is_ready_callback| is stored
......
......@@ -33,6 +33,7 @@
#include "chrome/browser/chromeos/login/hwid_checker.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/screens/controller_pairing_screen.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen.h"
#include "chrome/browser/chromeos/login/screens/error_screen.h"
#include "chrome/browser/chromeos/login/screens/eula_screen.h"
#include "chrome/browser/chromeos/login/screens/hid_detection_screen.h"
......@@ -166,6 +167,7 @@ const char WizardController::kHIDDetectionScreenName[] = "hid-detection";
const char WizardController::kControllerPairingScreenName[] =
"controller-pairing";
const char WizardController::kHostPairingScreenName[] = "host-pairing";
const char WizardController::kDeviceDisabledScreenName[] = "device-disabled";
// static
const int WizardController::kMinAudibleOutputVolumePercent = 10;
......@@ -347,7 +349,11 @@ BaseScreen* WizardController::CreateScreen(const std::string& screen_name) {
return new HostPairingScreen(this,
oobe_display_->GetHostPairingScreenActor(),
remora_controller_.get());
} else if (screen_name == kDeviceDisabledScreenName) {
return new chromeos::DeviceDisabledScreen(
this, oobe_display_->GetDeviceDisabledScreenActor());
}
return NULL;
}
......@@ -517,6 +523,12 @@ void WizardController::ShowHostPairingScreen() {
SetCurrentScreen(GetScreen(kHostPairingScreenName));
}
void WizardController::ShowDeviceDisabledScreen() {
VLOG(1) << "Showing device disabled screen.";
SetStatusAreaVisible(true);
SetCurrentScreen(GetScreen(kDeviceDisabledScreenName));
}
void WizardController::SkipToLoginForTesting(
const LoginScreenContext& context) {
VLOG(1) << "SkipToLoginForTesting.";
......@@ -894,6 +906,8 @@ void WizardController::AdvanceToScreen(const std::string& screen_name) {
ShowControllerPairingScreen();
} else if (screen_name == kHostPairingScreenName) {
ShowHostPairingScreen();
} else if (screen_name == kDeviceDisabledScreenName) {
ShowDeviceDisabledScreen();
} else if (screen_name != kTestNoScreenName) {
if (is_out_of_box_) {
time_oobe_started_ = base::Time::Now();
......
......@@ -158,6 +158,7 @@ class WizardController : public ScreenObserver, public ScreenManager {
static const char kHIDDetectionScreenName[];
static const char kControllerPairingScreenName[];
static const char kHostPairingScreenName[];
static const char kDeviceDisabledScreenName[];
// Volume percent at which spoken feedback is still audible.
static const int kMinAudibleOutputVolumePercent;
......@@ -179,6 +180,7 @@ class WizardController : public ScreenObserver, public ScreenManager {
void ShowHIDDetectionScreen();
void ShowControllerPairingScreen();
void ShowHostPairingScreen();
void ShowDeviceDisabledScreen();
// Shows images login screen.
void ShowLoginScreen(const LoginScreenContext& context);
......
......@@ -31,6 +31,7 @@ cr.define('cr.ui.Oobe', function() {
login.AppLaunchSplashScreen.register();
login.ConfirmPasswordScreen.register();
login.FatalErrorScreen.register();
login.DeviceDisabledScreen.register();
cr.ui.Bubble.decorate($('bubble'));
login.HeaderBar.decorate($('login-header-bar'));
......
......@@ -30,6 +30,7 @@
<include src="screen_wrong_hwid.js">
<include src="screen_confirm_password.js">
<include src="screen_fatal_error.js">
<include src="screen_device_disabled.js">
<include src="../../../../../ui/login/login_ui_tools.js">
<include src="../../../../../ui/login/account_picker/user_pod_row.js">
<include src="../../../../../ui/login/resource_loader.js">
......
......@@ -36,6 +36,7 @@
<link rel="stylesheet" href="screen_supervised_user_creation.css">
<link rel="stylesheet" href="screen_confirm_password.css">
<link rel="stylesheet" href="screen_fatal_error.css">
<link rel="stylesheet" href="screen_device_disabled.css">
<link rel="stylesheet" href="../../../../../ui/login/account_picker/user_pod_row.css">
<link rel="stylesheet" href="../../options/chromeos/bluetooth.css">
<script src="chrome://resources/js/cr.js"></script>
......
......@@ -13,3 +13,4 @@
<include src="screen_app_launch_splash.html">
<include src="screen_confirm_password.html">
<include src="screen_fatal_error.html">
<include src="screen_device_disabled.html">
......@@ -94,6 +94,7 @@ cr.define('cr.ui.Oobe', function() {
login.FatalErrorScreen.register();
login.ControllerPairingScreen.register();
login.HostPairingScreen.register();
login.DeviceDisabledScreen.register();
cr.ui.Bubble.decorate($('bubble'));
login.HeaderBar.decorate($('login-header-bar'));
......
......@@ -20,3 +20,4 @@
<include src="screen_app_launch_splash.html">
<include src="screen_confirm_password.html">
<include src="screen_fatal_error.html">
<include src="screen_device_disabled.html">
/* Copyright 2014 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#device-disabled,
#device-disabled-top-container {
display: flex;
flex-direction: column;
}
#device-disabled {
font-size: 12px;
width: 330px;
}
#device-disabled-top-container {
background-color: rgb(214, 0, 0);
color: white;
text-align: center;
}
#device-disabled-heading {
font-size: 16px;
margin: 60px 20px 0;
}
#device-disabled-message {
font-weight: bold;
margin: 20px;
max-height: 400px;
overflow: auto;
white-space: pre-wrap;
}
#device-disabled-bottom-container {
background-color: white;
}
#device-disabled-explanation {
margin: 25px 20px 45px
}
<div id="device-disabled" class="step hidden no-logo" role="group" hidden>
<div id="device-disabled-top-container">
<div id="device-disabled-heading" i18n-content="deviceDisabledHeading">
</div>
<div id="device-disabled-message"></div>
</div>
<div id="device-disabled-bottom-container">
<div id="device-disabled-explanation"
i18n-content="deviceDisabledExplanation">
</div>
</div>
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Device disabled screen implementation.
*/
login.createScreen('DeviceDisabledScreen', 'device-disabled', function() {
return {
EXTERNAL_API: [
'setMessage'
],
/**
* Event handler that is invoked just before the screen in shown.
*/
onBeforeShow: function() {
$('progress-dots').hidden = true;
},
/**
* Sets the message to show to the user. If |message| is empty, a default
* message will be shown.
* @param {string} message The message to show to the user.
* @private
*/
setMessage: function(message) {
$('device-disabled-message').textContent =
message || loadTimeData.getString('deviceDisabledDefaultMessage');
}
};
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/grit/generated_resources.h"
namespace {
const char kJsScreenPath[] = "login.DeviceDisabledScreen";
} // namespace
namespace chromeos {
DeviceDisabledScreenHandler::DeviceDisabledScreenHandler()
: BaseScreenHandler(kJsScreenPath),
delegate_(NULL),
show_on_init_(false) {
}
DeviceDisabledScreenHandler::~DeviceDisabledScreenHandler() {
if (delegate_)
delegate_->OnActorDestroyed(this);
}
void DeviceDisabledScreenHandler::Show() {
if (!page_is_ready()) {
show_on_init_ = true;
return;
}
ShowScreen(OobeUI::kScreenDeviceDisabled, NULL);
}
void DeviceDisabledScreenHandler::Hide() {
show_on_init_ = false;
}
void DeviceDisabledScreenHandler::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
if (page_is_ready())
Initialize();
}
void DeviceDisabledScreenHandler::DeclareLocalizedValues(
LocalizedValuesBuilder* builder) {
builder->Add("deviceDisabledHeading", IDS_DEVICE_DISABLED_HEADING);
builder->Add("deviceDisabledDefaultMessage",
IDS_DEVICE_DISABLED_DEFAULT_MESSAGE);
builder->Add("deviceDisabledExplanation", IDS_DEVICE_DISABLED_EXPLANATION);
}
void DeviceDisabledScreenHandler::Initialize() {
if (!page_is_ready() || !delegate_)
return;
if (show_on_init_) {
Show();
show_on_init_ = false;
}
}
void DeviceDisabledScreenHandler::RegisterMessages() {
}
} // namespace chromeos
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DEVICE_DISABLED_SCREEN_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DEVICE_DISABLED_SCREEN_HANDLER_H_
#include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen_actor.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
namespace chromeos {
// WebUI implementation of DeviceDisabledScreenActor.
class DeviceDisabledScreenHandler : public DeviceDisabledScreenActor,
public BaseScreenHandler {
public:
DeviceDisabledScreenHandler();
~DeviceDisabledScreenHandler() override;
// DeviceDisabledScreenActor:
void Show() override;
void Hide() override;
void SetDelegate(Delegate* delegate) override;
// BaseScreenHandler:
void DeclareLocalizedValues(LocalizedValuesBuilder* builder) override;
void Initialize() override;
private:
// WebUIMessageHandler:
void RegisterMessages() override;
Delegate* delegate_;
// Indicates whether the screen should be shown right after initialization.
bool show_on_init_;
DISALLOW_COPY_AND_ASSIGN(DeviceDisabledScreenHandler);
};
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DEVICE_DISABLED_SCREEN_HANDLER_H_
......@@ -23,6 +23,7 @@
#include "chrome/browser/ui/webui/chromeos/login/auto_enrollment_check_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h"
......@@ -178,6 +179,7 @@ const char OobeUI::kScreenConfirmPassword[] = "confirm-password";
const char OobeUI::kScreenFatalError[] = "fatal-error";
const char OobeUI::kScreenControllerPairing[] = "controller-pairing";
const char OobeUI::kScreenHostPairing[] = "host-pairing";
const char OobeUI::kScreenDeviceDisabled[] = "device-disabled";
OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
: WebUIController(web_ui),
......@@ -193,6 +195,10 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
wrong_hwid_screen_actor_(NULL),
auto_enrollment_check_screen_actor_(NULL),
supervised_user_creation_screen_actor_(NULL),
app_launch_splash_screen_actor_(NULL),
controller_pairing_screen_actor_(NULL),
host_pairing_screen_actor_(NULL),
device_disabled_screen_actor_(NULL),
error_screen_handler_(NULL),
signin_screen_handler_(NULL),
terms_of_service_screen_actor_(NULL),
......@@ -316,6 +322,11 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
AddScreenHandler(handler);
}
DeviceDisabledScreenHandler* device_disabled_screen_handler =
new DeviceDisabledScreenHandler;
device_disabled_screen_actor_ = device_disabled_screen_handler;
AddScreenHandler(device_disabled_screen_handler);
// Initialize KioskAppMenuHandler. Note that it is NOT a screen handler.
kiosk_app_menu_handler_ = new KioskAppMenuHandler(network_state_informer_);
web_ui->AddMessageHandler(kiosk_app_menu_handler_);
......@@ -405,6 +416,10 @@ HostPairingScreenActor* OobeUI::GetHostPairingScreenActor() {
return host_pairing_screen_actor_;
}
DeviceDisabledScreenActor* OobeUI::GetDeviceDisabledScreenActor() {
return device_disabled_screen_actor_;
}
UserImageScreenActor* OobeUI::GetUserImageScreenActor() {
return user_image_screen_actor_;
}
......@@ -480,6 +495,7 @@ void OobeUI::InitializeScreenMaps() {
screen_names_[SCREEN_FATAL_ERROR] = kScreenFatalError;
screen_names_[SCREEN_OOBE_CONTROLLER_PAIRING] = kScreenControllerPairing;
screen_names_[SCREEN_OOBE_HOST_PAIRING] = kScreenHostPairing;
screen_names_[SCREEN_DEVICE_DISABLED] = kScreenDeviceDisabled;
screen_ids_.clear();
for (size_t i = 0; i < screen_names_.size(); ++i)
......
......@@ -24,6 +24,7 @@ namespace chromeos {
class AppLaunchSplashScreenActor;
class BaseScreenHandler;
class ControllerPairingScreenActor;
class DeviceDisabledScreenActor;
class ErrorScreenHandler;
class HostPairingScreenActor;
class KioskAppMenuHandler;
......@@ -85,6 +86,7 @@ class OobeUI : public OobeDisplay,
static const char kScreenHIDDetection[];
static const char kScreenControllerPairing[];
static const char kScreenHostPairing[];
static const char kScreenDeviceDisabled[];
OobeUI(content::WebUI* web_ui, const GURL& url);
virtual ~OobeUI();
......@@ -115,6 +117,7 @@ class OobeUI : public OobeDisplay,
virtual ControllerPairingScreenActor* GetControllerPairingScreenActor()
override;
virtual HostPairingScreenActor* GetHostPairingScreenActor() override;
DeviceDisabledScreenActor* GetDeviceDisabledScreenActor() override;
// Collects localized strings from the owned handlers.
void GetLocalizedStrings(base::DictionaryValue* localized_strings);
......@@ -197,6 +200,7 @@ class OobeUI : public OobeDisplay,
AppLaunchSplashScreenActor* app_launch_splash_screen_actor_;
ControllerPairingScreenActor* controller_pairing_screen_actor_;
HostPairingScreenActor* host_pairing_screen_actor_;
DeviceDisabledScreenActor* device_disabled_screen_actor_;
// Reference to ErrorScreenHandler that handles error screen
// requests and forward calls from native code to JS side.
......
......@@ -494,6 +494,9 @@
'browser/chromeos/login/screens/controller_pairing_screen_actor.cc',
'browser/chromeos/login/screens/controller_pairing_screen_actor.h',
'browser/chromeos/login/screens/core_oobe_actor.h',
'browser/chromeos/login/screens/device_disabled_screen.cc',
'browser/chromeos/login/screens/device_disabled_screen.h',
'browser/chromeos/login/screens/device_disabled_screen_actor.h',
'browser/chromeos/login/screens/error_screen.cc',
'browser/chromeos/login/screens/error_screen.h',
'browser/chromeos/login/screens/error_screen_actor.cc',
......
......@@ -964,6 +964,8 @@
'browser/ui/webui/chromeos/login/core_oobe_handler.h',
'browser/ui/webui/chromeos/login/demo_mode_detector.cc',
'browser/ui/webui/chromeos/login/demo_mode_detector.h',
'browser/ui/webui/chromeos/login/device_disabled_screen_handler.cc',
'browser/ui/webui/chromeos/login/device_disabled_screen_handler.h',
'browser/ui/webui/chromeos/login/enrollment_screen_handler.cc',
'browser/ui/webui/chromeos/login/enrollment_screen_handler.h',
'browser/ui/webui/chromeos/login/error_screen_handler.cc',
......
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