Commit 2fcb4124 authored by Roman Sorokin's avatar Roman Sorokin Committed by Commit Bot

oobe screens: Refactor user actions handling

* Added userActed function to the LoginScreenBehavior
* Migrated existing usages of 'userActed' actions
* Refactored screens with LoginScreenBehavior to use new mechanism

Bug: 1049083
Change-Id: Ie5a8b7cb750008d34c651233a14b696e601d97b9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2041610Reviewed-by: default avatarRoman Sorokin [CET] <rsorokin@chromium.org>
Reviewed-by: default avatarDenis Kuznetsov [CET] <antrim@chromium.org>
Commit-Queue: Roman Sorokin [CET] <rsorokin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#739352}
parent 03961775
...@@ -5,11 +5,20 @@ ...@@ -5,11 +5,20 @@
#include "chrome/browser/chromeos/login/screens/kiosk_enable_screen.h" #include "chrome/browser/chromeos/login/screens/kiosk_enable_screen.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/chrome_notification_types.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_enable_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/kiosk_enable_screen_handler.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
namespace chromeos { namespace chromeos {
namespace {
constexpr const char kClose[] = "close";
constexpr const char kEnable[] = "enable";
} // namespace
KioskEnableScreen::KioskEnableScreen( KioskEnableScreen::KioskEnableScreen(
KioskEnableScreenView* view, KioskEnableScreenView* view,
...@@ -19,28 +28,74 @@ KioskEnableScreen::KioskEnableScreen( ...@@ -19,28 +28,74 @@ KioskEnableScreen::KioskEnableScreen(
exit_callback_(exit_callback) { exit_callback_(exit_callback) {
DCHECK(view_); DCHECK(view_);
if (view_) if (view_)
view_->SetDelegate(this); view_->SetScreen(this);
} }
KioskEnableScreen::~KioskEnableScreen() { KioskEnableScreen::~KioskEnableScreen() {
if (view_) if (view_)
view_->SetDelegate(NULL); view_->SetScreen(nullptr);
}
void KioskEnableScreen::OnExit() {
exit_callback_.Run();
} }
void KioskEnableScreen::OnViewDestroyed(KioskEnableScreenView* view) { void KioskEnableScreen::OnViewDestroyed(KioskEnableScreenView* view) {
if (view_ == view) if (view_ == view)
view_ = NULL; view_ = nullptr;
} }
void KioskEnableScreen::ShowImpl() { void KioskEnableScreen::ShowImpl() {
if (view_) if (view_)
view_->Show(); view_->Show();
KioskAppManager::Get()->GetConsumerKioskAutoLaunchStatus(
base::Bind(&KioskEnableScreen::OnGetConsumerKioskAutoLaunchStatus,
weak_ptr_factory_.GetWeakPtr()));
}
void KioskEnableScreen::OnGetConsumerKioskAutoLaunchStatus(
KioskAppManager::ConsumerKioskAutoLaunchStatus status) {
is_configurable_ =
(status == KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_CONFIGURABLE);
if (!is_configurable_) {
LOG(WARNING) << "Consumer kiosk auto launch feature is not configurable!";
HandleClose();
return;
}
} }
void KioskEnableScreen::HideImpl() {} void KioskEnableScreen::HideImpl() {}
void KioskEnableScreen::OnUserAction(const std::string& action_id) {
if (action_id == kClose)
HandleClose();
else if (action_id == kEnable)
HandleEnable();
else
BaseScreen::OnUserAction(action_id);
}
void KioskEnableScreen::HandleClose() {
exit_callback_.Run();
}
void KioskEnableScreen::HandleEnable() {
if (!is_configurable_) {
NOTREACHED();
HandleClose();
return;
}
KioskAppManager::Get()->EnableConsumerKioskAutoLaunch(
base::Bind(&KioskEnableScreen::OnEnableConsumerKioskAutoLaunch,
weak_ptr_factory_.GetWeakPtr()));
}
void KioskEnableScreen::OnEnableConsumerKioskAutoLaunch(bool success) {
view_->ShowKioskEnabled(success);
if (!success) {
LOG(WARNING) << "Consumer kiosk mode can't be enabled!";
} else {
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_KIOSK_ENABLED,
content::NotificationService::AllSources(),
content::NotificationService::NoDetails());
}
}
} // namespace chromeos } // namespace chromeos
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/callback.h" #include "base/callback.h"
#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.h"
#include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
namespace chromeos { namespace chromeos {
...@@ -24,20 +25,34 @@ class KioskEnableScreen : public BaseScreen { ...@@ -24,20 +25,34 @@ class KioskEnableScreen : public BaseScreen {
const base::RepeatingClosure& exit_callback); const base::RepeatingClosure& exit_callback);
~KioskEnableScreen() override; ~KioskEnableScreen() override;
// Called when screen is exited. // This method is called, when view is being destroyed. Note, if Screen
void OnExit(); // is destroyed earlier then it has to call SetScreen(nullptr).
// This method is called, when view is being destroyed. Note, if Delegate
// is destroyed earlier then it has to call SetDelegate(nullptr).
void OnViewDestroyed(KioskEnableScreenView* view); void OnViewDestroyed(KioskEnableScreenView* view);
private: private:
// BaseScreen implementation: // BaseScreen implementation:
void ShowImpl() override; void ShowImpl() override;
void HideImpl() override; void HideImpl() override;
void OnUserAction(const std::string& action_id) override;
void HandleClose();
void HandleEnable();
// Callback for KioskAppManager::EnableConsumerModeKiosk().
void OnEnableConsumerKioskAutoLaunch(bool success);
// Callback for KioskAppManager::GetConsumerKioskModeStatus().
void OnGetConsumerKioskAutoLaunchStatus(
KioskAppManager::ConsumerKioskAutoLaunchStatus status);
KioskEnableScreenView* view_; KioskEnableScreenView* view_;
base::RepeatingClosure exit_callback_; base::RepeatingClosure exit_callback_;
// True if machine's consumer kiosk mode is in a configurable state.
bool is_configurable_ = false;
base::WeakPtrFactory<KioskEnableScreen> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(KioskEnableScreen); DISALLOW_COPY_AND_ASSIGN(KioskEnableScreen);
}; };
......
...@@ -29,6 +29,12 @@ ...@@ -29,6 +29,12 @@
#include "url/gurl.h" #include "url/gurl.h"
namespace chromeos { namespace chromeos {
namespace {
constexpr const char kAccept[] = "accept";
constexpr const char kBack[] = "back";
} // namespace
TermsOfServiceScreen::TermsOfServiceScreen( TermsOfServiceScreen::TermsOfServiceScreen(
TermsOfServiceScreenView* view, TermsOfServiceScreenView* view,
...@@ -38,12 +44,12 @@ TermsOfServiceScreen::TermsOfServiceScreen( ...@@ -38,12 +44,12 @@ TermsOfServiceScreen::TermsOfServiceScreen(
exit_callback_(exit_callback) { exit_callback_(exit_callback) {
DCHECK(view_); DCHECK(view_);
if (view_) if (view_)
view_->SetDelegate(this); view_->SetScreen(this);
} }
TermsOfServiceScreen::~TermsOfServiceScreen() { TermsOfServiceScreen::~TermsOfServiceScreen() {
if (view_) if (view_)
view_->SetDelegate(NULL); view_->SetScreen(nullptr);
} }
void TermsOfServiceScreen::OnDecline() { void TermsOfServiceScreen::OnDecline() {
...@@ -51,12 +57,20 @@ void TermsOfServiceScreen::OnDecline() { ...@@ -51,12 +57,20 @@ void TermsOfServiceScreen::OnDecline() {
} }
void TermsOfServiceScreen::OnAccept() { void TermsOfServiceScreen::OnAccept() {
exit_callback_.Run(Result::ACCEPTED); if (view_ && view_->AreTermsLoaded()) {
exit_callback_.Run(Result::ACCEPTED);
return;
}
// If the Terms of Service have not been successfully downloaded, the "accept
// and continue" button should not be accessible. If the user managed to
// activate it somehow anyway, do not treat this as acceptance of the Terms
// and Conditions and end the session instead, as if the user had declined.
OnDecline();
} }
void TermsOfServiceScreen::OnViewDestroyed(TermsOfServiceScreenView* view) { void TermsOfServiceScreen::OnViewDestroyed(TermsOfServiceScreenView* view) {
if (view_ == view) if (view_ == view)
view_ = NULL; view_ = nullptr;
} }
void TermsOfServiceScreen::ShowImpl() { void TermsOfServiceScreen::ShowImpl() {
...@@ -80,6 +94,15 @@ void TermsOfServiceScreen::HideImpl() { ...@@ -80,6 +94,15 @@ void TermsOfServiceScreen::HideImpl() {
view_->Hide(); view_->Hide();
} }
void TermsOfServiceScreen::OnUserAction(const std::string& action_id) {
if (action_id == kBack)
OnDecline();
else if (action_id == kAccept)
OnAccept();
else
BaseScreen::OnUserAction(action_id);
}
void TermsOfServiceScreen::StartDownload() { void TermsOfServiceScreen::StartDownload() {
const PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); const PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs();
// If an URL from which the Terms of Service can be downloaded has not been // If an URL from which the Terms of Service can be downloaded has not been
......
...@@ -50,6 +50,7 @@ class TermsOfServiceScreen : public BaseScreen { ...@@ -50,6 +50,7 @@ class TermsOfServiceScreen : public BaseScreen {
// BaseScreen: // BaseScreen:
void ShowImpl() override; void ShowImpl() override;
void HideImpl() override; void HideImpl() override;
void OnUserAction(const std::string& action_id) override;
// Start downloading the Terms of Service. // Start downloading the Terms of Service.
void StartDownload(); void StartDownload();
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* 'LoginScreenBehavior' is login.Screen API implementation for Polymer objects. * 'LoginScreenBehavior' is login.Screen API implementation for Polymer objects.
*/ */
const CALLBACK_USER_ACTED = 'userActed';
/** @polymerBehavior */ /** @polymerBehavior */
var LoginScreenBehavior = { var LoginScreenBehavior = {
// List of methods exported to login.screenName.<method> API. // List of methods exported to login.screenName.<method> API.
...@@ -34,11 +36,22 @@ var LoginScreenBehavior = { ...@@ -34,11 +36,22 @@ var LoginScreenBehavior = {
api[methodName] = this[methodName].bind(this); api[methodName] = this[methodName].bind(this);
} }
} }
this.sendPrefix_ = 'login.' + screenName + '.';
this.registerScreenApi_(screenName, api); this.registerScreenApi_(screenName, api);
Oobe.getInstance().registerScreen(this, attributes); Oobe.getInstance().registerScreen(this, attributes);
}, },
sendPrefix_: undefined,
userActed(action_id) {
if (this.sendPrefix_ === undefined) {
console.error('LoginScreenBehavior: send prefix is not defined');
return;
}
chrome.send(this.sendPrefix_ + CALLBACK_USER_ACTED, [action_id]);
},
/* ****************** Default screen API below. ********************** */ /* ****************** Default screen API below. ********************** */
......
...@@ -74,8 +74,7 @@ Polymer({ ...@@ -74,8 +74,7 @@ Polymer({
* @private * @private
*/ */
onEnableTap_() { onEnableTap_() {
chrome.send( this.userActed('enable-pressed');
'login.EnableAdbSideloadingScreen.userActed', ['enable-pressed']);
}, },
/** /**
...@@ -84,8 +83,7 @@ Polymer({ ...@@ -84,8 +83,7 @@ Polymer({
* @private * @private
*/ */
onCancelTap_() { onCancelTap_() {
chrome.send( this.userActed('cancel-pressed');
'login.EnableAdbSideloadingScreen.userActed', ['cancel-pressed']);
}, },
...@@ -95,7 +93,6 @@ Polymer({ ...@@ -95,7 +93,6 @@ Polymer({
* @private * @private
*/ */
onLearnMoreTap_() { onLearnMoreTap_() {
chrome.send( this.userActed('learn-more-link');
'login.EnableAdbSideloadingScreen.userActed', ['learn-more-link']);
}, },
}); });
...@@ -63,7 +63,7 @@ Polymer({ ...@@ -63,7 +63,7 @@ Polymer({
* @private * @private
*/ */
onEnableButton_(event) { onEnableButton_(event) {
chrome.send('kioskOnEnable'); this.userActed('enable');
}, },
/** /**
...@@ -71,7 +71,7 @@ Polymer({ ...@@ -71,7 +71,7 @@ Polymer({
* @private * @private
*/ */
closeDialog_(event) { closeDialog_(event) {
chrome.send('kioskOnClose'); this.userActed('close');
}, },
onCompleted(success) { onCompleted(success) {
......
...@@ -94,7 +94,7 @@ Polymer({ ...@@ -94,7 +94,7 @@ Polymer({
this.backButtonDisabled_ = true; this.backButtonDisabled_ = true;
this.acceptButtonDisabled_ = true; this.acceptButtonDisabled_ = true;
chrome.send('termsOfServiceAccept'); this.userActed('accept');
}, },
/** /**
...@@ -110,7 +110,7 @@ Polymer({ ...@@ -110,7 +110,7 @@ Polymer({
this.backButtonDisabled_ = true; this.backButtonDisabled_ = true;
this.acceptButtonDisabled_ = true; this.acceptButtonDisabled_ = true;
chrome.send('termsOfServiceBack'); this.userActed('back');
}, },
/** /**
......
...@@ -283,7 +283,7 @@ Polymer({ ...@@ -283,7 +283,7 @@ Polymer({
* @private * @private
*/ */
onWelcomeNextButtonClicked_() { onWelcomeNextButtonClicked_() {
chrome.send('login.WelcomeScreen.userActed', ['continue']); this.userActed('continue');
}, },
/** /**
......
...@@ -41,7 +41,7 @@ Polymer({ ...@@ -41,7 +41,7 @@ Polymer({
* @private * @private
*/ */
onDontEnrollButtonPressed_() { onDontEnrollButtonPressed_() {
chrome.send('login.PackagedLicenseScreen.userActed', ['dont-enroll']); this.userActed('dont-enroll');
}, },
/** /**
...@@ -50,7 +50,7 @@ Polymer({ ...@@ -50,7 +50,7 @@ Polymer({
* @private * @private
*/ */
onEnrollButtonPressed_() { onEnrollButtonPressed_() {
chrome.send('login.PackagedLicenseScreen.userActed', ['enroll']); this.userActed('enroll');
}, },
}); });
...@@ -8,15 +8,12 @@ ...@@ -8,15 +8,12 @@
#include "base/bind.h" #include "base/bind.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/login/screens/kiosk_enable_screen.h" #include "chrome/browser/chromeos/login/screens/kiosk_enable_screen.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.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 "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
namespace chromeos { namespace chromeos {
...@@ -24,11 +21,13 @@ constexpr StaticOobeScreenId KioskEnableScreenView::kScreenId; ...@@ -24,11 +21,13 @@ constexpr StaticOobeScreenId KioskEnableScreenView::kScreenId;
KioskEnableScreenHandler::KioskEnableScreenHandler( KioskEnableScreenHandler::KioskEnableScreenHandler(
JSCallsContainer* js_calls_container) JSCallsContainer* js_calls_container)
: BaseScreenHandler(kScreenId, js_calls_container) {} : BaseScreenHandler(kScreenId, js_calls_container) {
set_user_acted_method_path("login.KioskEnableScreen.userActed");
}
KioskEnableScreenHandler::~KioskEnableScreenHandler() { KioskEnableScreenHandler::~KioskEnableScreenHandler() {
if (delegate_) if (screen_)
delegate_->OnViewDestroyed(this); screen_->OnViewDestroyed(this);
} }
void KioskEnableScreenHandler::Show() { void KioskEnableScreenHandler::Show() {
...@@ -36,28 +35,13 @@ void KioskEnableScreenHandler::Show() { ...@@ -36,28 +35,13 @@ void KioskEnableScreenHandler::Show() {
show_on_init_ = true; show_on_init_ = true;
return; return;
} }
KioskAppManager::Get()->GetConsumerKioskAutoLaunchStatus(
base::Bind(
&KioskEnableScreenHandler::OnGetConsumerKioskAutoLaunchStatus,
weak_ptr_factory_.GetWeakPtr()));
}
void KioskEnableScreenHandler::OnGetConsumerKioskAutoLaunchStatus(
KioskAppManager::ConsumerKioskAutoLaunchStatus status) {
is_configurable_ =
(status == KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_CONFIGURABLE);
if (!is_configurable_) {
LOG(WARNING) << "Consumer kiosk auto launch feature is not configurable!";
return;
}
ShowScreen(kScreenId); ShowScreen(kScreenId);
} }
void KioskEnableScreenHandler::SetDelegate(KioskEnableScreen* delegate) { void KioskEnableScreenHandler::SetScreen(KioskEnableScreen* screen) {
delegate_ = delegate; BaseScreenHandler::SetBaseScreen(screen);
if (page_is_ready()) screen_ = screen;
if (page_is_ready() && screen_)
Initialize(); Initialize();
} }
...@@ -75,7 +59,7 @@ void KioskEnableScreenHandler::DeclareLocalizedValues( ...@@ -75,7 +59,7 @@ void KioskEnableScreenHandler::DeclareLocalizedValues(
} }
void KioskEnableScreenHandler::Initialize() { void KioskEnableScreenHandler::Initialize() {
if (!page_is_ready() || !delegate_) if (!page_is_ready() || !screen_)
return; return;
if (show_on_init_) { if (show_on_init_) {
...@@ -84,41 +68,8 @@ void KioskEnableScreenHandler::Initialize() { ...@@ -84,41 +68,8 @@ void KioskEnableScreenHandler::Initialize() {
} }
} }
void KioskEnableScreenHandler::RegisterMessages() { void KioskEnableScreenHandler::ShowKioskEnabled(bool success) {
AddCallback("kioskOnClose", &KioskEnableScreenHandler::HandleOnClose);
AddCallback("kioskOnEnable", &KioskEnableScreenHandler::HandleOnEnable);
}
void KioskEnableScreenHandler::HandleOnClose() {
if (delegate_)
delegate_->OnExit();
}
void KioskEnableScreenHandler::HandleOnEnable() {
if (!is_configurable_) {
NOTREACHED();
if (delegate_)
delegate_->OnExit();
return;
}
KioskAppManager::Get()->EnableConsumerKioskAutoLaunch(
base::Bind(&KioskEnableScreenHandler::OnEnableConsumerKioskAutoLaunch,
weak_ptr_factory_.GetWeakPtr()));
}
void KioskEnableScreenHandler::OnEnableConsumerKioskAutoLaunch(
bool success) {
if (!success)
LOG(WARNING) << "Consumer kiosk mode can't be enabled!";
CallJS("login.KioskEnableScreen.onCompleted", success); CallJS("login.KioskEnableScreen.onCompleted", success);
if (success) {
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_KIOSK_ENABLED,
content::NotificationService::AllSources(),
content::NotificationService::NoDetails());
}
} }
} // namespace chromeos } // namespace chromeos
...@@ -24,7 +24,8 @@ class KioskEnableScreenView { ...@@ -24,7 +24,8 @@ class KioskEnableScreenView {
virtual ~KioskEnableScreenView() {} virtual ~KioskEnableScreenView() {}
virtual void Show() = 0; virtual void Show() = 0;
virtual void SetDelegate(KioskEnableScreen* delegate) = 0; virtual void SetScreen(KioskEnableScreen* screen) = 0;
virtual void ShowKioskEnabled(bool success) = 0;
}; };
// WebUI implementation of KioskEnableScreenActor. // WebUI implementation of KioskEnableScreenActor.
...@@ -36,40 +37,22 @@ class KioskEnableScreenHandler : public KioskEnableScreenView, ...@@ -36,40 +37,22 @@ class KioskEnableScreenHandler : public KioskEnableScreenView,
explicit KioskEnableScreenHandler(JSCallsContainer* js_calls_container); explicit KioskEnableScreenHandler(JSCallsContainer* js_calls_container);
~KioskEnableScreenHandler() override; ~KioskEnableScreenHandler() override;
// KioskEnableScreenActor implementation: // KioskEnableScreenView:
void Show() override; void Show() override;
void SetDelegate(KioskEnableScreen* delegate) override; void SetScreen(KioskEnableScreen* screen) override;
void ShowKioskEnabled(bool success) override;
// BaseScreenHandler implementation: // BaseScreenHandler implementation:
void DeclareLocalizedValues( void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override; ::login::LocalizedValuesBuilder* builder) override;
void Initialize() override; void Initialize() override;
// WebUIMessageHandler implementation:
void RegisterMessages() override;
private: private:
// JS messages handlers. KioskEnableScreen* screen_ = nullptr;
void HandleOnClose();
void HandleOnEnable();
// Callback for KioskAppManager::EnableConsumerModeKiosk().
void OnEnableConsumerKioskAutoLaunch(bool success);
// Callback for KioskAppManager::GetConsumerKioskModeStatus().
void OnGetConsumerKioskAutoLaunchStatus(
KioskAppManager::ConsumerKioskAutoLaunchStatus status);
KioskEnableScreen* 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;
// True if machine's consumer kiosk mode is in a configurable state.
bool is_configurable_ = false;
base::WeakPtrFactory<KioskEnableScreenHandler> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(KioskEnableScreenHandler); DISALLOW_COPY_AND_ASSIGN(KioskEnableScreenHandler);
}; };
......
...@@ -40,6 +40,7 @@ TermsOfServiceScreenHandler::TermsOfServiceScreenHandler( ...@@ -40,6 +40,7 @@ TermsOfServiceScreenHandler::TermsOfServiceScreenHandler(
CoreOobeView* core_oobe_view) CoreOobeView* core_oobe_view)
: BaseScreenHandler(kScreenId, js_calls_container), : BaseScreenHandler(kScreenId, js_calls_container),
core_oobe_view_(core_oobe_view) { core_oobe_view_(core_oobe_view) {
set_user_acted_method_path("login.TermsOfServiceScreen.userActed");
} }
TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() { TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() {
...@@ -47,13 +48,6 @@ TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() { ...@@ -47,13 +48,6 @@ TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() {
screen_->OnViewDestroyed(this); screen_->OnViewDestroyed(this);
} }
void TermsOfServiceScreenHandler::RegisterMessages() {
AddCallback("termsOfServiceBack",
&TermsOfServiceScreenHandler::HandleBack);
AddCallback("termsOfServiceAccept",
&TermsOfServiceScreenHandler::HandleAccept);
}
void TermsOfServiceScreenHandler::DeclareLocalizedValues( void TermsOfServiceScreenHandler::DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) { ::login::LocalizedValuesBuilder* builder) {
builder->Add("termsOfServiceScreenHeading", builder->Add("termsOfServiceScreenHeading",
...@@ -71,7 +65,8 @@ void TermsOfServiceScreenHandler::DeclareLocalizedValues( ...@@ -71,7 +65,8 @@ void TermsOfServiceScreenHandler::DeclareLocalizedValues(
IDS_TERMS_OF_SERVICE_SCREEN_ACCEPT_BUTTON); IDS_TERMS_OF_SERVICE_SCREEN_ACCEPT_BUTTON);
} }
void TermsOfServiceScreenHandler::SetDelegate(TermsOfServiceScreen* screen) { void TermsOfServiceScreenHandler::SetScreen(TermsOfServiceScreen* screen) {
BaseScreenHandler::SetBaseScreen(screen);
screen_ = screen; screen_ = screen;
} }
...@@ -127,6 +122,10 @@ void TermsOfServiceScreenHandler::OnLoadSuccess( ...@@ -127,6 +122,10 @@ void TermsOfServiceScreenHandler::OnLoadSuccess(
UpdateTermsOfServiceInUI(); UpdateTermsOfServiceInUI();
} }
bool TermsOfServiceScreenHandler::AreTermsLoaded() {
return !load_error_ && !terms_of_service_.empty();
}
void TermsOfServiceScreenHandler::Initialize() { void TermsOfServiceScreenHandler::Initialize() {
if (show_on_init_) { if (show_on_init_) {
Show(); Show();
...@@ -192,23 +191,4 @@ void TermsOfServiceScreenHandler::UpdateTermsOfServiceInUI() { ...@@ -192,23 +191,4 @@ void TermsOfServiceScreenHandler::UpdateTermsOfServiceInUI() {
CallJS("login.TermsOfServiceScreen.setTermsOfService", terms_of_service_); CallJS("login.TermsOfServiceScreen.setTermsOfService", terms_of_service_);
} }
void TermsOfServiceScreenHandler::HandleBack() {
if (screen_)
screen_->OnDecline();
}
void TermsOfServiceScreenHandler::HandleAccept() {
if (!screen_)
return;
// If the Terms of Service have not been successfully downloaded, the "accept
// and continue" button should not be accessible. If the user managed to
// activate it somehow anway, do not treat this as acceptance of the Terms
// and Conditions and end the session instead, as if the user had declined.
if (terms_of_service_.empty())
screen_->OnDecline();
else
screen_->OnAccept();
}
} // namespace chromeos } // namespace chromeos
...@@ -26,7 +26,7 @@ class TermsOfServiceScreenView { ...@@ -26,7 +26,7 @@ class TermsOfServiceScreenView {
virtual ~TermsOfServiceScreenView() {} virtual ~TermsOfServiceScreenView() {}
// Sets screen this view belongs to. // Sets screen this view belongs to.
virtual void SetDelegate(TermsOfServiceScreen* screen) = 0; virtual void SetScreen(TermsOfServiceScreen* screen) = 0;
// Shows the contents of the screen. // Shows the contents of the screen.
virtual void Show() = 0; virtual void Show() = 0;
...@@ -44,6 +44,9 @@ class TermsOfServiceScreenView { ...@@ -44,6 +44,9 @@ class TermsOfServiceScreenView {
// Called when the download of the Terms of Service is successful. Shows the // Called when the download of the Terms of Service is successful. Shows the
// downloaded |terms_of_service| to the user. // downloaded |terms_of_service| to the user.
virtual void OnLoadSuccess(const std::string& terms_of_service) = 0; virtual void OnLoadSuccess(const std::string& terms_of_service) = 0;
// Whether TOS are successfully loaded.
virtual bool AreTermsLoaded() = 0;
}; };
// The sole implementation of the TermsOfServiceScreenView, using WebUI. // The sole implementation of the TermsOfServiceScreenView, using WebUI.
...@@ -56,20 +59,18 @@ class TermsOfServiceScreenHandler : public BaseScreenHandler, ...@@ -56,20 +59,18 @@ class TermsOfServiceScreenHandler : public BaseScreenHandler,
CoreOobeView* core_oobe_view); CoreOobeView* core_oobe_view);
~TermsOfServiceScreenHandler() override; ~TermsOfServiceScreenHandler() override;
// content::WebUIMessageHandler:
void RegisterMessages() override;
// BaseScreenHandler: // BaseScreenHandler:
void DeclareLocalizedValues( void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override; ::login::LocalizedValuesBuilder* builder) override;
// TermsOfServiceScreenView: // TermsOfServiceScreenView:
void SetDelegate(TermsOfServiceScreen* screen) override; void SetScreen(TermsOfServiceScreen* screen) override;
void Show() override; void Show() override;
void Hide() override; void Hide() override;
void SetDomain(const std::string& domain) override; void SetDomain(const std::string& domain) override;
void OnLoadError() override; void OnLoadError() override;
void OnLoadSuccess(const std::string& terms_of_service) override; void OnLoadSuccess(const std::string& terms_of_service) override;
bool AreTermsLoaded() override;
private: private:
// BaseScreenHandler: // BaseScreenHandler:
...@@ -92,14 +93,6 @@ class TermsOfServiceScreenHandler : public BaseScreenHandler, ...@@ -92,14 +93,6 @@ class TermsOfServiceScreenHandler : public BaseScreenHandler,
// nothing if the download is still in progress. // nothing if the download is still in progress.
void UpdateTermsOfServiceInUI(); void UpdateTermsOfServiceInUI();
// Called when the user declines the Terms of Service by clicking the "back"
// button.
void HandleBack();
// Called when the user accepts the Terms of Service by clicking the "accept
// and continue" button.
void HandleAccept();
TermsOfServiceScreen* screen_ = nullptr; TermsOfServiceScreen* screen_ = nullptr;
CoreOobeView* core_oobe_view_ = nullptr; CoreOobeView* core_oobe_view_ = 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