Index: chrome/browser/chromeos/login/network_screen.cc |
diff --git a/chrome/browser/chromeos/login/network_screen.cc b/chrome/browser/chromeos/login/network_screen.cc |
index 909d4bf04401a9ee7611ebbf5a43a258a425ad0d..f2bf26b854cd2b29b7f7400d93b9435fe35d85b3 100644 |
--- a/chrome/browser/chromeos/login/network_screen.cc |
+++ b/chrome/browser/chromeos/login/network_screen.cc |
@@ -37,10 +37,14 @@ NetworkScreen::NetworkScreen(ScreenObserver* screen_observer, |
is_network_subscribed_(false), |
continue_pressed_(false), |
actor_(actor) { |
- actor_->SetDelegate(this); |
+ DCHECK(actor_); |
+ if (actor_) |
+ actor_->SetDelegate(this); |
} |
NetworkScreen::~NetworkScreen() { |
+ if (actor_) |
+ actor_->SetDelegate(NULL); |
connection_timer_.Stop(); |
UnsubscribeNetworkNotification(); |
} |
@@ -49,16 +53,19 @@ NetworkScreen::~NetworkScreen() { |
// NetworkScreen, WizardScreen implementation: |
void NetworkScreen::PrepareToShow() { |
- actor_->PrepareToShow(); |
+ if (actor_) |
+ actor_->PrepareToShow(); |
} |
void NetworkScreen::Show() { |
- actor_->Show(); |
+ if (actor_) |
+ actor_->Show(); |
Refresh(); |
} |
void NetworkScreen::Hide() { |
- actor_->Hide(); |
+ if (actor_) |
+ actor_->Hide(); |
} |
std::string NetworkScreen::GetName() const { |
@@ -83,6 +90,11 @@ void NetworkScreen::Refresh() { |
/////////////////////////////////////////////////////////////////////////////// |
// NetworkScreen, NetworkScreenActor::Delegate implementation: |
+void NetworkScreen::OnActorDestroyed(NetworkScreenActor* actor) { |
+ if (actor_ == actor) |
+ actor_ = NULL; |
+} |
+ |
void NetworkScreen::OnContinuePressed() { |
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary(); |
if (network && network->Connected()) { |
@@ -124,7 +136,7 @@ void NetworkScreen::OnConnectionTimeout() { |
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary(); |
bool is_connected = network && network->Connected(); |
- if (!is_connected) { |
+ if (!is_connected && actor_) { |
// Show error bubble. |
actor_->ShowError( |
l10n_util::GetStringFUTF16( |
@@ -163,8 +175,10 @@ void NetworkScreen::StopWaitingForConnection(const string16& network_id) { |
connection_timer_.Stop(); |
network_id_ = network_id; |
- actor_->ShowConnectingStatus(false, network_id_); |
- actor_->EnableContinue(is_connected); |
+ if (actor_) { |
+ actor_->ShowConnectingStatus(false, network_id_); |
+ actor_->EnableContinue(is_connected); |
+ } |
} |
void NetworkScreen::WaitForConnection(const string16& network_id) { |
@@ -177,9 +191,10 @@ void NetworkScreen::WaitForConnection(const string16& network_id) { |
} |
network_id_ = network_id; |
- actor_->ShowConnectingStatus(continue_pressed_, network_id_); |
- |
- actor_->EnableContinue(false); |
+ if (actor_) { |
+ actor_->ShowConnectingStatus(continue_pressed_, network_id_); |
+ actor_->EnableContinue(false); |
+ } |
} |
} // namespace chromeos |