Commit 7a1787ed authored by jonross's avatar jonross Committed by Commit bot

Revert of Reset Screen moved to ScreenContext. (patchset #7 id:120001 of...

Revert of Reset Screen moved to ScreenContext. (patchset #7 id:120001 of https://codereview.chromium.org/904163003/)

Reason for revert:
This is faling a compile on ChromeOS bots:

http://build.chromium.org/p/chromium.chrome/builders/Google%20Chrome%20ChromeOS/builds/77470

Original issue's description:
> Reset Screen moved to ScreenContext.
>
> BUG=456778
>
> Committed: https://crrev.com/4b77f613917020e58b31975355e4ca2347f216e2
> Cr-Commit-Position: refs/heads/master@{#316212}
>
> Committed: https://crrev.com/ba85904895874b5d82d78bcb499c3c5ee7388e34
> Cr-Commit-Position: refs/heads/master@{#316232}

TBR=dzhioev@chromium.org,merkulova@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=456778

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

Cr-Commit-Position: refs/heads/master@{#316237}
parent 8c700e25
// Copyright 2015 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/reset_model.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
namespace chromeos {
const char ResetModel::kUserActionCancelReset[] = "cancel-reset";
const char ResetModel::kUserActionResetRestartPressed[] = "restart-pressed";
const char ResetModel::kUserActionResetPowerwashPressed[] = "powerwash-pressed";
const char ResetModel::kUserActionResetLearnMorePressed[] = "learn-more-link";
const char ResetModel::kUserActionResetRollbackToggled[] = "rollback-toggled";
const char ResetModel::kUserActionResetShowConfirmationPressed[] =
"show-confirmation";
const char ResetModel::kUserActionResetResetConfirmationDismissed[] =
"reset-confirm-dismissed";
const char ResetModel::kContextKeyIsRestartRequired[] = "restart-required";
const char ResetModel::kContextKeyIsRollbackAvailable[] = "rollback-available";
const char ResetModel::kContextKeyIsRollbackChecked[] = "rollback-checked";
const char ResetModel::kContextKeyIsConfirmational[] = "is-confirmational-view";
const char ResetModel::kContextKeyIsOfficialBuild[] = "is-official-build";
const char ResetModel::kContextKeyScreenState[] = "screen-state";
ResetModel::ResetModel(BaseScreenDelegate* base_screen_delegate)
: BaseScreen(base_screen_delegate) {
}
ResetModel::~ResetModel() {
}
std::string ResetModel::GetName() const {
return WizardController::kResetScreenName;
}
} // namespace chromeos
// Copyright 2015 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_RESET_MODEL_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_MODEL_H_
#include <string>
#include "chrome/browser/chromeos/login/screens/base_screen.h"
namespace chromeos {
class BaseScreenDelegate;
class ResetView;
class ResetModel : public BaseScreen {
public:
static const char kUserActionCancelReset[];
static const char kUserActionResetRestartPressed[];
static const char kUserActionResetPowerwashPressed[];
static const char kUserActionResetLearnMorePressed[];
static const char kUserActionResetRollbackToggled[];
static const char kUserActionResetShowConfirmationPressed[];
static const char kUserActionResetResetConfirmationDismissed[];
static const char kContextKeyIsRestartRequired[];
static const char kContextKeyIsRollbackAvailable[];
static const char kContextKeyIsRollbackChecked[];
static const char kContextKeyIsConfirmational[];
static const char kContextKeyIsOfficialBuild[];
static const char kContextKeyScreenState[];
explicit ResetModel(BaseScreenDelegate* base_screen_delegate);
~ResetModel() override;
// BaseScreen implementation:
std::string GetName() const override;
// Called when actor is destroyed so there's no dead reference to it.
virtual void OnViewDestroyed(ResetView* view) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_MODEL_H_
// Copyright (c) 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/chromeos/login/screens/reset_screen.h" #include "chrome/browser/chromeos/login/screens/reset_screen.h"
#include "base/command_line.h" #include "base/logging.h"
#include "base/metrics/histogram.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/screens/base_screen_delegate.h" #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
#include "chrome/browser/chromeos/login/screens/error_screen.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/login/screens/network_error.h"
#include "chrome/browser/chromeos/login/screens/reset_view.h"
#include "chrome/browser/chromeos/reset/metrics.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/pref_names.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
#include "chromeos/dbus/session_manager_client.h"
namespace chromeos { namespace chromeos {
ResetScreen::ResetScreen(BaseScreenDelegate* base_screen_delegate, ResetScreen::ResetScreen(BaseScreenDelegate* base_screen_delegate,
ResetView* view) ResetScreenActor* actor)
: ResetModel(base_screen_delegate), : BaseScreen(base_screen_delegate), actor_(actor) {
view_(view), DCHECK(actor_);
weak_ptr_factory_(this) { if (actor_)
DCHECK(view_); actor_->SetDelegate(this);
if (view_)
view_->Bind(*this);
context_.SetInteger(kContextKeyScreenState, STATE_RESTART_REQUIRED);
context_.SetBoolean(kContextKeyIsRollbackAvailable, false);
context_.SetBoolean(kContextKeyIsRollbackChecked, false);
context_.SetBoolean(kContextKeyIsConfirmational, false);
context_.SetBoolean(kContextKeyIsOfficialBuild, false);
#if defined(OFFICIAL_BUILD)
context_.SetBoolean(kContextKeyIsOfficialBuild, true);
#endif
} }
ResetScreen::~ResetScreen() { ResetScreen::~ResetScreen() {
if (view_) if (actor_)
view_->Unbind(); actor_->SetDelegate(NULL);
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
} }
void ResetScreen::PrepareToShow() { void ResetScreen::PrepareToShow() {
if (view_) if (actor_)
view_->PrepareToShow(); actor_->PrepareToShow();
} }
void ResetScreen::Show() { void ResetScreen::Show() {
if (view_) if (actor_)
view_->Show(); actor_->Show();
int dialog_type = -1; // used by UMA metrics.
ContextEditor context_editor = GetContextEditor();
bool restart_required = !base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kFirstExecAfterBoot);
if (restart_required) {
context_editor.SetInteger(kContextKeyScreenState, STATE_RESTART_REQUIRED);
dialog_type = reset::DIALOG_SHORTCUT_RESTART_REQUIRED;
} else {
context_editor.SetInteger(kContextKeyScreenState, STATE_POWERWASH_PROPOSAL);
}
// Set availability of Rollback feature.
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableRollbackOption)) {
context_editor.SetBoolean(kContextKeyIsRollbackAvailable, false);
dialog_type = reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE;
} else {
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
CanRollbackCheck(base::Bind(&ResetScreen::OnRollbackCheck,
weak_ptr_factory_.GetWeakPtr()));
}
if (dialog_type >= 0) {
UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown",
dialog_type,
reset::DIALOG_VIEW_TYPE_SIZE);
}
PrefService* prefs = g_browser_process->local_state();
prefs->SetBoolean(prefs::kFactoryResetRequested, false);
prefs->CommitPendingWrite();
} }
void ResetScreen::Hide() { void ResetScreen::Hide() {
if (view_) if (actor_)
view_->Hide(); actor_->Hide();
}
void ResetScreen::OnViewDestroyed(ResetView* view) {
if (view_ == view)
view_ = nullptr;
} }
void ResetScreen::OnUserAction(const std::string& action_id) { std::string ResetScreen::GetName() const {
if (action_id == kUserActionCancelReset) return WizardController::kResetScreenName;
OnCancel();
else if (action_id == kUserActionResetRestartPressed)
OnRestart();
else if (action_id == kUserActionResetPowerwashPressed)
OnPowerwash();
else if (action_id == kUserActionResetLearnMorePressed)
OnLearnMore();
else if (action_id == kUserActionResetRollbackToggled)
OnToggleRollback();
else if (action_id == kUserActionResetShowConfirmationPressed)
OnShowConfirm();
else if (action_id == kUserActionResetResetConfirmationDismissed)
OnConfirmationDismissed();
else
BaseScreen::OnUserAction(action_id);
} }
void ResetScreen::OnCancel() { void ResetScreen::OnExit() {
if (context_.GetInteger(
kContextKeyScreenState, STATE_RESTART_REQUIRED) == STATE_REVERT_PROMISE)
return;
// Hide Rollback view for the next show.
if (context_.GetBoolean(kContextKeyIsRollbackAvailable) &&
context_.GetBoolean(kContextKeyIsRollbackChecked))
OnToggleRollback();
Finish(BaseScreenDelegate::RESET_CANCELED); Finish(BaseScreenDelegate::RESET_CANCELED);
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
}
void ResetScreen::OnPowerwash() {
if (context_.GetInteger(kContextKeyScreenState, 0) !=
STATE_POWERWASH_PROPOSAL)
return;
GetContextEditor().SetBoolean(kContextKeyIsConfirmational, false);
CommitContextChanges();
if (context_.GetBoolean(kContextKeyIsRollbackAvailable) &&
context_.GetBoolean(kContextKeyIsRollbackChecked)) {
GetContextEditor().SetInteger(kContextKeyScreenState, STATE_REVERT_PROMISE);
DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
VLOG(1) << "Starting Rollback";
DBusThreadManager::Get()->GetUpdateEngineClient()->Rollback();
} else {
if (context_.GetBoolean(kContextKeyIsRollbackChecked) &&
!context_.GetBoolean(kContextKeyIsRollbackAvailable)) {
NOTREACHED() <<
"Rollback was checked but not available. Starting powerwash.";
}
VLOG(1) << "Starting Powerwash";
DBusThreadManager::Get()->GetSessionManagerClient()->StartDeviceWipe();
}
}
void ResetScreen::OnRestart() {
PrefService* prefs = g_browser_process->local_state();
prefs->SetBoolean(prefs::kFactoryResetRequested, true);
prefs->CommitPendingWrite();
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
}
void ResetScreen::OnToggleRollback() {
// Hide Rollback if visible.
if (context_.GetBoolean(kContextKeyIsRollbackAvailable) &&
context_.GetBoolean(kContextKeyIsRollbackChecked)) {
VLOG(1) << "Hiding rollback view on reset screen";
GetContextEditor().SetBoolean(kContextKeyIsRollbackChecked, false);
return;
}
// Show Rollback if available.
VLOG(1) << "Requested rollback availability" <<
context_.GetBoolean(kContextKeyIsRollbackAvailable);
if (context_.GetBoolean(kContextKeyIsRollbackAvailable) &&
!context_.GetBoolean(kContextKeyIsRollbackChecked)) {
UMA_HISTOGRAM_ENUMERATION(
"Reset.ChromeOS.PowerwashDialogShown",
reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE,
reset::DIALOG_VIEW_TYPE_SIZE);
GetContextEditor().SetBoolean(kContextKeyIsRollbackChecked, true);
}
}
void ResetScreen::OnShowConfirm() {
int dialog_type = context_.GetBoolean(kContextKeyIsRollbackChecked) ?
reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK :
reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_ONLY;
UMA_HISTOGRAM_ENUMERATION(
"Reset.ChromeOS.PowerwashDialogShown",
dialog_type,
reset::DIALOG_VIEW_TYPE_SIZE);
GetContextEditor().SetBoolean(kContextKeyIsConfirmational, true);
}
void ResetScreen::OnLearnMore() {
#if defined(OFFICIAL_BUILD)
VLOG(1) << "Trying to view the help article about reset options.";
if (!help_app_.get())
help_app_ = new HelpAppLauncher(GetNativeWindow());
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_POWERWASH);
#endif
}
void ResetScreen::OnConfirmationDismissed() {
GetContextEditor().SetBoolean(kContextKeyIsConfirmational, false);
}
void ResetScreen::UpdateStatusChanged(
const UpdateEngineClient::Status& status) {
VLOG(1) << "Update status change to " << status.status;
if (status.status == UpdateEngineClient::UPDATE_STATUS_ERROR ||
status.status ==
UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT) {
GetContextEditor().SetInteger(kContextKeyScreenState, STATE_ERROR);
// Show error screen.
GetErrorScreen()->SetUIState(NetworkError::UI_STATE_ROLLBACK_ERROR);
get_base_screen_delegate()->ShowErrorScreen();
} else if (status.status ==
UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) {
DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
}
}
// Invoked from call to CanRollbackCheck upon completion of the DBus call.
void ResetScreen::OnRollbackCheck(bool can_rollback) {
VLOG(1) << "Callback from CanRollbackCheck, result " << can_rollback;
int dialog_type = can_rollback ?
reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE :
reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE;
UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown",
dialog_type,
reset::DIALOG_VIEW_TYPE_SIZE);
GetContextEditor().SetBoolean(kContextKeyIsRollbackAvailable, can_rollback);
} }
ErrorScreen* ResetScreen::GetErrorScreen() { void ResetScreen::OnActorDestroyed(ResetScreenActor* actor) {
return get_base_screen_delegate()->GetErrorScreen(); if (actor_ == actor)
actor_ = NULL;
} }
} // namespace chromeos } // namespace chromeos
// Copyright (c) 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -7,65 +7,32 @@ ...@@ -7,65 +7,32 @@
#include <string> #include <string>
#include "base/basictypes.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/ref_counted.h" #include "chrome/browser/chromeos/login/screens/base_screen.h"
#include "base/memory/weak_ptr.h" #include "chrome/browser/chromeos/login/screens/reset_screen_actor.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/screens/reset_model.h"
#include "chromeos/dbus/update_engine_client.h"
namespace chromeos { namespace chromeos {
class ErrorScreen;
class ResetView;
// Representation independent class that controls screen showing reset to users. // Representation independent class that controls screen showing reset to users.
class ResetScreen : public ResetModel, class ResetScreen : public BaseScreen, public ResetScreenActor::Delegate {
public UpdateEngineClient::Observer {
public: public:
ResetScreen(BaseScreenDelegate* base_screen_delegate, ResetScreen(BaseScreenDelegate* base_screen_delegate,
ResetView* view); ResetScreenActor* actor);
~ResetScreen() override; ~ResetScreen() override;
// ResetModel implementation: // BaseScreen implementation:
void PrepareToShow() override; void PrepareToShow() override;
void Show() override; void Show() override;
void Hide() override; void Hide() override;
void OnViewDestroyed(ResetView* view) override; std::string GetName() const override;
void OnUserAction(const std::string& action_id) override;
// UpdateEngineClient::Observer implementation:
void UpdateStatusChanged(const UpdateEngineClient::Status& status) override;
void OnRollbackCheck(bool can_rollback); // ResetScreenActor::Delegate implementation:
void OnExit() override;
void OnActorDestroyed(ResetScreenActor* actor) override;
private: private:
ResetScreenActor* actor_;
enum State {
STATE_RESTART_REQUIRED = 0,
STATE_REVERT_PROMISE,
STATE_POWERWASH_PROPOSAL,
STATE_ERROR
};
void OnCancel();
void OnPowerwash();
void OnRestart();
void OnToggleRollback();
void OnShowConfirm();
void OnLearnMore();
void OnConfirmationDismissed();
// Returns an instance of the error screen.
ErrorScreen* GetErrorScreen();
ResetView* view_;
// Help application used for help dialogs.
scoped_refptr<HelpAppLauncher> help_app_;
base::WeakPtrFactory<ResetScreen> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(ResetScreen); DISALLOW_COPY_AND_ASSIGN(ResetScreen);
}; };
......
// 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_RESET_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_SCREEN_ACTOR_H_
#include <string>
namespace chromeos {
// Interface between reset screen and its representation.
// Note, do not forget to call OnActorDestroyed in the dtor.
class ResetScreenActor {
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() = 0;
// This method is called, when actor is being destroyed. Note, if Delegate
// is destroyed earlier then it has to call SetDelegate(NULL).
virtual void OnActorDestroyed(ResetScreenActor* actor) = 0;
};
virtual ~ResetScreenActor() {}
virtual void PrepareToShow() = 0;
virtual void Show() = 0;
virtual void Hide() = 0;
virtual void SetDelegate(Delegate* delegate) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_SCREEN_ACTOR_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_RESET_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_VIEW_H_
namespace chromeos {
class ResetModel;
// Interface for dependency injection between ResetScreen and its actual
// representation, either views based or WebUI.
class ResetView {
public:
virtual ~ResetView() {}
virtual void Bind(ResetModel& model) = 0;
virtual void Unbind() = 0;
virtual void PrepareToShow() = 0;
virtual void Show() = 0;
virtual void Hide() = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RESET_VIEW_H_
...@@ -27,7 +27,7 @@ class KioskAutolaunchScreenActor; ...@@ -27,7 +27,7 @@ class KioskAutolaunchScreenActor;
class KioskEnableScreenActor; class KioskEnableScreenActor;
class NetworkErrorView; class NetworkErrorView;
class NetworkView; class NetworkView;
class ResetView; class ResetScreenActor;
class SupervisedUserCreationScreenHandler; class SupervisedUserCreationScreenHandler;
class TermsOfServiceScreenActor; class TermsOfServiceScreenActor;
class UpdateView; class UpdateView;
...@@ -79,7 +79,7 @@ class OobeDisplay { ...@@ -79,7 +79,7 @@ class OobeDisplay {
virtual UpdateView* GetUpdateView() = 0; virtual UpdateView* GetUpdateView() = 0;
virtual EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() = 0; virtual EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() = 0;
virtual EnrollmentScreenActor* GetEnrollmentScreenActor() = 0; virtual EnrollmentScreenActor* GetEnrollmentScreenActor() = 0;
virtual ResetView* GetResetView() = 0; virtual ResetScreenActor* GetResetScreenActor() = 0;
virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() = 0; virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() = 0;
virtual KioskEnableScreenActor* GetKioskEnableScreenActor() = 0; virtual KioskEnableScreenActor* GetKioskEnableScreenActor() = 0;
virtual TermsOfServiceScreenActor* GetTermsOfServiceScreenActor() = 0; virtual TermsOfServiceScreenActor* GetTermsOfServiceScreenActor() = 0;
......
...@@ -314,8 +314,7 @@ BaseScreen* WizardController::CreateScreen(const std::string& screen_name) { ...@@ -314,8 +314,7 @@ BaseScreen* WizardController::CreateScreen(const std::string& screen_name) {
return new EnrollmentScreen(this, return new EnrollmentScreen(this,
oobe_display_->GetEnrollmentScreenActor()); oobe_display_->GetEnrollmentScreenActor());
} else if (screen_name == kResetScreenName) { } else if (screen_name == kResetScreenName) {
return new chromeos::ResetScreen(this, return new ResetScreen(this, oobe_display_->GetResetScreenActor());
oobe_display_->GetResetView());
} else if (screen_name == kEnableDebuggingScreenName) { } else if (screen_name == kEnableDebuggingScreenName) {
return new EnableDebuggingScreen( return new EnableDebuggingScreen(
this, oobe_display_->GetEnableDebuggingScreenActor()); this, oobe_display_->GetEnableDebuggingScreenActor());
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include "chrome/browser/chromeos/login/screens/eula_screen.h" #include "chrome/browser/chromeos/login/screens/eula_screen.h"
#include "chrome/browser/chromeos/login/screens/host_pairing_screen.h" #include "chrome/browser/chromeos/login/screens/host_pairing_screen.h"
#include "chrome/browser/chromeos/login/screens/network_screen.h" #include "chrome/browser/chromeos/login/screens/network_screen.h"
#include "chrome/browser/chromeos/login/screens/reset_screen.h"
#include "chrome/browser/chromeos/policy/enrollment_config.h" #include "chrome/browser/chromeos/policy/enrollment_config.h"
class PrefRegistrySimple; class PrefRegistrySimple;
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
cr.define('reset', function() { cr.define('reset', function() {
var USER_ACTION_RESET_CONFIRM_DISMISSED = 'reset-confirm-dismissed';
/** /**
* ResetScreenConfirmationOverlay class * ResetScreenConfirmationOverlay class
* Encapsulated handling of the 'Confirm reset device' overlay OOBE page. * Encapsulated handling of the 'Confirm reset device' overlay OOBE page.
...@@ -21,13 +20,34 @@ cr.define('reset', function() { ...@@ -21,13 +20,34 @@ cr.define('reset', function() {
*/ */
initializePage: function() { initializePage: function() {
var overlay = $('reset-confirm-overlay'); var overlay = $('reset-confirm-overlay');
overlay.addEventListener('cancelOverlay', function(e) { overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this));
$('reset').send(login.Screen.CALLBACK_USER_ACTED,
USER_ACTION_RESET_CONFIRM_DISMISSED); $('reset-confirm-dismiss').addEventListener('click', this.handleDismiss_);
e.stopPropagation(); $('reset-confirm-commit').addEventListener('click', this.handleCommit_);
});
$('overlay-reset').removeAttribute('hidden'); $('overlay-reset').removeAttribute('hidden');
}, },
/**
* Handles a click on the dismiss button.
* @param {Event} e The click event.
*/
handleDismiss_: function(e) {
$('reset').isConfirmational = false;
$('overlay-reset').setAttribute('hidden', true);
e.stopPropagation();
},
/**
* Handles a click on the commit button.
* @param {Event} e The click event.
*/
handleCommit_: function(e) {
$('reset').isConfirmational = false;
chrome.send('powerwashOnReset', [$('reset').rollbackChecked]);
$('overlay-reset').setAttribute('hidden', true);
e.stopPropagation();
},
}; };
// Export // Export
......
...@@ -208,7 +208,7 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) ...@@ -208,7 +208,7 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
debugging_screen_actor_(nullptr), debugging_screen_actor_(nullptr),
eula_view_(nullptr), eula_view_(nullptr),
hid_detection_screen_actor_(nullptr), hid_detection_screen_actor_(nullptr),
reset_view_(nullptr), reset_screen_actor_(nullptr),
autolaunch_screen_actor_(nullptr), autolaunch_screen_actor_(nullptr),
kiosk_enable_screen_actor_(nullptr), kiosk_enable_screen_actor_(nullptr),
wrong_hwid_screen_actor_(nullptr), wrong_hwid_screen_actor_(nullptr),
...@@ -260,7 +260,7 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) ...@@ -260,7 +260,7 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
AddScreenHandler(eula_screen_handler); AddScreenHandler(eula_screen_handler);
ResetScreenHandler* reset_screen_handler = new ResetScreenHandler(); ResetScreenHandler* reset_screen_handler = new ResetScreenHandler();
reset_view_ = reset_screen_handler; reset_screen_actor_ = reset_screen_handler;
AddScreenHandler(reset_screen_handler); AddScreenHandler(reset_screen_handler);
KioskAutolaunchScreenHandler* autolaunch_screen_handler = KioskAutolaunchScreenHandler* autolaunch_screen_handler =
...@@ -427,8 +427,8 @@ EnrollmentScreenActor* OobeUI::GetEnrollmentScreenActor() { ...@@ -427,8 +427,8 @@ EnrollmentScreenActor* OobeUI::GetEnrollmentScreenActor() {
return enrollment_screen_actor_; return enrollment_screen_actor_;
} }
ResetView* OobeUI::GetResetView() { ResetScreenActor* OobeUI::GetResetScreenActor() {
return reset_view_; return reset_screen_actor_;
} }
KioskAutolaunchScreenActor* OobeUI::GetKioskAutolaunchScreenActor() { KioskAutolaunchScreenActor* OobeUI::GetKioskAutolaunchScreenActor() {
......
...@@ -105,7 +105,7 @@ class OobeUI : public OobeDisplay, ...@@ -105,7 +105,7 @@ class OobeUI : public OobeDisplay,
UpdateView* GetUpdateView() override; UpdateView* GetUpdateView() override;
EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() override; EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() override;
EnrollmentScreenActor* GetEnrollmentScreenActor() override; EnrollmentScreenActor* GetEnrollmentScreenActor() override;
ResetView* GetResetView() override; ResetScreenActor* GetResetScreenActor() override;
KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() override; KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() override;
KioskEnableScreenActor* GetKioskEnableScreenActor() override; KioskEnableScreenActor* GetKioskEnableScreenActor() override;
TermsOfServiceScreenActor* GetTermsOfServiceScreenActor() override; TermsOfServiceScreenActor* GetTermsOfServiceScreenActor() override;
...@@ -194,7 +194,7 @@ class OobeUI : public OobeDisplay, ...@@ -194,7 +194,7 @@ class OobeUI : public OobeDisplay,
EulaView* eula_view_; EulaView* eula_view_;
EnrollmentScreenActor* enrollment_screen_actor_; EnrollmentScreenActor* enrollment_screen_actor_;
HIDDetectionScreenActor* hid_detection_screen_actor_; HIDDetectionScreenActor* hid_detection_screen_actor_;
ResetView* reset_view_; ResetScreenActor* reset_screen_actor_;
KioskAutolaunchScreenActor* autolaunch_screen_actor_; KioskAutolaunchScreenActor* autolaunch_screen_actor_;
KioskEnableScreenActor* kiosk_enable_screen_actor_; KioskEnableScreenActor* kiosk_enable_screen_actor_;
WrongHWIDScreenActor* wrong_hwid_screen_actor_; WrongHWIDScreenActor* wrong_hwid_screen_actor_;
......
...@@ -6,51 +6,125 @@ ...@@ -6,51 +6,125 @@
#include <string> #include <string>
#include "base/command_line.h"
#include "base/metrics/histogram.h"
#include "base/prefs/pref_registry_simple.h" #include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.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/reset_model.h" #include "chrome/browser/chromeos/reset/metrics.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/grit/chromium_strings.h" #include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
#include "chromeos/dbus/session_manager_client.h" #include "chromeos/dbus/session_manager_client.h"
#include "chromeos/dbus/update_engine_client.h"
#include "components/login/localized_values_builder.h" #include "components/login/localized_values_builder.h"
#include "content/public/browser/browser_thread.h"
namespace { namespace {
const char kJsScreenPath[] = "login.ResetScreen"; const char kJsScreenPath[] = "login.ResetScreen";
// Reset screen id.
const char kResetScreen[] = "reset";
const int kErrorUIStateRollback = 7;
} // namespace } // namespace
namespace chromeos { namespace chromeos {
ResetScreenHandler::ResetScreenHandler() ResetScreenHandler::ResetScreenHandler()
: BaseScreenHandler(kJsScreenPath), : BaseScreenHandler(kJsScreenPath),
model_(nullptr), delegate_(NULL),
show_on_init_(false) { show_on_init_(false),
restart_required_(true),
reboot_was_requested_(false),
rollback_available_(false),
rollback_checked_(false),
preparing_for_rollback_(false),
weak_ptr_factory_(this) {
} }
ResetScreenHandler::~ResetScreenHandler() { ResetScreenHandler::~ResetScreenHandler() {
if (model_) if (delegate_)
model_->OnViewDestroyed(this); delegate_->OnActorDestroyed(this);
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
} }
void ResetScreenHandler::PrepareToShow() { void ResetScreenHandler::PrepareToShow() {
} }
void ResetScreenHandler::ShowWithParams() {
int dialog_type;
if (restart_required_) {
dialog_type = reset::DIALOG_SHORTCUT_RESTART_REQUIRED;
} else {
dialog_type = reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE;
}
UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown",
dialog_type,
reset::DIALOG_VIEW_TYPE_SIZE);
PrefService* prefs = g_browser_process->local_state();
prefs->SetBoolean(prefs::kFactoryResetRequested, false);
prefs->CommitPendingWrite();
base::DictionaryValue reset_screen_params;
reset_screen_params.SetBoolean("restartRequired", restart_required_);
reset_screen_params.SetBoolean("rollbackAvailable", rollback_available_);
#if defined(OFFICIAL_BUILD)
reset_screen_params.SetBoolean("isOfficialBuild", true);
#endif
ShowScreen(kResetScreen, &reset_screen_params);
}
void ResetScreenHandler::Show() { void ResetScreenHandler::Show() {
if (!page_is_ready()) { if (!page_is_ready()) {
show_on_init_ = true; show_on_init_ = true;
return; return;
} }
ShowScreen(OobeUI::kScreenOobeReset, NULL);
ChooseAndApplyShowScenario();
}
void ResetScreenHandler::ChooseAndApplyShowScenario() {
PrefService* prefs = g_browser_process->local_state();
restart_required_ = !base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kFirstExecAfterBoot);
reboot_was_requested_ = false;
preparing_for_rollback_ = false;
if (!restart_required_) // First exec after boot.
reboot_was_requested_ = prefs->GetBoolean(prefs::kFactoryResetRequested);
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableRollbackOption)) {
rollback_available_ = false;
ShowWithParams();
} else if (restart_required_) {
// Will require restart.
ShowWithParams();
} else {
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
CanRollbackCheck(base::Bind(&ResetScreenHandler::OnRollbackCheck,
weak_ptr_factory_.GetWeakPtr()));
}
} }
void ResetScreenHandler::Hide() { void ResetScreenHandler::Hide() {
} }
void ResetScreenHandler::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
if (page_is_ready())
Initialize();
}
void ResetScreenHandler::DeclareLocalizedValues( void ResetScreenHandler::DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) { ::login::LocalizedValuesBuilder* builder) {
builder->Add("resetScreenTitle", IDS_RESET_SCREEN_TITLE); builder->Add("resetScreenTitle", IDS_RESET_SCREEN_TITLE);
...@@ -94,13 +168,20 @@ void ResetScreenHandler::DeclareLocalizedValues( ...@@ -94,13 +168,20 @@ void ResetScreenHandler::DeclareLocalizedValues(
builder->Add("confirmResetButton", IDS_RESET_SCREEN_POPUP_CONFIRM_BUTTON); builder->Add("confirmResetButton", IDS_RESET_SCREEN_POPUP_CONFIRM_BUTTON);
} }
// Invoked from call to CanRollbackCheck upon completion of the DBus call.
void ResetScreenHandler::OnRollbackCheck(bool can_rollback) {
VLOG(1) << "Callback from CanRollbackCheck, result " << can_rollback;
rollback_available_ = can_rollback;
ShowWithParams();
}
// static // static
void ResetScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) { void ResetScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(prefs::kFactoryResetRequested, false); registry->RegisterBooleanPref(prefs::kFactoryResetRequested, false);
} }
void ResetScreenHandler::Initialize() { void ResetScreenHandler::Initialize() {
if (!page_is_ready()) if (!page_is_ready() || !delegate_)
return; return;
if (show_on_init_) { if (show_on_init_) {
...@@ -109,14 +190,107 @@ void ResetScreenHandler::Initialize() { ...@@ -109,14 +190,107 @@ void ResetScreenHandler::Initialize() {
} }
} }
void ResetScreenHandler::Bind(ResetModel& model) { void ResetScreenHandler::RegisterMessages() {
model_ = &model; AddCallback("cancelOnReset", &ResetScreenHandler::HandleOnCancel);
BaseScreenHandler::SetBaseScreen(model_); AddCallback("restartOnReset", &ResetScreenHandler::HandleOnRestart);
AddCallback("powerwashOnReset", &ResetScreenHandler::HandleOnPowerwash);
AddCallback("resetOnLearnMore", &ResetScreenHandler::HandleOnLearnMore);
AddCallback("toggleRollbackOnResetScreen",
&ResetScreenHandler::HandleOnToggleRollback);
AddCallback(
"showConfirmationOnReset", &ResetScreenHandler::HandleOnShowConfirm);
}
void ResetScreenHandler::HandleOnCancel() {
if (preparing_for_rollback_)
return;
// Hide Rollback view for the next show.
if (rollback_available_ && rollback_checked_)
HandleOnToggleRollback();
if (delegate_)
delegate_->OnExit();
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
}
void ResetScreenHandler::HandleOnRestart() {
PrefService* prefs = g_browser_process->local_state();
prefs->SetBoolean(prefs::kFactoryResetRequested, true);
prefs->CommitPendingWrite();
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
}
void ResetScreenHandler::HandleOnPowerwash(bool rollback_checked) {
if (rollback_available_ && rollback_checked) {
preparing_for_rollback_ = true;
CallJS("updateViewOnRollbackCall");
DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
VLOG(1) << "Starting Rollback";
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->Rollback();
} else {
if (rollback_checked && !rollback_available_) {
NOTREACHED() <<
"Rollback was checked but not available. Starting powerwash.";
}
VLOG(1) << "Starting Powerwash";
chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
StartDeviceWipe();
}
}
void ResetScreenHandler::HandleOnLearnMore() {
VLOG(1) << "Trying to view the help article about reset options.";
if (!help_app_.get())
help_app_ = new HelpAppLauncher(GetNativeWindow());
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_POWERWASH);
} }
void ResetScreenHandler::Unbind() { void ResetScreenHandler::HandleOnToggleRollback() {
model_ = nullptr; // Hide Rollback if visible.
BaseScreenHandler::SetBaseScreen(nullptr); if (rollback_available_ && rollback_checked_) {
VLOG(1) << "Hiding rollback view on reset screen";
CallJS("hideRollbackOption");
rollback_checked_ = false;
return;
}
// Show Rollback if available.
VLOG(1) << "Requested rollback availability" << rollback_available_;
if (rollback_available_ && !rollback_checked_) {
UMA_HISTOGRAM_ENUMERATION(
"Reset.ChromeOS.PowerwashDialogShown",
reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE,
reset::DIALOG_VIEW_TYPE_SIZE);
CallJS("showRollbackOption");
rollback_checked_ = true;
}
}
void ResetScreenHandler::HandleOnShowConfirm() {
int dialog_type = rollback_checked_ ?
reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK :
reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_ONLY;
UMA_HISTOGRAM_ENUMERATION(
"Reset.ChromeOS.PowerwashDialogShown",
dialog_type,
reset::DIALOG_VIEW_TYPE_SIZE);
}
void ResetScreenHandler::UpdateStatusChanged(
const UpdateEngineClient::Status& status) {
VLOG(1) << "Update status change to " << status.status;
if (status.status == UpdateEngineClient::UPDATE_STATUS_ERROR ||
status.status ==
UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT) {
preparing_for_rollback_ = false;
// Show error screen.
base::DictionaryValue params;
params.SetInteger("uiState", kErrorUIStateRollback);
ShowScreen(OobeUI::kScreenErrorMessage, &params);
} else if (status.status ==
UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) {
DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
}
} }
} // namespace chromeos } // namespace chromeos
...@@ -6,8 +6,12 @@ ...@@ -6,8 +6,12 @@
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_RESET_SCREEN_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_RESET_SCREEN_HANDLER_H_
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "chrome/browser/chromeos/login/screens/reset_view.h" #include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/screens/reset_screen_actor.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/dbus/update_engine_client.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
class PrefRegistrySimple; class PrefRegistrySimple;
...@@ -15,34 +19,74 @@ class PrefRegistrySimple; ...@@ -15,34 +19,74 @@ class PrefRegistrySimple;
namespace chromeos { namespace chromeos {
// WebUI implementation of ResetScreenActor. // WebUI implementation of ResetScreenActor.
class ResetScreenHandler : public ResetView, class ResetScreenHandler : public ResetScreenActor,
public BaseScreenHandler { public BaseScreenHandler,
public UpdateEngineClient::Observer {
public: public:
ResetScreenHandler(); ResetScreenHandler();
~ResetScreenHandler() override; ~ResetScreenHandler() override;
// ResetView implementation: // ResetScreenActor implementation:
void Bind(ResetModel& model) override;
void Unbind() override;
void PrepareToShow() override; void PrepareToShow() override;
void Show() override; void Show() override;
void Hide() override; void Hide() override;
void SetDelegate(Delegate* delegate) 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;
// UpdateEngineClient::Observer implementation:
void UpdateStatusChanged(const UpdateEngineClient::Status& status) override;
void OnRollbackCheck(bool can_rollback);
// Registers Local State preferences. // Registers Local State preferences.
static void RegisterPrefs(PrefRegistrySimple* registry); static void RegisterPrefs(PrefRegistrySimple* registry);
private: private:
// JS messages handlers.
void HandleOnCancel();
void HandleOnRestart();
void HandleOnPowerwash(bool rollback_checked);
void HandleOnLearnMore();
void HandleOnToggleRollback();
void HandleOnShowConfirm();
ResetModel* model_; void ChooseAndApplyShowScenario();
void ShowWithParams();
Delegate* delegate_;
// Help application used for help dialogs.
scoped_refptr<HelpAppLauncher> help_app_;
// Keeps whether screen should be shown right after initialization. // Keeps whether screen should be shown right after initialization.
bool show_on_init_; bool show_on_init_;
// Keeps whether restart is required before reset.
// False if first exec after boot.
bool restart_required_;
// Keeps whether previous reboot was requested from reset screen. Makes sense
// for first exec after boot situation.
bool reboot_was_requested_;
// Keeps whether rollback option is available.
bool rollback_available_;
// Keeps whether rollback option is active at the screen.
bool rollback_checked_;
// Whether rollback is initiated. Prevents screen-hide.
bool preparing_for_rollback_;
base::WeakPtrFactory<ResetScreenHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(ResetScreenHandler); DISALLOW_COPY_AND_ASSIGN(ResetScreenHandler);
}; };
......
...@@ -537,11 +537,9 @@ ...@@ -537,11 +537,9 @@
'browser/chromeos/login/screens/network_screen.cc', 'browser/chromeos/login/screens/network_screen.cc',
'browser/chromeos/login/screens/network_screen.h', 'browser/chromeos/login/screens/network_screen.h',
'browser/chromeos/login/screens/network_view.h', 'browser/chromeos/login/screens/network_view.h',
'browser/chromeos/login/screens/reset_model.cc',
'browser/chromeos/login/screens/reset_model.h',
'browser/chromeos/login/screens/reset_screen.cc', 'browser/chromeos/login/screens/reset_screen.cc',
'browser/chromeos/login/screens/reset_screen.h', 'browser/chromeos/login/screens/reset_screen.h',
'browser/chromeos/login/screens/reset_view.h', 'browser/chromeos/login/screens/reset_screen_actor.h',
'browser/chromeos/login/screens/screen_flow.h', 'browser/chromeos/login/screens/screen_flow.h',
'browser/chromeos/login/screens/terms_of_service_screen.cc', 'browser/chromeos/login/screens/terms_of_service_screen.cc',
'browser/chromeos/login/screens/terms_of_service_screen.h', 'browser/chromeos/login/screens/terms_of_service_screen.h',
...@@ -555,6 +553,7 @@ ...@@ -555,6 +553,7 @@
'browser/chromeos/login/screens/user_image_model.h', 'browser/chromeos/login/screens/user_image_model.h',
'browser/chromeos/login/screens/user_image_screen.cc', 'browser/chromeos/login/screens/user_image_screen.cc',
'browser/chromeos/login/screens/user_image_screen.h', 'browser/chromeos/login/screens/user_image_screen.h',
'browser/chromeos/login/screens/user_image_screen_actor.h',
'browser/chromeos/login/screens/user_selection_screen.cc', 'browser/chromeos/login/screens/user_selection_screen.cc',
'browser/chromeos/login/screens/user_selection_screen.h', 'browser/chromeos/login/screens/user_selection_screen.h',
'browser/chromeos/login/screens/wrong_hwid_screen.cc', 'browser/chromeos/login/screens/wrong_hwid_screen.cc',
......
...@@ -86,8 +86,6 @@ ...@@ -86,8 +86,6 @@
DESKTOP_USER_MANAGER: 'login-add-user' DESKTOP_USER_MANAGER: 'login-add-user'
}; };
/** @const */ var USER_ACTION_ROLLBACK_TOGGLED = 'rollback-toggled';
cr.define('cr.ui.login', function() { cr.define('cr.ui.login', function() {
var Bubble = cr.ui.Bubble; var Bubble = cr.ui.Bubble;
...@@ -380,8 +378,7 @@ cr.define('cr.ui.login', function() { ...@@ -380,8 +378,7 @@ cr.define('cr.ui.login', function() {
$('version-labels').hidden = !$('version-labels').hidden; $('version-labels').hidden = !$('version-labels').hidden;
} else if (name == ACCELERATOR_RESET) { } else if (name == ACCELERATOR_RESET) {
if (currentStepId == SCREEN_OOBE_RESET) if (currentStepId == SCREEN_OOBE_RESET)
$('reset').send(login.Screen.CALLBACK_USER_ACTED, chrome.send('toggleRollbackOnResetScreen');
USER_ACTION_ROLLBACK_TOGGLED);
else if (RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1) else if (RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1)
chrome.send('toggleResetScreen'); chrome.send('toggleResetScreen');
} else if (name == ACCELERATOR_DEVICE_REQUISITION) { } else if (name == ACCELERATOR_DEVICE_REQUISITION) {
......
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