diff options
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; |