summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/screens/error_screen.cc56
-rw-r--r--chrome/browser/chromeos/login/screens/error_screen.h3
-rw-r--r--chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h1
-rw-r--r--chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc5
4 files changed, 31 insertions, 34 deletions
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc
index 737fb5a..794c1f4 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.cc
+++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -11,18 +11,12 @@
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
-namespace {
-void* const kCanaryConstant = (void*)0xbaddecafbaddecafLLU;
-}
-
namespace chromeos {
ErrorScreen::ErrorScreen(ScreenObserver* screen_observer,
ErrorScreenActor* actor)
: WizardScreen(screen_observer),
- canary_1_(kCanaryConstant),
actor_(actor),
- canary_2_(kCanaryConstant),
parent_screen_(OobeDisplay::SCREEN_UNKNOWN),
weak_factory_(this) {
CHECK(actor_);
@@ -30,24 +24,21 @@ ErrorScreen::ErrorScreen(ScreenObserver* screen_observer,
}
ErrorScreen::~ErrorScreen() {
- CHECK(this);
- CHECK(canary_1_ == kCanaryConstant);
- CHECK(canary_2_ == kCanaryConstant);
- CHECK(actor_);
- actor_->SetDelegate(NULL);
+ if (actor_)
+ actor_->SetDelegate(NULL);
}
void ErrorScreen::PrepareToShow() {
}
void ErrorScreen::Show() {
- DCHECK(actor_);
- actor_->Show(parent_screen(), NULL);
+ if (actor_)
+ actor_->Show(parent_screen(), NULL);
}
void ErrorScreen::Hide() {
- DCHECK(actor_);
- actor_->Hide();
+ if (actor_)
+ actor_->Hide();
}
std::string ErrorScreen::GetName() const {
@@ -64,6 +55,10 @@ void ErrorScreen::OnLaunchOobeGuestSession() {
weak_factory_.GetWeakPtr()));
}
+void ErrorScreen::OnActorDestroyed() {
+ actor_ = nullptr;
+}
+
void ErrorScreen::OnAuthFailure(const AuthFailure& error) {
// The only condition leading here is guest mount failure, which should not
// happen in practice. For now, just log an error so this situation is visible
@@ -106,44 +101,43 @@ void ErrorScreen::OnOnlineChecked(const std::string& username, bool success) {
}
void ErrorScreen::FixCaptivePortal() {
- DCHECK(actor_);
- actor_->FixCaptivePortal();
+ if (actor_)
+ actor_->FixCaptivePortal();
}
void ErrorScreen::ShowCaptivePortal() {
- DCHECK(actor_);
- actor_->ShowCaptivePortal();
+ if (actor_)
+ actor_->ShowCaptivePortal();
}
void ErrorScreen::HideCaptivePortal() {
- DCHECK(actor_);
- actor_->HideCaptivePortal();
+ if (actor_)
+ actor_->HideCaptivePortal();
}
void ErrorScreen::SetUIState(UIState ui_state) {
- DCHECK(actor_);
- actor_->SetUIState(ui_state);
+ if (actor_)
+ actor_->SetUIState(ui_state);
}
ErrorScreen::UIState ErrorScreen::GetUIState() const {
- DCHECK(actor_);
- return actor_->ui_state();
+ return actor_ ? actor_->ui_state() : UI_STATE_UNKNOWN;
}
void ErrorScreen::SetErrorState(ErrorState error_state,
const std::string& network) {
- DCHECK(actor_);
- actor_->SetErrorState(error_state, network);
+ if (actor_)
+ actor_->SetErrorState(error_state, network);
}
void ErrorScreen::AllowGuestSignin(bool allow) {
- DCHECK(actor_);
- actor_->AllowGuestSignin(allow);
+ if (actor_)
+ actor_->AllowGuestSignin(allow);
}
void ErrorScreen::ShowConnectingIndicator(bool show) {
- DCHECK(actor_);
- actor_->ShowConnectingIndicator(show);
+ if (actor_)
+ actor_->ShowConnectingIndicator(show);
}
void ErrorScreen::StartGuestSessionAfterOwnershipCheck(
diff --git a/chrome/browser/chromeos/login/screens/error_screen.h b/chrome/browser/chromeos/login/screens/error_screen.h
index dcbad25..deaf400 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.h
+++ b/chrome/browser/chromeos/login/screens/error_screen.h
@@ -57,6 +57,7 @@ class ErrorScreen : public WizardScreen,
virtual void OnErrorShow() override;
virtual void OnErrorHide() override;
virtual void OnLaunchOobeGuestSession() override;
+ virtual void OnActorDestroyed() override;
// LoginPerformer::Delegate implementation:
virtual void OnAuthFailure(const AuthFailure& error) override;
@@ -103,9 +104,7 @@ class ErrorScreen : public WizardScreen,
void StartGuestSessionAfterOwnershipCheck(
DeviceSettingsService::OwnershipStatus ownership_status);
- void* volatile canary_1_; // For debugging of https://crbug.com/396557.
ErrorScreenActor* actor_;
- void* volatile canary_2_;
OobeDisplay::Screen parent_screen_;
diff --git a/chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h b/chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h
index c8f2d3d3..df711c7 100644
--- a/chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h
+++ b/chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h
@@ -13,6 +13,7 @@ class ErrorScreenActorDelegate {
virtual void OnErrorShow() = 0;
virtual void OnErrorHide() = 0;
virtual void OnLaunchOobeGuestSession() = 0;
+ virtual void OnActorDestroyed() = 0;
};
} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
index 3bfb52e..78d276b 100644
--- a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
@@ -49,7 +49,10 @@ ErrorScreenHandler::ErrorScreenHandler(
DCHECK(network_state_informer_.get());
}
-ErrorScreenHandler::~ErrorScreenHandler() {}
+ErrorScreenHandler::~ErrorScreenHandler() {
+ if (delegate_)
+ delegate_->OnActorDestroyed();
+}
void ErrorScreenHandler::SetDelegate(ErrorScreenActorDelegate* delegate) {
delegate_ = delegate;