Commit 9afe1f75 authored by Jacob Dufault's avatar Jacob Dufault Committed by Commit Bot

cros: Move *View classes into *Handler types

- DeviceDisabledScreenView
- EnableDebuggingScreenView
- EncryptionMigrationScreenView
- FingerprintSetupScreenView
- KioskAutoluanchScreenView

Also eliminate unnecessary Delegate classes on the views.

Bug: 928555
Change-Id: Ifd45f381f2fb9aaae60dbe3ec6ea1287424980bf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1572521
Commit-Queue: Jacob Dufault <jdufault@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652677}
parent 4a0a88d9
...@@ -1275,29 +1275,24 @@ source_set("chromeos") { ...@@ -1275,29 +1275,24 @@ source_set("chromeos") {
"login/screens/demo_setup_screen.h", "login/screens/demo_setup_screen.h",
"login/screens/device_disabled_screen.cc", "login/screens/device_disabled_screen.cc",
"login/screens/device_disabled_screen.h", "login/screens/device_disabled_screen.h",
"login/screens/device_disabled_screen_view.h",
"login/screens/discover_screen.cc", "login/screens/discover_screen.cc",
"login/screens/discover_screen.h", "login/screens/discover_screen.h",
"login/screens/enable_debugging_screen.cc", "login/screens/enable_debugging_screen.cc",
"login/screens/enable_debugging_screen.h", "login/screens/enable_debugging_screen.h",
"login/screens/enable_debugging_screen_view.h",
"login/screens/encryption_migration_screen.cc", "login/screens/encryption_migration_screen.cc",
"login/screens/encryption_migration_screen.h", "login/screens/encryption_migration_screen.h",
"login/screens/encryption_migration_screen_view.h",
"login/screens/error_screen.cc", "login/screens/error_screen.cc",
"login/screens/error_screen.h", "login/screens/error_screen.h",
"login/screens/eula_screen.cc", "login/screens/eula_screen.cc",
"login/screens/eula_screen.h", "login/screens/eula_screen.h",
"login/screens/fingerprint_setup_screen.cc", "login/screens/fingerprint_setup_screen.cc",
"login/screens/fingerprint_setup_screen.h", "login/screens/fingerprint_setup_screen.h",
"login/screens/fingerprint_setup_screen_view.h",
"login/screens/gaia_screen.cc", "login/screens/gaia_screen.cc",
"login/screens/gaia_screen.h", "login/screens/gaia_screen.h",
"login/screens/hid_detection_screen.cc", "login/screens/hid_detection_screen.cc",
"login/screens/hid_detection_screen.h", "login/screens/hid_detection_screen.h",
"login/screens/kiosk_autolaunch_screen.cc", "login/screens/kiosk_autolaunch_screen.cc",
"login/screens/kiosk_autolaunch_screen.h", "login/screens/kiosk_autolaunch_screen.h",
"login/screens/kiosk_autolaunch_screen_view.h",
"login/screens/kiosk_enable_screen.cc", "login/screens/kiosk_enable_screen.cc",
"login/screens/kiosk_enable_screen.h", "login/screens/kiosk_enable_screen.h",
"login/screens/marketing_opt_in_screen.cc", "login/screens/marketing_opt_in_screen.cc",
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
namespace chromeos { namespace chromeos {
...@@ -29,6 +30,23 @@ DeviceDisabledScreen::~DeviceDisabledScreen() { ...@@ -29,6 +30,23 @@ DeviceDisabledScreen::~DeviceDisabledScreen() {
view_->SetDelegate(nullptr); view_->SetDelegate(nullptr);
} }
void DeviceDisabledScreen::OnViewDestroyed(DeviceDisabledScreenView* view) {
if (view_ == view)
view_ = nullptr;
}
const std::string& DeviceDisabledScreen::GetEnrollmentDomain() const {
return DeviceDisablingManager()->enrollment_domain();
}
const std::string& DeviceDisabledScreen::GetMessage() const {
return DeviceDisablingManager()->disabled_message();
}
const std::string& DeviceDisabledScreen::GetSerialNumber() const {
return DeviceDisablingManager()->serial_number();
}
void DeviceDisabledScreen::Show() { void DeviceDisabledScreen::Show() {
if (!view_ || showing_) if (!view_ || showing_)
return; return;
...@@ -50,23 +68,6 @@ void DeviceDisabledScreen::Hide() { ...@@ -50,23 +68,6 @@ void DeviceDisabledScreen::Hide() {
DeviceDisablingManager()->RemoveObserver(this); DeviceDisablingManager()->RemoveObserver(this);
} }
void DeviceDisabledScreen::OnViewDestroyed(DeviceDisabledScreenView* view) {
if (view_ == view)
view_ = nullptr;
}
const std::string& DeviceDisabledScreen::GetEnrollmentDomain() const {
return DeviceDisablingManager()->enrollment_domain();
}
const std::string& DeviceDisabledScreen::GetMessage() const {
return DeviceDisablingManager()->disabled_message();
}
const std::string& DeviceDisabledScreen::GetSerialNumber() const {
return DeviceDisablingManager()->serial_number();
}
void DeviceDisabledScreen::OnDisabledMessageChanged( void DeviceDisabledScreen::OnDisabledMessageChanged(
const std::string& disabled_message) { const std::string& disabled_message) {
if (view_) if (view_)
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen_view.h"
#include "chrome/browser/chromeos/system/device_disabling_manager.h" #include "chrome/browser/chromeos/system/device_disabling_manager.h"
namespace chromeos { namespace chromeos {
...@@ -16,24 +15,32 @@ namespace system { ...@@ -16,24 +15,32 @@ namespace system {
class DeviceDisablingManager; class DeviceDisablingManager;
} }
class DeviceDisabledScreenView;
// Screen informing the user that the device has been disabled by its owner. // Screen informing the user that the device has been disabled by its owner.
class DeviceDisabledScreen : public BaseScreen, class DeviceDisabledScreen : public BaseScreen,
public DeviceDisabledScreenView::Delegate,
public system::DeviceDisablingManager::Observer { public system::DeviceDisablingManager::Observer {
public: public:
explicit DeviceDisabledScreen(DeviceDisabledScreenView* view); explicit DeviceDisabledScreen(DeviceDisabledScreenView* view);
~DeviceDisabledScreen() override; ~DeviceDisabledScreen() override;
// Called when the view is being destroyed. Note that if the Delegate is
// destroyed first, it must call SetDelegate(nullptr).
void OnViewDestroyed(DeviceDisabledScreenView* view);
// Returns the domain that owns the device.
const std::string& GetEnrollmentDomain() const;
// Returns the message that should be shown to the user.
const std::string& GetMessage() const;
// Returns the device serial number that should be shown to the user.
const std::string& GetSerialNumber() const;
// BaseScreen: // BaseScreen:
void Show() override; void Show() override;
void Hide() override; void Hide() override;
// DeviceDisabledScreenView::Delegate:
void OnViewDestroyed(DeviceDisabledScreenView* view) override;
const std::string& GetEnrollmentDomain() const override;
const std::string& GetMessage() const override;
const std::string& GetSerialNumber() const override;
// system::DeviceDisablingManager::Observer: // system::DeviceDisablingManager::Observer:
void OnDisabledMessageChanged(const std::string& disabled_message) override; void OnDisabledMessageChanged(const std::string& disabled_message) override;
......
// 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_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_VIEW_H_
#include <string>
#include "chrome/browser/chromeos/login/oobe_screen.h"
namespace chromeos {
// Interface between the device disabled screen and its representation.
class DeviceDisabledScreenView {
public:
// Allows the representation to access information about the screen.
class Delegate {
public:
virtual ~Delegate() {}
// Called when the view is being destroyed. Note that if the Delegate is
// destroyed first, it must call SetDelegate(nullptr).
virtual void OnViewDestroyed(DeviceDisabledScreenView* view) = 0;
// Returns the domain that owns the device.
virtual const std::string& GetEnrollmentDomain() const = 0;
// Returns the message that should be shown to the user.
virtual const std::string& GetMessage() const = 0;
// Returns the device serial number that should be shown to the user.
virtual const std::string& GetSerialNumber() const = 0;
};
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_DEVICE_DISABLED;
virtual ~DeviceDisabledScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(Delegate* delegate) = 0;
virtual void UpdateMessage(const std::string& message) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_DEVICE_DISABLED_SCREEN_VIEW_H_
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen_view.h" #include "chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.h"
namespace chromeos { namespace chromeos {
......
// Copyright (c) 2012 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_ENABLE_DEBUGGING_SCREEN_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ENABLE_DEBUGGING_SCREEN_VIEW_H_
#include <string>
#include "chrome/browser/chromeos/login/oobe_screen.h"
namespace chromeos {
class EnableDebuggingScreen;
// Interface between enable debugging screen and its representation.
// Note, do not forget to call OnViewDestroyed in the dtor.
class EnableDebuggingScreenView {
public:
constexpr static OobeScreen kScreenId =
OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING;
virtual ~EnableDebuggingScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(EnableDebuggingScreen* screen) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ENABLE_DEBUGGING_SCREEN_VIEW_H_
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h"
namespace chromeos { namespace chromeos {
...@@ -24,6 +25,12 @@ EncryptionMigrationScreen::~EncryptionMigrationScreen() { ...@@ -24,6 +25,12 @@ EncryptionMigrationScreen::~EncryptionMigrationScreen() {
view_->SetDelegate(nullptr); view_->SetDelegate(nullptr);
} }
void EncryptionMigrationScreen::OnViewDestroyed(
EncryptionMigrationScreenView* view) {
if (view_ == view)
view_ = nullptr;
}
void EncryptionMigrationScreen::Show() { void EncryptionMigrationScreen::Show() {
if (view_) if (view_)
view_->Show(); view_->Show();
...@@ -34,12 +41,6 @@ void EncryptionMigrationScreen::Hide() { ...@@ -34,12 +41,6 @@ void EncryptionMigrationScreen::Hide() {
view_->Hide(); view_->Hide();
} }
void EncryptionMigrationScreen::OnViewDestroyed(
EncryptionMigrationScreenView* view) {
if (view_ == view)
view_ = nullptr;
}
void EncryptionMigrationScreen::SetUserContext( void EncryptionMigrationScreen::SetUserContext(
const UserContext& user_context) { const UserContext& user_context) {
DCHECK(view_); DCHECK(view_);
......
...@@ -8,15 +8,13 @@ ...@@ -8,15 +8,13 @@
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h" #include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h"
namespace chromeos { namespace chromeos {
class EncryptionMigrationScreenView;
class UserContext; class UserContext;
class EncryptionMigrationScreen class EncryptionMigrationScreen : public BaseScreen {
: public BaseScreen,
public EncryptionMigrationScreenView::Delegate {
public: public:
using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>; using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>;
using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>; using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>;
...@@ -24,13 +22,14 @@ class EncryptionMigrationScreen ...@@ -24,13 +22,14 @@ class EncryptionMigrationScreen
explicit EncryptionMigrationScreen(EncryptionMigrationScreenView* view); explicit EncryptionMigrationScreen(EncryptionMigrationScreenView* view);
~EncryptionMigrationScreen() override; ~EncryptionMigrationScreen() override;
// This method is called, when view is being destroyed. Note, if Delegate is
// destroyed earlier then it has to call SetDelegate(NULL).
void OnViewDestroyed(EncryptionMigrationScreenView* view);
// BaseScreen implementation: // BaseScreen implementation:
void Show() override; void Show() override;
void Hide() override; void Hide() override;
// EncryptionMigrationScreenView::Delegate implementation:
void OnViewDestroyed(EncryptionMigrationScreenView* view) override;
// Sets the UserContext for a user whose cryptohome should be migrated. // Sets the UserContext for a user whose cryptohome should be migrated.
void SetUserContext(const UserContext& user_context); void SetUserContext(const UserContext& user_context);
......
// Copyright 2017 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_ENCRYPTION_MIGRATION_SCREEN_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ENCRYPTION_MIGRATION_SCREEN_VIEW_H_
#include "base/callback_forward.h"
#include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h"
namespace chromeos {
class UserContext;
class EncryptionMigrationScreenView {
public:
using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>;
using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>;
class Delegate {
public:
virtual ~Delegate() {}
// This method is called, when view is being destroyed. Note, if Delegate is
// destroyed earlier then it has to call SetDelegate(NULL).
virtual void OnViewDestroyed(EncryptionMigrationScreenView* view) = 0;
};
constexpr static OobeScreen kScreenId =
OobeScreen::SCREEN_ENCRYPTION_MIGRATION;
virtual ~EncryptionMigrationScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(Delegate* delegate) = 0;
virtual void SetUserContext(const UserContext& user_context) = 0;
virtual void SetMode(EncryptionMigrationMode mode) = 0;
virtual void SetContinueLoginCallback(ContinueLoginCallback callback) = 0;
virtual void SetRestartLoginCallback(RestartLoginCallback callback) = 0;
virtual void SetupInitialView() = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ENCRYPTION_MIGRATION_SCREEN_VIEW_H_
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/chromeos/login/users/chrome_user_manager_util.h" #include "chrome/browser/chromeos/login/users/chrome_user_manager_util.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h"
namespace chromeos { namespace chromeos {
namespace { namespace {
......
...@@ -10,10 +10,11 @@ ...@@ -10,10 +10,11 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen_view.h"
namespace chromeos { namespace chromeos {
class FingerprintSetupScreenView;
// Controls fingerprint setup. The screen can be shown during OOBE. It allows // Controls fingerprint setup. The screen can be shown during OOBE. It allows
// user to enroll fingerprint on the device. // user to enroll fingerprint on the device.
class FingerprintSetupScreen : public BaseScreen { class FingerprintSetupScreen : public BaseScreen {
......
// Copyright 2018 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_FINGERPRINT_SETUP_SCREEN_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_FINGERPRINT_SETUP_SCREEN_VIEW_H_
#include "chrome/browser/chromeos/login/oobe_screen.h"
namespace chromeos {
class FingerprintSetupScreen;
// Interface for dependency injection between FingerprintSetupScreen and its
// WebUI representation.
class FingerprintSetupScreenView {
public:
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_FINGERPRINT_SETUP;
virtual ~FingerprintSetupScreenView() = default;
// Sets screen this view belongs to.
virtual void Bind(FingerprintSetupScreen* screen) = 0;
// Shows the contents of the screen.
virtual void Show() = 0;
// Hides the contents of the screen.
virtual void Hide() = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_FINGERPRINT_SETUP_SCREEN_VIEW_H_
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/chromeos/customization/customization_document.h" #include "chrome/browser/chromeos/customization/customization_document.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/ui/webui/chromeos/login/kiosk_autolaunch_screen_handler.h"
namespace chromeos { namespace chromeos {
...@@ -26,11 +27,6 @@ KioskAutolaunchScreen::~KioskAutolaunchScreen() { ...@@ -26,11 +27,6 @@ KioskAutolaunchScreen::~KioskAutolaunchScreen() {
view_->SetDelegate(NULL); view_->SetDelegate(NULL);
} }
void KioskAutolaunchScreen::Show() {
if (view_)
view_->Show();
}
void KioskAutolaunchScreen::OnExit(bool confirmed) { void KioskAutolaunchScreen::OnExit(bool confirmed) {
exit_callback_.Run(confirmed ? Result::COMPLETED : Result::CANCELED); exit_callback_.Run(confirmed ? Result::COMPLETED : Result::CANCELED);
} }
...@@ -40,4 +36,11 @@ void KioskAutolaunchScreen::OnViewDestroyed(KioskAutolaunchScreenView* view) { ...@@ -40,4 +36,11 @@ void KioskAutolaunchScreen::OnViewDestroyed(KioskAutolaunchScreenView* view) {
view_ = NULL; view_ = NULL;
} }
void KioskAutolaunchScreen::Show() {
if (view_)
view_->Show();
}
void KioskAutolaunchScreen::Hide() {}
} // namespace chromeos } // namespace chromeos
...@@ -11,14 +11,14 @@ ...@@ -11,14 +11,14 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen_view.h"
namespace chromeos { namespace chromeos {
class KioskAutolaunchScreenView;
// Representation independent class that controls screen showing auto launch // Representation independent class that controls screen showing auto launch
// warning to users. // warning to users.
class KioskAutolaunchScreen : public BaseScreen, class KioskAutolaunchScreen : public BaseScreen {
public KioskAutolaunchScreenView::Delegate {
public: public:
enum class Result { COMPLETED, CANCELED }; enum class Result { COMPLETED, CANCELED };
...@@ -27,13 +27,16 @@ class KioskAutolaunchScreen : public BaseScreen, ...@@ -27,13 +27,16 @@ class KioskAutolaunchScreen : public BaseScreen,
const ScreenExitCallback& exit_callback); const ScreenExitCallback& exit_callback);
~KioskAutolaunchScreen() override; ~KioskAutolaunchScreen() override;
// Called when screen is exited.
void OnExit(bool confirmed);
// This method is called, when view is being destroyed. Note, if Delegate
// is destroyed earlier then it has to call SetDelegate(nullptr).
void OnViewDestroyed(KioskAutolaunchScreenView* view);
// BaseScreen implementation: // BaseScreen implementation:
void Show() override; void Show() override;
void Hide() override {} void Hide() override;
// KioskAutolaunchScreenActor::Delegate implementation:
void OnExit(bool confirmed) override;
void OnViewDestroyed(KioskAutolaunchScreenView* view) override;
private: private:
KioskAutolaunchScreenView* view_; KioskAutolaunchScreenView* view_;
......
// Copyright 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_KIOSK_AUTOLAUNCH_SCREEN_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_KIOSK_AUTOLAUNCH_SCREEN_VIEW_H_
#include <string>
#include "chrome/browser/chromeos/login/oobe_screen.h"
namespace chromeos {
// Interface between reset screen and its representation.
// Note, do not forget to call OnViewDestroyed in the dtor.
class KioskAutolaunchScreenView {
public:
// Allows us to get info from reset screen that we need.
class Delegate {
public:
virtual ~Delegate() {}
// Called when screen is exited.
virtual void OnExit(bool confirmed) = 0;
// This method is called, when view is being destroyed. Note, if Delegate
// is destroyed earlier then it has to call SetDelegate(nullptr).
virtual void OnViewDestroyed(KioskAutolaunchScreenView* view) = 0;
};
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_KIOSK_AUTOLAUNCH;
virtual ~KioskAutolaunchScreenView() {}
virtual void Show() = 0;
virtual void SetDelegate(Delegate* delegate) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_KIOSK_AUTOLAUNCH_SCREEN_VIEW_H_
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chrome/browser/chromeos/login/screens/mock_device_disabled_screen_view.h" #include "chrome/browser/chromeos/login/screens/mock_device_disabled_screen_view.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen.h"
using ::testing::AtLeast; using ::testing::AtLeast;
using ::testing::AtMost; using ::testing::AtMost;
using ::testing::NotNull; using ::testing::NotNull;
...@@ -21,7 +23,7 @@ MockDeviceDisabledScreenView::~MockDeviceDisabledScreenView() { ...@@ -21,7 +23,7 @@ MockDeviceDisabledScreenView::~MockDeviceDisabledScreenView() {
delegate_->OnViewDestroyed(this); delegate_->OnViewDestroyed(this);
} }
void MockDeviceDisabledScreenView::SetDelegate(Delegate* delegate) { void MockDeviceDisabledScreenView::SetDelegate(DeviceDisabledScreen* delegate) {
delegate_ = delegate; delegate_ = delegate;
MockSetDelegate(delegate); MockSetDelegate(delegate);
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_DEVICE_DISABLED_SCREEN_VIEW_H_ #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_DEVICE_DISABLED_SCREEN_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_DEVICE_DISABLED_SCREEN_VIEW_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_DEVICE_DISABLED_SCREEN_VIEW_H_
#include "chrome/browser/chromeos/login/screens/device_disabled_screen_view.h" #include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace chromeos { namespace chromeos {
...@@ -15,16 +15,16 @@ class MockDeviceDisabledScreenView : public DeviceDisabledScreenView { ...@@ -15,16 +15,16 @@ class MockDeviceDisabledScreenView : public DeviceDisabledScreenView {
MockDeviceDisabledScreenView(); MockDeviceDisabledScreenView();
~MockDeviceDisabledScreenView() override; ~MockDeviceDisabledScreenView() override;
void SetDelegate(Delegate* delegate) override; void SetDelegate(DeviceDisabledScreen* delegate) override;
MOCK_METHOD0(Show, void()); MOCK_METHOD0(Show, void());
MOCK_METHOD0(Hide, void()); MOCK_METHOD0(Hide, void());
MOCK_METHOD1(UpdateMessage, void(const std::string& message)); MOCK_METHOD1(UpdateMessage, void(const std::string& message));
private: private:
MOCK_METHOD1(MockSetDelegate, void(Delegate* delegate)); MOCK_METHOD1(MockSetDelegate, void(DeviceDisabledScreen* delegate));
Delegate* delegate_; DeviceDisabledScreen* delegate_;
}; };
} // namespace chromeos } // namespace chromeos
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_ENABLE_DEBUGGING_SCREEN_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_MOCK_ENABLE_DEBUGGING_SCREEN_H_
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h" #include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen_view.h" #include "chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.h"
#include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/google_service_auth_error.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
#include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
...@@ -39,7 +40,7 @@ void DeviceDisabledScreenHandler::Hide() { ...@@ -39,7 +40,7 @@ void DeviceDisabledScreenHandler::Hide() {
show_on_init_ = false; show_on_init_ = false;
} }
void DeviceDisabledScreenHandler::SetDelegate(Delegate* delegate) { void DeviceDisabledScreenHandler::SetDelegate(DeviceDisabledScreen* delegate) {
delegate_ = delegate; delegate_ = delegate;
if (page_is_ready()) if (page_is_ready())
Initialize(); Initialize();
......
...@@ -6,11 +6,25 @@ ...@@ -6,11 +6,25 @@
#define 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 "base/macros.h"
#include "chrome/browser/chromeos/login/screens/device_disabled_screen_view.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
namespace chromeos { namespace chromeos {
class DeviceDisabledScreen;
// Interface between the device disabled screen and its representation.
class DeviceDisabledScreenView {
public:
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_DEVICE_DISABLED;
virtual ~DeviceDisabledScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(DeviceDisabledScreen* delegate) = 0;
virtual void UpdateMessage(const std::string& message) = 0;
};
// WebUI implementation of DeviceDisabledScreenActor. // WebUI implementation of DeviceDisabledScreenActor.
class DeviceDisabledScreenHandler : public DeviceDisabledScreenView, class DeviceDisabledScreenHandler : public DeviceDisabledScreenView,
public BaseScreenHandler { public BaseScreenHandler {
...@@ -21,7 +35,7 @@ class DeviceDisabledScreenHandler : public DeviceDisabledScreenView, ...@@ -21,7 +35,7 @@ class DeviceDisabledScreenHandler : public DeviceDisabledScreenView,
// DeviceDisabledScreenActor: // DeviceDisabledScreenActor:
void Show() override; void Show() override;
void Hide() override; void Hide() override;
void SetDelegate(Delegate* delegate) override; void SetDelegate(DeviceDisabledScreen* delegate) override;
void UpdateMessage(const std::string& message) override; void UpdateMessage(const std::string& message) override;
// BaseScreenHandler: // BaseScreenHandler:
...@@ -33,7 +47,7 @@ class DeviceDisabledScreenHandler : public DeviceDisabledScreenView, ...@@ -33,7 +47,7 @@ class DeviceDisabledScreenHandler : public DeviceDisabledScreenView,
// WebUIMessageHandler: // WebUIMessageHandler:
void RegisterMessages() override; void RegisterMessages() override;
Delegate* delegate_ = nullptr; DeviceDisabledScreen* delegate_ = nullptr;
// Indicates whether the screen should be shown right after initialization. // Indicates whether the screen should be shown right after initialization.
bool show_on_init_ = false; bool show_on_init_ = false;
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h" #include "chrome/browser/chromeos/login/screens/enable_debugging_screen.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen_view.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/ui/login_web_dialog.h" #include "chrome/browser/chromeos/login/ui/login_web_dialog.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
......
...@@ -10,13 +10,28 @@ ...@@ -10,13 +10,28 @@
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h" #include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/screens/enable_debugging_screen_view.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
class PrefRegistrySimple; class PrefRegistrySimple;
namespace chromeos { namespace chromeos {
class EnableDebuggingScreen;
// Interface between enable debugging screen and its representation.
// Note, do not forget to call OnViewDestroyed in the dtor.
class EnableDebuggingScreenView {
public:
constexpr static OobeScreen kScreenId =
OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING;
virtual ~EnableDebuggingScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(EnableDebuggingScreen* screen) = 0;
};
// WebUI implementation of EnableDebuggingScreenView. // WebUI implementation of EnableDebuggingScreenView.
class EnableDebuggingScreenHandler : public EnableDebuggingScreenView, class EnableDebuggingScreenHandler : public EnableDebuggingScreenView,
public BaseScreenHandler { public BaseScreenHandler {
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/arc/arc_migration_constants.h" #include "chrome/browser/chromeos/arc/arc_migration_constants.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_screen.h"
#include "chrome/browser/chromeos/login/ui/login_feedback.h" #include "chrome/browser/chromeos/login/ui/login_feedback.h"
#include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -280,7 +281,8 @@ void EncryptionMigrationScreenHandler::Hide() { ...@@ -280,7 +281,8 @@ void EncryptionMigrationScreenHandler::Hide() {
show_on_init_ = false; show_on_init_ = false;
} }
void EncryptionMigrationScreenHandler::SetDelegate(Delegate* delegate) { void EncryptionMigrationScreenHandler::SetDelegate(
EncryptionMigrationScreen* delegate) {
delegate_ = delegate; delegate_ = delegate;
if (page_is_ready()) if (page_is_ready())
Initialize(); Initialize();
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h" #include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h"
#include "chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_parameters.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h"
...@@ -29,7 +28,29 @@ class TimeTicks; ...@@ -29,7 +28,29 @@ class TimeTicks;
namespace chromeos { namespace chromeos {
class EncryptionMigrationScreen;
class LoginFeedback; class LoginFeedback;
class UserContext;
class EncryptionMigrationScreenView {
public:
using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>;
using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>;
constexpr static OobeScreen kScreenId =
OobeScreen::SCREEN_ENCRYPTION_MIGRATION;
virtual ~EncryptionMigrationScreenView() {}
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(EncryptionMigrationScreen* delegate) = 0;
virtual void SetUserContext(const UserContext& user_context) = 0;
virtual void SetMode(EncryptionMigrationMode mode) = 0;
virtual void SetContinueLoginCallback(ContinueLoginCallback callback) = 0;
virtual void SetRestartLoginCallback(RestartLoginCallback callback) = 0;
virtual void SetupInitialView() = 0;
};
// WebUI implementation of EncryptionMigrationScreenView // WebUI implementation of EncryptionMigrationScreenView
class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView, class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView,
...@@ -44,7 +65,7 @@ class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView, ...@@ -44,7 +65,7 @@ class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView,
// EncryptionMigrationScreenView implementation: // EncryptionMigrationScreenView implementation:
void Show() override; void Show() override;
void Hide() override; void Hide() override;
void SetDelegate(Delegate* delegate) override; void SetDelegate(EncryptionMigrationScreen* delegate) override;
void SetUserContext(const UserContext& user_context) override; void SetUserContext(const UserContext& user_context) override;
void SetMode(EncryptionMigrationMode mode) override; void SetMode(EncryptionMigrationMode mode) override;
void SetContinueLoginCallback(ContinueLoginCallback callback) override; void SetContinueLoginCallback(ContinueLoginCallback callback) override;
...@@ -145,7 +166,7 @@ class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView, ...@@ -145,7 +166,7 @@ class EncryptionMigrationScreenHandler : public EncryptionMigrationScreenView,
// Stop forcing migration if it was forced by policy. // Stop forcing migration if it was forced by policy.
void MaybeStopForcingMigration(); void MaybeStopForcingMigration();
Delegate* delegate_ = nullptr; EncryptionMigrationScreen* delegate_ = nullptr;
bool show_on_init_ = false; bool show_on_init_ = false;
// The current UI state which should be refrected in the web UI. // The current UI state which should be refrected in the web UI.
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_FINGERPRINT_SETUP_SCREEN_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_FINGERPRINT_SETUP_SCREEN_HANDLER_H_
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen_view.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "services/device/public/mojom/fingerprint.mojom.h" #include "services/device/public/mojom/fingerprint.mojom.h"
...@@ -15,6 +14,24 @@ namespace chromeos { ...@@ -15,6 +14,24 @@ namespace chromeos {
class FingerprintSetupScreen; class FingerprintSetupScreen;
// Interface for dependency injection between FingerprintSetupScreen and its
// WebUI representation.
class FingerprintSetupScreenView {
public:
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_FINGERPRINT_SETUP;
virtual ~FingerprintSetupScreenView() = default;
// Sets screen this view belongs to.
virtual void Bind(FingerprintSetupScreen* screen) = 0;
// Shows the contents of the screen.
virtual void Show() = 0;
// Hides the contents of the screen.
virtual void Hide() = 0;
};
// The sole implementation of the FingerprintSetupScreenView, using WebUI. // The sole implementation of the FingerprintSetupScreenView, using WebUI.
class FingerprintSetupScreenHandler class FingerprintSetupScreenHandler
: public BaseScreenHandler, : public BaseScreenHandler,
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
#include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/constants/chromeos_switches.h" #include "chromeos/constants/chromeos_switches.h"
...@@ -48,7 +49,8 @@ void KioskAutolaunchScreenHandler::Show() { ...@@ -48,7 +49,8 @@ void KioskAutolaunchScreenHandler::Show() {
ShowScreen(kScreenId); ShowScreen(kScreenId);
} }
void KioskAutolaunchScreenHandler::SetDelegate(Delegate* delegate) { void KioskAutolaunchScreenHandler::SetDelegate(
KioskAutolaunchScreen* delegate) {
delegate_ = delegate; delegate_ = delegate;
if (page_is_ready()) if (page_is_ready())
Initialize(); Initialize();
......
...@@ -8,12 +8,25 @@ ...@@ -8,12 +8,25 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
#include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen_view.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
namespace chromeos { namespace chromeos {
class KioskAutolaunchScreen;
// Interface between reset screen and its representation.
// Note, do not forget to call OnViewDestroyed in the dtor.
class KioskAutolaunchScreenView {
public:
constexpr static OobeScreen kScreenId = OobeScreen::SCREEN_KIOSK_AUTOLAUNCH;
virtual ~KioskAutolaunchScreenView() {}
virtual void Show() = 0;
virtual void SetDelegate(KioskAutolaunchScreen* delegate) = 0;
};
// WebUI implementation of KioskAutolaunchScreenActor. // WebUI implementation of KioskAutolaunchScreenActor.
class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView, class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView,
public KioskAppManagerObserver, public KioskAppManagerObserver,
...@@ -22,20 +35,20 @@ class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView, ...@@ -22,20 +35,20 @@ class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView,
explicit KioskAutolaunchScreenHandler(JSCallsContainer* js_calls_container); explicit KioskAutolaunchScreenHandler(JSCallsContainer* js_calls_container);
~KioskAutolaunchScreenHandler() override; ~KioskAutolaunchScreenHandler() override;
// KioskAutolaunchScreenActor implementation: // KioskAutolaunchScreenView:
void Show() override; void Show() override;
void SetDelegate(Delegate* delegate) override; void SetDelegate(KioskAutolaunchScreen* delegate) override;
// KioskAppManagerObserver overrides: // KioskAppManagerObserver:
void OnKioskAppsSettingsChanged() override; void OnKioskAppsSettingsChanged() override;
void OnKioskAppDataChanged(const std::string& app_id) override; void OnKioskAppDataChanged(const std::string& app_id) override;
// BaseScreenHandler implementation: // BaseScreenHandler:
void DeclareLocalizedValues( void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override; ::login::LocalizedValuesBuilder* builder) override;
void Initialize() override; void Initialize() override;
// WebUIMessageHandler implementation: // WebUIMessageHandler:
void RegisterMessages() override; void RegisterMessages() override;
private: private:
...@@ -47,7 +60,7 @@ class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView, ...@@ -47,7 +60,7 @@ class KioskAutolaunchScreenHandler : public KioskAutolaunchScreenView,
void HandleOnConfirm(); void HandleOnConfirm();
void HandleOnVisible(); void HandleOnVisible();
Delegate* delegate_ = nullptr; KioskAutolaunchScreen* delegate_ = nullptr;
// Keeps whether screen should be shown right after initialization. // Keeps whether screen should be shown right after initialization.
bool show_on_init_ = false; bool show_on_init_ = false;
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include "chrome/browser/chromeos/login/enrollment/enrollment_screen_view.h" #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_view.h"
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/chromeos/login/screens/error_screen.h" #include "chrome/browser/chromeos/login/screens/error_screen.h"
#include "chrome/browser/chromeos/login/screens/fingerprint_setup_screen_view.h"
#include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
......
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