summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/captive_portal_window_browsertest.cc16
-rw-r--r--chrome/browser/chromeos/login/screens/error_screen.cc19
-rw-r--r--chrome/browser/chromeos/login/screens/error_screen.h17
-rw-r--r--chrome/browser/chromeos/login/user_manager_impl.cc7
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector.cc2
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector.h9
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl.cc51
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl.h16
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc7
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_strategy.h1
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_test_impl.cc9
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_test_impl.h8
12 files changed, 68 insertions, 94 deletions
diff --git a/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc b/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc
index cccf9ae..23b2d1f 100644
--- a/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc
+++ b/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc
@@ -199,6 +199,10 @@ class CaptivePortalWindowCtorDtorTest : public LoginManagerTest {
return network_portal_detector_;
}
+ PortalDetectorStrategy::StrategyId strategy_id() {
+ return network_portal_detector_->strategy_id();
+ }
+
private:
NetworkPortalDetectorTestImpl* network_portal_detector_;
@@ -210,16 +214,22 @@ IN_PROC_BROWSER_TEST_F(CaptivePortalWindowCtorDtorTest, PRE_OpenPortalDialog) {
}
IN_PROC_BROWSER_TEST_F(CaptivePortalWindowCtorDtorTest, OpenPortalDialog) {
- network_portal_detector()->NotifyObserversForTesting();
- OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait();
LoginDisplayHostImpl* host =
static_cast<LoginDisplayHostImpl*>(LoginDisplayHostImpl::default_host());
-
ASSERT_TRUE(host);
OobeUI* oobe = host->GetOobeUI();
ASSERT_TRUE(oobe);
ErrorScreenActor* actor = oobe->GetErrorScreenActor();
ASSERT_TRUE(actor);
+
+ // Error screen asks portal detector to change detection strategy.
+ ErrorScreen error_screen(NULL, actor);
+
+ ASSERT_EQ(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN, strategy_id());
+ network_portal_detector()->NotifyObserversForTesting();
+ OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait();
+ ASSERT_EQ(PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN, strategy_id());
+
actor->ShowCaptivePortal();
}
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc
index a7a7bab..2aedaca 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.cc
+++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/net/network_portal_detector.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_strategy.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
namespace chromeos {
@@ -22,22 +23,10 @@ ErrorScreen::ErrorScreen(ScreenObserver* screen_observer,
weak_factory_(this) {
DCHECK(actor_);
actor_->SetDelegate(this);
- AddObserver(NetworkPortalDetector::Get());
}
ErrorScreen::~ErrorScreen() {
actor_->SetDelegate(NULL);
- RemoveObserver(NetworkPortalDetector::Get());
-}
-
-void ErrorScreen::AddObserver(Observer* observer) {
- if (observer)
- observers_.AddObserver(observer);
-}
-
-void ErrorScreen::RemoveObserver(Observer* observer) {
- if (observer)
- observers_.RemoveObserver(observer);
}
void ErrorScreen::PrepareToShow() {
@@ -58,11 +47,13 @@ std::string ErrorScreen::GetName() const {
}
void ErrorScreen::OnErrorShow() {
- FOR_EACH_OBSERVER(Observer, observers_, OnErrorScreenShow());
+ NetworkPortalDetector::Get()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN);
}
void ErrorScreen::OnErrorHide() {
- FOR_EACH_OBSERVER(Observer, observers_, OnErrorScreenHide());
+ NetworkPortalDetector::Get()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
}
void ErrorScreen::OnLaunchOobeGuestSession() {
diff --git a/chrome/browser/chromeos/login/screens/error_screen.h b/chrome/browser/chromeos/login/screens/error_screen.h
index bd20d81..66cb770 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.h
+++ b/chrome/browser/chromeos/login/screens/error_screen.h
@@ -9,7 +9,6 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
#include "chrome/browser/chromeos/login/login_performer.h"
#include "chrome/browser/chromeos/login/oobe_display.h"
#include "chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h"
@@ -25,13 +24,6 @@ class ErrorScreen : public WizardScreen,
public ErrorScreenActorDelegate,
public LoginPerformer::Delegate {
public:
- class Observer {
- public:
- virtual ~Observer() {}
- virtual void OnErrorScreenShow() = 0;
- virtual void OnErrorScreenHide() = 0;
- };
-
enum UIState {
UI_STATE_UNKNOWN = 0,
UI_STATE_UPDATE,
@@ -54,9 +46,6 @@ class ErrorScreen : public WizardScreen,
ErrorScreen(ScreenObserver* screen_observer, ErrorScreenActor* actor);
virtual ~ErrorScreen();
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
-
// WizardScreen implementation.
virtual void PrepareToShow() OVERRIDE;
virtual void Show() OVERRIDE;
@@ -117,12 +106,10 @@ class ErrorScreen : public WizardScreen,
OobeDisplay::Screen parent_screen_;
- base::WeakPtrFactory<ErrorScreen> weak_factory_;
-
- ObserverList<Observer> observers_;
-
scoped_ptr<LoginPerformer> guest_login_performer_;
+ base::WeakPtrFactory<ErrorScreen> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(ErrorScreen);
};
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc
index 7f27162..f9c557b 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.cc
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc
@@ -40,6 +40,8 @@
#include "chrome/browser/chromeos/login/supervised_user_manager_impl.h"
#include "chrome/browser/chromeos/login/user_image_manager_impl.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "chrome/browser/chromeos/net/network_portal_detector.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_strategy.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/policy/device_local_account.h"
#include "chrome/browser/chromeos/profiles/multiprofiles_session_aborted_dialog.h"
@@ -1570,6 +1572,11 @@ void UserManagerImpl::NotifyOnLogin() {
// Indicate to DeviceSettingsService that the owner key may have become
// available.
DeviceSettingsService::Get()->SetUsername(active_user_->email());
+
+ if (NetworkPortalDetector::IsInitialized()) {
+ NetworkPortalDetector::Get()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_SESSION);
+ }
}
}
diff --git a/chrome/browser/chromeos/net/network_portal_detector.cc b/chrome/browser/chromeos/net/network_portal_detector.cc
index 3a4c465..53ae3f8 100644
--- a/chrome/browser/chromeos/net/network_portal_detector.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector.cc
@@ -47,6 +47,8 @@ class NetworkPortalDetectorStubImpl : public NetworkPortalDetector {
virtual bool IsEnabled() OVERRIDE { return false; }
virtual void Enable(bool /* start_detection */) OVERRIDE {}
virtual bool StartDetectionIfIdle() OVERRIDE { return false; }
+ virtual void SetStrategy(
+ PortalDetectorStrategy::StrategyId /* id */) OVERRIDE {}
};
} // namespace
diff --git a/chrome/browser/chromeos/net/network_portal_detector.h b/chrome/browser/chromeos/net/network_portal_detector.h
index 1add8ee..4a5872f 100644
--- a/chrome/browser/chromeos/net/network_portal_detector.h
+++ b/chrome/browser/chromeos/net/network_portal_detector.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_H_
#include "base/basictypes.h"
-#include "chrome/browser/chromeos/login/screens/error_screen.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_strategy.h"
#include "net/url_request/url_fetcher.h"
namespace chromeos {
@@ -16,7 +16,7 @@ class NetworkState;
// This class handles all notifications about network changes from
// NetworkStateHandler and delegates portal detection for the active
// network to CaptivePortalService.
-class NetworkPortalDetector : public ErrorScreen::Observer {
+class NetworkPortalDetector {
public:
enum CaptivePortalStatus {
CAPTIVE_PORTAL_STATUS_UNKNOWN = 0,
@@ -96,8 +96,9 @@ class NetworkPortalDetector : public ErrorScreen::Observer {
// started.
virtual bool StartDetectionIfIdle() = 0;
- virtual void OnErrorScreenShow() OVERRIDE {}
- virtual void OnErrorScreenHide() OVERRIDE {}
+ // Sets current strategy according to |id|. If current detection id
+ // doesn't equal to |id|, detection is restarted.
+ virtual void SetStrategy(PortalDetectorStrategy::StrategyId id) = 0;
// Initializes network portal detector for testing. The
// |network_portal_detector| will be owned by the internal pointer
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.cc b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
index b05c749..a94e559 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
@@ -156,8 +156,7 @@ NetworkPortalDetectorImpl::NetworkPortalDetectorImpl(
weak_factory_(this),
attempt_count_(0),
strategy_(PortalDetectorStrategy::CreateById(
- PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN)),
- error_screen_displayed_(false) {
+ PortalDetectorStrategy::STRATEGY_ID_COUNT)) {
captive_portal_detector_.reset(new CaptivePortalDetector(request_context));
strategy_->set_delegate(this);
@@ -170,12 +169,9 @@ NetworkPortalDetectorImpl::NetworkPortalDetectorImpl(
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);
- UpdateCurrentStrategy();
+ SetStrategy(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
}
NetworkPortalDetectorImpl::~NetworkPortalDetectorImpl() {
@@ -252,6 +248,16 @@ bool NetworkPortalDetectorImpl::StartDetectionIfIdle() {
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(
const NetworkState* default_network) {
DCHECK(CalledOnValidThread());
@@ -307,15 +313,6 @@ base::TimeTicks NetworkPortalDetectorImpl::GetCurrentTimeTicks() {
return time_ticks_for_testing_;
}
-void NetworkPortalDetectorImpl::OnErrorScreenShow() {
- error_screen_displayed_ = true;
- UpdateCurrentStrategy();
-}
-
-void NetworkPortalDetectorImpl::OnErrorScreenHide() {
- error_screen_displayed_ = false;
- UpdateCurrentStrategy();
-}
////////////////////////////////////////////////////////////////////////////////
// NetworkPortalDetectorImpl, private:
@@ -472,8 +469,6 @@ void NetworkPortalDetectorImpl::Observe(
return;
StopDetection();
ScheduleAttempt(base::TimeDelta::FromSeconds(kProxyChangeDelaySec));
- } else if (type == chrome::NOTIFICATION_LOGIN_USER_CHANGED) {
- UpdateCurrentStrategy();
}
}
@@ -561,26 +556,4 @@ void NetworkPortalDetectorImpl::RecordDetectionStats(
}
}
-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
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.h b/chrome/browser/chromeos/net/network_portal_detector_impl.h
index 3f9aade..5a46362 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.h
@@ -73,6 +73,7 @@ class NetworkPortalDetectorImpl
virtual bool IsEnabled() OVERRIDE;
virtual void Enable(bool start_detection) OVERRIDE;
virtual bool StartDetectionIfIdle() OVERRIDE;
+ virtual void SetStrategy(PortalDetectorStrategy::StrategyId id) OVERRIDE;
// NetworkStateHandlerObserver implementation:
virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE;
@@ -82,10 +83,6 @@ class NetworkPortalDetectorImpl
virtual base::TimeTicks AttemptStartTime() OVERRIDE;
virtual base::TimeTicks GetCurrentTimeTicks() OVERRIDE;
- // ErrorScreen::Observer implementation:
- virtual void OnErrorScreenShow() OVERRIDE;
- virtual void OnErrorScreenHide() OVERRIDE;
-
private:
friend class NetworkPortalDetectorImplTest;
friend class NetworkPortalDetectorImplBrowserTest;
@@ -140,14 +137,6 @@ class NetworkPortalDetectorImpl
void NotifyDetectionCompleted(const NetworkState* network,
const CaptivePortalState& state);
- // Updates current detection strategy according to the curren state:
- // error screen, login screen or user session.
- void UpdateCurrentStrategy();
-
- // Sets current strategy according to |id|. If current detection id
- // doesn't equal to |id|, detection is restarted.
- void SetStrategy(PortalDetectorStrategy::StrategyId id);
-
State state() const { return state_; }
bool is_idle() const {
@@ -237,9 +226,6 @@ class NetworkPortalDetectorImpl
// Current detection strategy.
scoped_ptr<PortalDetectorStrategy> strategy_;
- // True when error screen is displayed.
- bool error_screen_displayed_;
-
// UI notification controller about captive portal state.
NetworkPortalNotificationController notification_controller_;
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc b/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc
index 20fb4b9..d83eaae 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc
@@ -14,6 +14,7 @@
#include "base/metrics/statistics_recorder.h"
#include "base/run_loop.h"
#include "chrome/browser/chromeos/net/network_portal_detector_impl.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_strategy.h"
#include "chrome/browser/chromeos/net/network_portal_detector_test_utils.h"
#include "chrome/test/base/testing_profile.h"
#include "chromeos/chromeos_switches.h"
@@ -134,11 +135,13 @@ class NetworkPortalDetectorImplTest
}
void enable_error_screen_strategy() {
- network_portal_detector()->OnErrorScreenShow();
+ network_portal_detector()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN);
}
void disable_error_screen_strategy() {
- network_portal_detector()->OnErrorScreenHide();
+ network_portal_detector()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
}
void stop_detection() { network_portal_detector()->StopDetection(); }
diff --git a/chrome/browser/chromeos/net/network_portal_detector_strategy.h b/chrome/browser/chromeos/net/network_portal_detector_strategy.h
index 36706da..a57e85b 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_strategy.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_strategy.h
@@ -18,6 +18,7 @@ class PortalDetectorStrategy {
STRATEGY_ID_LOGIN_SCREEN,
STRATEGY_ID_ERROR_SCREEN,
STRATEGY_ID_SESSION,
+ STRATEGY_ID_COUNT
};
class Delegate {
diff --git a/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc b/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc
index 0943b4a..ca2980a 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc
@@ -8,7 +8,9 @@
namespace chromeos {
-NetworkPortalDetectorTestImpl::NetworkPortalDetectorTestImpl() {}
+NetworkPortalDetectorTestImpl::NetworkPortalDetectorTestImpl()
+ : strategy_id_(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN) {
+}
NetworkPortalDetectorTestImpl::~NetworkPortalDetectorTestImpl() {
}
@@ -83,4 +85,9 @@ bool NetworkPortalDetectorTestImpl::StartDetectionIfIdle() {
return false;
}
+void NetworkPortalDetectorTestImpl::SetStrategy(
+ PortalDetectorStrategy::StrategyId id) {
+ strategy_id_ = id;
+}
+
} // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_portal_detector_test_impl.h b/chrome/browser/chromeos/net/network_portal_detector_test_impl.h
index 7ca0592..a176ba2 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_test_impl.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_test_impl.h
@@ -36,14 +36,20 @@ class NetworkPortalDetectorTestImpl : public NetworkPortalDetector {
virtual void Enable(bool start_detection) OVERRIDE;
virtual bool StartDetectionIfIdle() OVERRIDE;
+ virtual void SetStrategy(PortalDetectorStrategy::StrategyId id) OVERRIDE;
+
+ PortalDetectorStrategy::StrategyId strategy_id() const {
+ return strategy_id_;
+ }
+
private:
typedef std::string NetworkId;
typedef base::hash_map<NetworkId, CaptivePortalState> CaptivePortalStateMap;
-
ObserverList<Observer> observers_;
scoped_ptr<NetworkState> default_network_;
CaptivePortalStateMap portal_state_map_;
+ PortalDetectorStrategy::StrategyId strategy_id_;
DISALLOW_COPY_AND_ASSIGN(NetworkPortalDetectorTestImpl);
};