Index: chrome/browser/chromeos/net/network_portal_detector_impl.cc |
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.cc b/chrome/browser/chromeos/net/network_portal_detector_impl.cc |
index a94e559348bf44ddf9b1b1f247e1850a2fbb0b19..b05c74996c86933b579d015959d1cabe0f5ce230 100644 |
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.cc |
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.cc |
@@ -156,7 +156,8 @@ |
weak_factory_(this), |
attempt_count_(0), |
strategy_(PortalDetectorStrategy::CreateById( |
- PortalDetectorStrategy::STRATEGY_ID_COUNT)) { |
+ PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN)), |
+ error_screen_displayed_(false) { |
captive_portal_detector_.reset(new CaptivePortalDetector(request_context)); |
strategy_->set_delegate(this); |
@@ -169,9 +170,12 @@ |
registrar_.Add(this, |
chrome::NOTIFICATION_AUTH_CANCELLED, |
content::NotificationService::AllSources()); |
+ registrar_.Add(this, |
+ chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
+ content::NotificationService::AllSources()); |
NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE); |
- SetStrategy(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN); |
+ UpdateCurrentStrategy(); |
} |
NetworkPortalDetectorImpl::~NetworkPortalDetectorImpl() { |
@@ -246,16 +250,6 @@ |
return false; |
StartDetection(); |
return true; |
-} |
- |
-void NetworkPortalDetectorImpl::SetStrategy( |
- PortalDetectorStrategy::StrategyId id) { |
- if (id == strategy_->Id()) |
- return; |
- strategy_.reset(PortalDetectorStrategy::CreateById(id).release()); |
- strategy_->set_delegate(this); |
- StopDetection(); |
- StartDetectionIfIdle(); |
} |
void NetworkPortalDetectorImpl::DefaultNetworkChanged( |
@@ -313,6 +307,15 @@ |
return time_ticks_for_testing_; |
} |
+void NetworkPortalDetectorImpl::OnErrorScreenShow() { |
+ error_screen_displayed_ = true; |
+ UpdateCurrentStrategy(); |
+} |
+ |
+void NetworkPortalDetectorImpl::OnErrorScreenHide() { |
+ error_screen_displayed_ = false; |
+ UpdateCurrentStrategy(); |
+} |
//////////////////////////////////////////////////////////////////////////////// |
// NetworkPortalDetectorImpl, private: |
@@ -469,6 +472,8 @@ |
return; |
StopDetection(); |
ScheduleAttempt(base::TimeDelta::FromSeconds(kProxyChangeDelaySec)); |
+ } else if (type == chrome::NOTIFICATION_LOGIN_USER_CHANGED) { |
+ UpdateCurrentStrategy(); |
} |
} |
@@ -556,4 +561,26 @@ |
} |
} |
+void NetworkPortalDetectorImpl::UpdateCurrentStrategy() { |
+ if (InSession()) { |
+ SetStrategy(PortalDetectorStrategy::STRATEGY_ID_SESSION); |
+ return; |
+ } |
+ if (error_screen_displayed_) { |
+ SetStrategy(PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN); |
+ return; |
+ } |
+ SetStrategy(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN); |
+} |
+ |
+void NetworkPortalDetectorImpl::SetStrategy( |
+ PortalDetectorStrategy::StrategyId id) { |
+ if (id == strategy_->Id()) |
+ return; |
+ strategy_.reset(PortalDetectorStrategy::CreateById(id).release()); |
+ strategy_->set_delegate(this); |
+ StopDetection(); |
+ StartDetectionIfIdle(); |
+} |
+ |
} // namespace chromeos |