Commit e2fd4f2d authored by Danila Kuzmin's avatar Danila Kuzmin Committed by Commit Bot

cros oobe: Migrate wrong-hwid screen to polymer using oobe-dialog

Bug: 1007874
Change-Id: I501a90c677b05c87053a42920ed7eabdd9491752
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2230627
Commit-Queue: Danila Kuzmin <dkuzmin@google.com>
Reviewed-by: default avatarDenis Kuznetsov [CET] <antrim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#779967}
parent df7b50b8
......@@ -2191,7 +2191,7 @@
A factory error has been detected
</message>
<message name="IDS_WRONG_HWID_SCREEN_MESSAGE_FIRST_PART" desc="Warning message shown on screen notifying about malformed hardware ID. First paragraph.">
Unfortunately, your computer is configured with a malformed hardware ID. This prevents Chrome OS from updating with the latest security fixes and your computer <ph name="BEGIN_BOLD">$1</ph>may be vulnerable to malicious attacks<ph name="END_BOLD">$2</ph>.
Unfortunately, your computer is configured with a malformed hardware ID. This prevents Chrome OS from updating with the latest security fixes and your computer <ph name="BEGIN_BOLD">&lt;b&gt;</ph>may be vulnerable to malicious attacks<ph name="END_BOLD">&lt;/b&gt;</ph>.
</message>
<message name="IDS_WRONG_HWID_SCREEN_MESSAGE_SECOND_PART" desc="Warning message shown on screen notifying about malformed hardware ID. Second paragraph.">
Please contact your hardware manufacturer immediately to send your computer to a repair facility.
......
......@@ -150,8 +150,10 @@ bool IsHWIDCorrect(const std::string& hwid) {
}
bool IsMachineHWIDCorrect() {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
if (cmd_line->HasSwitch(chromeos::switches::kForceHWIDCheckFailureForTest))
return false;
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
if (cmd_line->HasSwitch(::switches::kTestType))
return true;
if (!base::SysInfo::IsRunningOnChromeOS())
......
......@@ -13,16 +13,25 @@ MockWrongHWIDScreen::MockWrongHWIDScreen(
MockWrongHWIDScreen::~MockWrongHWIDScreen() {}
void MockWrongHWIDScreen::ExitScreen() {
WrongHWIDScreen::OnExit();
}
MockWrongHWIDScreenView::MockWrongHWIDScreenView() = default;
MockWrongHWIDScreenView::~MockWrongHWIDScreenView() {
if (delegate_)
delegate_->OnViewDestroyed(this);
if (screen_)
screen_->OnViewDestroyed(this);
}
void MockWrongHWIDScreenView::Bind(WrongHWIDScreen* screen) {
screen_ = screen;
MockBind(screen_);
}
void MockWrongHWIDScreenView::SetDelegate(WrongHWIDScreen* delegate) {
delegate_ = delegate;
MockSetDelegate(delegate);
void MockWrongHWIDScreenView::Unbind() {
screen_ = nullptr;
MockUnbind();
}
} // namespace chromeos
......@@ -19,6 +19,8 @@ class MockWrongHWIDScreen : public WrongHWIDScreen {
MOCK_METHOD0(ShowImpl, void());
MOCK_METHOD0(HideImpl, void());
void ExitScreen();
};
class MockWrongHWIDScreenView : public WrongHWIDScreenView {
......@@ -26,14 +28,16 @@ class MockWrongHWIDScreenView : public WrongHWIDScreenView {
MockWrongHWIDScreenView();
~MockWrongHWIDScreenView() override;
void SetDelegate(WrongHWIDScreen* delegate) override;
void Bind(WrongHWIDScreen* screen) override;
void Unbind() override;
MOCK_METHOD0(Show, void());
MOCK_METHOD0(Hide, void());
MOCK_METHOD1(MockSetDelegate, void(WrongHWIDScreen*));
MOCK_METHOD1(MockBind, void(WrongHWIDScreen*));
MOCK_METHOD0(MockUnbind, void());
private:
WrongHWIDScreen* delegate_ = nullptr;
WrongHWIDScreen* screen_ = nullptr;
};
} // namespace chromeos
......
......@@ -7,6 +7,10 @@
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.h"
namespace {
constexpr char kUserActionSkip[] = "skip-screen";
} // namespace
namespace chromeos {
WrongHWIDScreen::WrongHWIDScreen(WrongHWIDScreenView* view,
......@@ -17,12 +21,12 @@ WrongHWIDScreen::WrongHWIDScreen(WrongHWIDScreenView* view,
exit_callback_(exit_callback) {
DCHECK(view_);
if (view_)
view_->SetDelegate(this);
view_->Bind(this);
}
WrongHWIDScreen::~WrongHWIDScreen() {
if (view_)
view_->SetDelegate(nullptr);
view_->Unbind();
}
void WrongHWIDScreen::OnExit() {
......@@ -46,4 +50,12 @@ void WrongHWIDScreen::HideImpl() {
view_->Hide();
}
void WrongHWIDScreen::OnUserAction(const std::string& action_id) {
if (action_id == kUserActionSkip) {
OnExit();
} else {
BaseScreen::OnUserAction(action_id);
}
}
} // namespace chromeos
......@@ -24,16 +24,26 @@ class WrongHWIDScreen : public BaseScreen {
const base::RepeatingClosure& exit_callback);
~WrongHWIDScreen() override;
// Called when screen is exited.
void OnExit();
// This method is called, when view is being destroyed. Note, if Delegate
// is destroyed earlier then it has to call SetDelegate(NULL).
void OnViewDestroyed(WrongHWIDScreenView* view);
void OnExit();
void set_exit_callback_for_testing(
const base::RepeatingClosure& exit_callback) {
exit_callback_ = exit_callback;
}
const base::RepeatingClosure& get_exit_callback_for_testing() {
return exit_callback_;
}
private:
// BaseScreen implementation:
void ShowImpl() override;
void HideImpl() override;
void OnUserAction(const std::string& action_id) override;
WrongHWIDScreenView* view_;
base::RepeatingClosure exit_callback_;
......
// Copyright 2020 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/wrong_hwid_screen.h"
#include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/test/js_checker.h"
#include "chrome/browser/chromeos/login/test/oobe_base_test.h"
#include "chrome/browser/chromeos/login/test/oobe_screen_exit_waiter.h"
#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
#include "chrome/browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.h"
#include "chromeos/constants/chromeos_switches.h"
#include "content/public/test/browser_test.h"
namespace chromeos {
class WrongHWIDScreenTest : public OobeBaseTest {
public:
WrongHWIDScreenTest() = default;
~WrongHWIDScreenTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
command_line->AppendSwitch(switches::kForceHWIDCheckFailureForTest);
OobeBaseTest::SetUpCommandLine(command_line);
}
};
IN_PROC_BROWSER_TEST_F(WrongHWIDScreenTest, BasicFlow) {
OobeScreenWaiter(WrongHWIDScreenView::kScreenId).Wait();
test::OobeJS().TapOnPath({"wrong-hwid", "skipButton"});
OobeScreenExitWaiter(WrongHWIDScreenView::kScreenId).Wait();
}
} // namespace chromeos
......@@ -417,8 +417,9 @@ void WizardController::Init(OobeScreenId first_screen) {
AdvanceToScreen(first_screen_);
if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() &&
first_screen_ == OobeScreen::SCREEN_UNKNOWN)
first_screen_ == OobeScreen::SCREEN_UNKNOWN) {
ShowWrongHWIDScreen();
}
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kOobeSkipToLogin)) {
......@@ -807,12 +808,7 @@ void WizardController::OnScreenExit(OobeScreenId screen,
// WizardController, ExitHandlers:
void WizardController::OnWrongHWIDScreenExit() {
OnScreenExit(WrongHWIDScreenView::kScreenId, kDefaultExitReason);
if (previous_screen_) {
SetCurrentScreen(previous_screen_);
} else {
ShowPackagedLicenseScreen();
}
OnDeviceModificationCanceled();
}
void WizardController::OnHidDetectionScreenExit() {
......@@ -1230,9 +1226,6 @@ void WizardController::OnDeviceModificationCanceled() {
if (previous_screen_) {
SetCurrentScreen(previous_screen_);
} else {
if (current_screen_)
current_screen_->Hide();
ShowPackagedLicenseScreen();
}
}
......
......@@ -566,7 +566,7 @@ class WizardControllerFlowTest : public WizardControllerTest {
base::Unretained(wizard_controller))));
mock_wrong_hwid_screen_view_ = std::make_unique<MockWrongHWIDScreenView>();
ExpectSetDelegate(mock_wrong_hwid_screen_view_.get());
ExpectBindUnbind(mock_wrong_hwid_screen_view_.get());
mock_wrong_hwid_screen_ =
MockScreenExpectLifecycle(std::make_unique<MockWrongHWIDScreen>(
mock_wrong_hwid_screen_view_.get(),
......@@ -974,7 +974,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest,
CheckCurrentScreen(WrongHWIDScreenView::kScreenId);
// Verify and clear all expectations on the mock wrong hid screen before
// Verify and clear all expectations on the mock wrong hwid screen before
// setting new ones.
testing::Mock::VerifyAndClearExpectations(mock_wrong_hwid_screen_);
......@@ -2918,8 +2918,6 @@ IN_PROC_BROWSER_TEST_F(WizardControllerOobeConfigurationTest,
EXPECT_FALSE(configuration->DictEmpty());
}
// TODO(dzhioev): Add test emulating device with wrong HWID.
// TODO(nkostylev): Add test for WebUI accelerators http://crosbug.com/22571
// TODO(merkulova): Add tests for bluetooth HID detection screen variations when
......
......@@ -57,7 +57,6 @@
<link rel="stylesheet" href="oobe_screen_supervision_transition.css">
<link rel="stylesheet" href="screen_app_launch_splash.css">
<link rel="stylesheet" href="screen_error_message.css">
<link rel="stylesheet" href="screen_wrong_hwid.css">
<link rel="stylesheet" href="screen_fatal_error.css">
<link rel="stylesheet" href="screen_active_directory_password_change.css">
......
......@@ -27,7 +27,6 @@
// <include src="screen_app_launch_splash.js">
// <include src="screen_arc_terms_of_service.js">
// <include src="screen_error_message.js">
// <include src="screen_wrong_hwid.js">
// <include src="screen_fatal_error.js">
// <include src="screen_active_directory_password_change.js">
// <include src="screen_encryption_migration.js">
......@@ -58,7 +57,6 @@ cr.define('cr.ui.Oobe', function() {
*/
initialize() {
cr.ui.login.DisplayManager.initialize();
login.WrongHWIDScreen.register();
login.AccountPickerScreen.register();
login.AutolaunchScreen.register();
login.ErrorMessageScreen.register();
......
......@@ -62,7 +62,6 @@
<link rel="stylesheet" href="screen_app_launch_splash.css">
<link rel="stylesheet" href="screen_error_message.css">
<link rel="stylesheet" href="screen_wrong_hwid.css">
<link rel="stylesheet" href="screen_fatal_error.css">
<script src="chrome://oobe/keyboard_utils.js"></script>
......
......@@ -27,7 +27,6 @@
// <include src="screen_app_launch_splash.js">
// <include src="screen_arc_terms_of_service.js">
// <include src="screen_error_message.js">
// <include src="screen_wrong_hwid.js">
// <include src="screen_fatal_error.js">
// <include src="screen_sync_consent.js">
// <include src="screen_app_downloading.js">
......@@ -51,7 +50,6 @@ cr.define('cr.ui.Oobe', function() {
*/
initialize() {
cr.ui.login.DisplayManager.initialize();
login.WrongHWIDScreen.register();
login.EulaScreen.register();
login.AutoEnrollmentCheckScreen.register();
login.EnableDebuggingScreen.register();
......
/* Copyright (c) 2013 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.
*
* This is the stylesheet used by the wrong HWID screen. */
#wrong-hwid {
padding: 40px 17px 30px;
text-align: center;
width: 722px;
}
#wrong-hwid #wrong-hwid-message-header {
color: #606060;
font-size: 22px;
padding: 5px 40px 30px;
}
#wrong-hwid #wrong-hwid-icon {
height: 112px;
}
#wrong-hwid #wrong-hwid-message-content {
color: #606060;
font-size: 16px;
padding: 20px 40px 40px;
}
#skip-hwid-warning {
justify-content: center;
}
#skip-hwid-warning-link {
color: #8c8c8c;
font-size: 18px;
text-decoration: none;
}
<div class="step hidden" id="wrong-hwid" hidden>
<div class="step-contents">
<div id="wrong-hwid-message">
<div id="wrong-hwid-message-header" i18n-content="wrongHWIDScreenHeader">
<!-- Copyright 2020 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. -->
<dom-module id="wrong-hwid">
<template>
<style include="oobe-dialog-host"></style>
<oobe-dialog role="dialog" has-buttons
title-key="wrongHWIDScreenHeader">
<hd-iron-icon slot="oobe-icon" class="warning"
icon1x="oobe-32:warning" icon2x="oobe-64:warning">
</hd-iron-icon>
<div slot="subtitle">
<p><html-echo content="[[formattedFirstPart_(locale)]]"></html-echo></p>
<p>[[i18nDynamic(locale, 'wrongHWIDMessageSecondPart')]]</p>
</div>
<img id="wrong-hwid-icon" src="chrome://theme/IDR_RESET_WARNING"/>
<div id="wrong-hwid-message-content"></div>
</div>
<div id="skip-hwid-warning" class="step-controls">
<a id="skip-hwid-warning-link" href="#"
i18n-content="wrongHWIDScreenSkipLink"></a>
</div>
</div>
</div>
<div slot="bottom-buttons" class="layout horizontal end-justified">
<oobe-text-button id="skipButton" inverse
text-key="wrongHWIDScreenSkipLink" on-tap="onSkip_">
</oobe-text-button>
</div>
</oobe-dialog>
</template>
</dom-module>
......@@ -6,30 +6,27 @@
* @fileoverview wrong HWID screen implementation.
*/
login.createScreen('WrongHWIDScreen', 'wrong-hwid', function() {
return {
/** @override */
decorate() {
$('skip-hwid-warning-link').addEventListener('click', function(event) {
chrome.send('wrongHWIDOnSkip');
});
this.updateLocalizedContent();
},
Polymer({
is: 'wrong-hwid',
/** Initial UI State for screen */
getOobeUIInitialState() {
return OOBE_UI_STATE.WRONG_HWID_WARNING;
},
behaviors: [OobeI18nBehavior, OobeDialogHostBehavior, LoginScreenBehavior],
/**
* Updates localized content of the screen that is not updated via template.
*/
updateLocalizedContent() {
$('wrong-hwid-message-content').innerHTML = '<p>' +
loadTimeData.getStringF(
'wrongHWIDMessageFirstPart', '<strong>', '</strong>') +
'</p><p>' + loadTimeData.getString('wrongHWIDMessageSecondPart') +
'</p>';
}
};
ready() {
this.initializeLoginScreen('WrongHWIDMessageScreen', {
resetAllowed: true,
});
},
/** Initial UI State for screen */
getOobeUIInitialState() {
return OOBE_UI_STATE.WRONG_HWID_WARNING;
},
onSkip_() {
this.userActed('skip-screen');
},
formattedFirstPart_(locale) {
return this.i18nAdvanced('wrongHWIDMessageFirstPart');
},
});
......@@ -49,6 +49,7 @@
<include src="../gesture_navigation.html">
<include src="../screen_tpm_error.html">
<include src="../device_disabled.html">
<include src="../screen_wrong_hwid.html">
<include src="components_[OOBE].html">
......
......@@ -48,5 +48,6 @@
// <include src="../gesture_navigation.js">
// <include src="../screen_tpm_error.js">
// <include src="../device_disabled.js">
// <include src="../screen_wrong_hwid.js">
// <include src="components_[OOBE].js">
......@@ -17,7 +17,7 @@
</gaia-signin>
<tpm-error-message id="tpm-error-message" class="step faded hidden">
</tpm-error-message>
<include src="../screen_wrong_hwid.html">
<wrong-hwid id="wrong-hwid" class="step hidden"></wrong-hwid>
<include src="../screen_app_launch_splash.html">
<saml-confirm-password id="saml-confirm-password" class="step hidden" hidden>
</saml-confirm-password>
......
......@@ -16,11 +16,12 @@ constexpr StaticOobeScreenId WrongHWIDScreenView::kScreenId;
WrongHWIDScreenHandler::WrongHWIDScreenHandler(
JSCallsContainer* js_calls_container)
: BaseScreenHandler(kScreenId, js_calls_container) {
set_user_acted_method_path("login.WrongHWIDMessageScreen.userActed");
}
WrongHWIDScreenHandler::~WrongHWIDScreenHandler() {
if (delegate_)
delegate_->OnViewDestroyed(this);
if (screen_)
screen_->OnViewDestroyed(this);
}
void WrongHWIDScreenHandler::Show() {
......@@ -34,10 +35,14 @@ void WrongHWIDScreenHandler::Show() {
void WrongHWIDScreenHandler::Hide() {
}
void WrongHWIDScreenHandler::SetDelegate(WrongHWIDScreen* delegate) {
delegate_ = delegate;
if (page_is_ready())
Initialize();
void WrongHWIDScreenHandler::Bind(WrongHWIDScreen* screen) {
screen_ = screen;
BaseScreenHandler::SetBaseScreen(screen_);
}
void WrongHWIDScreenHandler::Unbind() {
screen_ = nullptr;
BaseScreenHandler::SetBaseScreen(nullptr);
}
void WrongHWIDScreenHandler::DeclareLocalizedValues(
......@@ -52,22 +57,10 @@ void WrongHWIDScreenHandler::DeclareLocalizedValues(
}
void WrongHWIDScreenHandler::Initialize() {
if (!page_is_ready() || !delegate_)
return;
if (show_on_init_) {
Show();
show_on_init_ = false;
Show();
}
}
void WrongHWIDScreenHandler::RegisterMessages() {
AddCallback("wrongHWIDOnSkip", &WrongHWIDScreenHandler::HandleOnSkip);
}
void WrongHWIDScreenHandler::HandleOnSkip() {
if (delegate_)
delegate_->OnExit();
}
} // namespace chromeos
......@@ -23,7 +23,12 @@ class WrongHWIDScreenView {
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(WrongHWIDScreen* delegate) = 0;
// Binds |screen| to the view.
virtual void Bind(WrongHWIDScreen* screen) = 0;
// Unbinds the screen from the view.
virtual void Unbind() = 0;
};
// WebUI implementation of WrongHWIDScreenActor.
......@@ -35,24 +40,19 @@ class WrongHWIDScreenHandler : public WrongHWIDScreenView,
explicit WrongHWIDScreenHandler(JSCallsContainer* js_calls_container);
~WrongHWIDScreenHandler() override;
private:
// WrongHWIDScreenActor implementation:
void Show() override;
void Hide() override;
void SetDelegate(WrongHWIDScreen* delegate) override;
void Bind(WrongHWIDScreen* screen) override;
void Unbind() override;
// BaseScreenHandler implementation:
void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override;
void Initialize() override;
// WebUIMessageHandler implementation:
void RegisterMessages() override;
private:
// JS messages handlers.
void HandleOnSkip();
WrongHWIDScreen* delegate_ = nullptr;
WrongHWIDScreen* screen_ = nullptr;
// Keeps whether screen should be shown right after initialization.
bool show_on_init_ = false;
......@@ -63,4 +63,3 @@ class WrongHWIDScreenHandler : public WrongHWIDScreenView,
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_WRONG_HWID_SCREEN_HANDLER_H_
......@@ -2263,6 +2263,7 @@ if (!is_android) {
"../browser/chromeos/login/screens/update_screen_browsertest.cc",
"../browser/chromeos/login/screens/user_selection_screen_browsertest.cc",
"../browser/chromeos/login/screens/welcome_screen_browsertest.cc",
"../browser/chromeos/login/screens/wrong_hwid_screen_browsertest.cc",
"../browser/chromeos/login/session/chrome_session_manager_browsertest.cc",
"../browser/chromeos/login/session_login_browsertest.cc",
"../browser/chromeos/login/signin/device_id_browsertest.cc",
......
......@@ -358,6 +358,11 @@ const char kForceFirstRunUI[] = "force-first-run-ui";
// for any type of user. Should be used only for testing.
const char kForceHappinessTrackingSystem[] = "force-happiness-tracking-system";
// Forces Hardware ID check (happens during OOBE) to fail. Should be used only
// for testing.
const char kForceHWIDCheckFailureForTest[] =
"force-hwid-check-failure-for-test";
// Usually in browser tests the usual login manager bringup is skipped so that
// tests can change how it's brought up. This flag disables that.
const char kForceLoginManagerInTests[] = "force-login-manager-in-tests";
......
......@@ -150,6 +150,8 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const char kForceFirstRunUI[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kForceHappinessTrackingSystem[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kForceHWIDCheckFailureForTest[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kForceLoginManagerInTests[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kForceSystemCompositorMode[];
......
......@@ -31,7 +31,6 @@
/** @const */ var SCREEN_KIOSK_ENABLE = 'kiosk-enable';
/** @const */ var SCREEN_TERMS_OF_SERVICE = 'terms-of-service';
/** @const */ var SCREEN_ARC_TERMS_OF_SERVICE = 'arc-tos';
/** @const */ var SCREEN_WRONG_HWID = 'wrong-hwid';
/** @const */ var SCREEN_DEVICE_DISABLED = 'device-disabled';
/** @const */ var SCREEN_UPDATE_REQUIRED = 'update-required';
/** @const */ var SCREEN_ACTIVE_DIRECTORY_PASSWORD_CHANGE =
......@@ -102,7 +101,6 @@ cr.define('cr.ui.login', function() {
SCREEN_ERROR_MESSAGE,
SCREEN_PASSWORD_CHANGED,
SCREEN_ARC_TERMS_OF_SERVICE,
SCREEN_WRONG_HWID,
SCREEN_CONFIRM_PASSWORD,
SCREEN_UPDATE_REQUIRED,
SCREEN_FATAL_ERROR,
......
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