summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 10:35:11 +0000
committerygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 10:35:11 +0000
commitc4e31cf2ce7a1d8f6424c475e742c12286860c3c (patch)
treecbd3bde04954000749f9c5e878c500c14775c148
parent8e4dafff431b9d65c57a77a767d99d3f6edd8df5 (diff)
downloadchromium_src-c4e31cf2ce7a1d8f6424c475e742c12286860c3c.zip
chromium_src-c4e31cf2ce7a1d8f6424c475e742c12286860c3c.tar.gz
chromium_src-c4e31cf2ce7a1d8f6424c475e742c12286860c3c.tar.bz2
Refactoring of the NetworkPortalDetector. Observers of the
NetworkPortalDetector explicitly unsubscribe themselves during destruction. BUG=302812 TEST=unit_tests:NetworkPortalDetector* Review URL: https://codereview.chromium.org/26657004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230096 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc47
-rw-r--r--chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.cc13
-rw-r--r--chrome/browser/chromeos/login/managed/supervised_user_creation_browsertest.cc19
-rw-r--r--chrome/browser/chromeos/login/oauth2_login_verifier.cc2
-rw-r--r--chrome/browser/chromeos/login/screens/update_screen.cc19
-rw-r--r--chrome/browser/chromeos/login/screens/update_screen_browsertest.cc26
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.cc4
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector.cc75
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector.h23
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl.cc13
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl.h2
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc3
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_test_impl.cc (renamed from chrome/browser/chromeos/net/network_portal_detector_stub.cc)38
-rw-r--r--chrome/browser/chromeos/net/network_portal_detector_test_impl.h (renamed from chrome/browser/chromeos/net/network_portal_detector_stub.h)18
-rw-r--r--chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc20
-rw-r--r--chrome/browser/ui/webui/chromeos/login/network_state_informer.cc15
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc2
-rw-r--r--chrome/chrome_browser_chromeos.gypi4
18 files changed, 168 insertions, 175 deletions
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index 95cd810..e5559b1 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -570,6 +570,26 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() {
UserManager::Get()->RestoreActiveSessions();
}
+ // Initialize the network portal detector for Chrome OS. The network
+ // portal detector starts to listen for notifications from
+ // NetworkStateHandler and initiates captive portal detection for
+ // active networks. Shoule be called before call to
+ // OptionallyRunChromeOSLoginManager, because it depends on
+ // NetworkPortalDetector.
+ NetworkPortalDetector::Initialize();
+ {
+ NetworkPortalDetector* detector = NetworkPortalDetector::Get();
+#if defined(GOOGLE_CHROME_BUILD)
+ bool is_official_build = true;
+#else
+ bool is_official_build = false;
+#endif
+ // Enable portal detector if EULA was previously accepted or if
+ // this is an unofficial build.
+ if (!is_official_build || StartupUtils::IsEulaAccepted())
+ detector->Enable(true);
+ }
+
// Tests should be able to tune login manager before showing it.
// Thus only show login manager in normal (non-testing) mode.
if (!parameters().ui_task ||
@@ -588,23 +608,6 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() {
peripheral_battery_observer_.reset(new PeripheralBatteryObserver());
- // Initialize the network portal detector for Chrome OS. The network portal
- // detector starts to listen for notifications from NetworkStateHandler and
- // initiates captive portal detection for active networks.
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (NetworkPortalDetector::IsEnabledInCommandLine() && detector) {
- detector->Init();
-#if defined(GOOGLE_CHROME_BUILD)
- bool is_official_build = true;
-#else
- bool is_official_build = false;
-#endif
- // Enable portal detector if EULA was previously accepted or if
- // this is an unofficial build.
- if (!is_official_build || StartupUtils::IsEulaAccepted())
- detector->Enable(true);
- }
-
display_configuration_observer_.reset(
new DisplayConfigurationObserver());
@@ -680,10 +683,6 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() {
if (NetworkChangeNotifierFactoryChromeos::GetInstance())
NetworkChangeNotifierFactoryChromeos::GetInstance()->Shutdown();
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (NetworkPortalDetector::IsEnabledInCommandLine() && detector)
- detector->Shutdown();
-
// Destroy UI related classes before destroying services that they may
// depend on.
data_promo_notification_.reset();
@@ -750,6 +749,12 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() {
// http://crbug.com/243364).
ChromeBrowserMainPartsLinux::PostMainMessageLoopRun();
+ // Called after
+ // ChromeBrowserMainPartsLinux::PostMainMessageLoopRun() to be
+ // executed after execution of chrome::CloseAsh(), because some
+ // parts of WebUI depends on NetworkPortalDetector.
+ NetworkPortalDetector::Shutdown();
+
UserManager::Destroy();
}
diff --git a/chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.cc b/chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.cc
index 671b19c..043a536 100644
--- a/chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.cc
+++ b/chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.cc
@@ -96,8 +96,7 @@ LocallyManagedUserCreationScreen::~LocallyManagedUserCreationScreen() {
actor_->SetDelegate(NULL);
if (image_decoder_.get())
image_decoder_->set_delegate(NULL);
- if (NetworkPortalDetector::GetInstance())
- NetworkPortalDetector::GetInstance()->RemoveObserver(this);
+ NetworkPortalDetector::Get()->RemoveObserver(this);
}
void LocallyManagedUserCreationScreen::PrepareToShow() {
@@ -116,9 +115,8 @@ void LocallyManagedUserCreationScreen::Show() {
actor_->ShowIntroPage();
}
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (detector && !on_error_screen_)
- detector->AddAndFireObserver(this);
+ if (!on_error_screen_)
+ NetworkPortalDetector::Get()->AddAndFireObserver(this);
on_error_screen_ = false;
}
@@ -161,9 +159,8 @@ void LocallyManagedUserCreationScreen::ShowInitialScreen() {
void LocallyManagedUserCreationScreen::Hide() {
if (actor_)
actor_->Hide();
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (detector && !on_error_screen_)
- detector->RemoveObserver(this);
+ if (!on_error_screen_)
+ NetworkPortalDetector::Get()->RemoveObserver(this);
}
std::string LocallyManagedUserCreationScreen::GetName() const {
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_creation_browsertest.cc b/chrome/browser/chromeos/login/managed/supervised_user_creation_browsertest.cc
index 4d3aade..def99d6 100644
--- a/chrome/browser/chromeos/login/managed/supervised_user_creation_browsertest.cc
+++ b/chrome/browser/chromeos/login/managed/supervised_user_creation_browsertest.cc
@@ -15,7 +15,7 @@
#include "chrome/browser/chromeos/login/login_manager_test.h"
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/webui_login_view.h"
-#include "chrome/browser/chromeos/net/network_portal_detector_stub.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
#include "chrome/browser/managed_mode/managed_user_registration_utility.h"
#include "chrome/browser/managed_mode/managed_user_registration_utility_stub.h"
@@ -46,7 +46,7 @@ class SupervisedUserTest : public chromeos::LoginManagerTest {
protected:
SupervisedUserTest() : LoginManagerTest(true),
mock_async_method_caller_(NULL),
- network_portal_detector_stub_(NULL),
+ network_portal_detector_(NULL),
registration_utility_stub_(NULL) {
}
@@ -70,15 +70,14 @@ class SupervisedUserTest : public chromeos::LoginManagerTest {
// Setup network portal detector to return online state for both
// ethernet and wifi networks. Ethernet is an active network by
// default.
- network_portal_detector_stub_ =
- static_cast<NetworkPortalDetectorStub*>(
- NetworkPortalDetector::GetInstance());
+ network_portal_detector_ = new NetworkPortalDetectorTestImpl();
+ NetworkPortalDetector::InitializeForTesting(network_portal_detector_);
NetworkPortalDetector::CaptivePortalState online_state;
online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
online_state.response_code = 204;
- network_portal_detector_stub_->SetDefaultNetworkPathForTesting(
+ network_portal_detector_->SetDefaultNetworkPathForTesting(
kStubEthernetServicePath);
- network_portal_detector_stub_->SetDetectionResultsForTesting(
+ network_portal_detector_->SetDetectionResultsForTesting(
kStubEthernetServicePath, online_state);
}
@@ -93,6 +92,10 @@ class SupervisedUserTest : public chromeos::LoginManagerTest {
LoginManagerTest::TearDown();
}
+ virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
+ NetworkPortalDetector::Shutdown();
+ }
+
void JSEval(const std::string& script) {
EXPECT_TRUE(content::ExecuteScript(web_contents(), script));
}
@@ -126,7 +129,7 @@ class SupervisedUserTest : public chromeos::LoginManagerTest {
protected:
cryptohome::MockAsyncMethodCaller* mock_async_method_caller_;
- NetworkPortalDetectorStub* network_portal_detector_stub_;
+ NetworkPortalDetectorTestImpl* network_portal_detector_;
ManagedUserRegistrationUtilityStub* registration_utility_stub_;
scoped_ptr<ScopedTestingManagedUserRegistrationUtility> scoped_utility_;
diff --git a/chrome/browser/chromeos/login/oauth2_login_verifier.cc b/chrome/browser/chromeos/login/oauth2_login_verifier.cc
index 64f21d6..dca159f 100644
--- a/chrome/browser/chromeos/login/oauth2_login_verifier.cc
+++ b/chrome/browser/chromeos/login/oauth2_login_verifier.cc
@@ -62,7 +62,7 @@ void OAuth2LoginVerifier::VerifyProfileTokens(Profile* profile) {
// portal.
const NetworkState* default_network =
NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
+ NetworkPortalDetector* detector = NetworkPortalDetector::Get();
NetworkPortalDetector::CaptivePortalState state =
detector->GetCaptivePortalState(default_network);
if (!default_network ||
diff --git a/chrome/browser/chromeos/login/screens/update_screen.cc b/chrome/browser/chromeos/login/screens/update_screen.cc
index 240bd8f..8e4b07a 100644
--- a/chrome/browser/chromeos/login/screens/update_screen.cc
+++ b/chrome/browser/chromeos/login/screens/update_screen.cc
@@ -115,8 +115,7 @@ UpdateScreen::UpdateScreen(
UpdateScreen::~UpdateScreen() {
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
- if (NetworkPortalDetector::GetInstance())
- NetworkPortalDetector::GetInstance()->RemoveObserver(this);
+ NetworkPortalDetector::Get()->RemoveObserver(this);
GetInstanceSet().erase(this);
if (actor_)
actor_->SetDelegate(NULL);
@@ -253,12 +252,11 @@ void UpdateScreen::OnPortalDetectionCompleted(
state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE) &&
is_first_detection_notification_) {
is_first_detection_notification_ = false;
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(
base::IgnoreResult(&NetworkPortalDetector::StartDetectionIfIdle),
- base::Unretained(detector)));
+ base::Unretained(NetworkPortalDetector::Get())));
return;
}
is_first_detection_notification_ = false;
@@ -284,12 +282,10 @@ void UpdateScreen::OnPortalDetectionCompleted(
}
void UpdateScreen::StartNetworkCheck() {
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
-
// If portal detector is enabled and portal detection before AU is
// allowed, initiate network state check. Otherwise, directly
// proceed to update.
- if (!NetworkPortalDetector::IsEnabledInCommandLine() || !detector ||
+ if (!NetworkPortalDetector::Get()->IsEnabled() ||
!IsBlockingUpdateEnabledInCommandLine()) {
StartUpdateCheck();
return;
@@ -297,7 +293,7 @@ void UpdateScreen::StartNetworkCheck() {
state_ = STATE_FIRST_PORTAL_CHECK;
is_first_detection_notification_ = true;
is_first_portal_notification_ = true;
- detector->AddAndFireObserver(this);
+ NetworkPortalDetector::Get()->AddAndFireObserver(this);
}
void UpdateScreen::CancelUpdate() {
@@ -330,8 +326,7 @@ void UpdateScreen::PrepareToShow() {
void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
- if (NetworkPortalDetector::GetInstance())
- NetworkPortalDetector::GetInstance()->RemoveObserver(this);
+ NetworkPortalDetector::Get()->RemoveObserver(this);
switch (reason) {
case REASON_UPDATE_CANCELED:
@@ -483,9 +478,7 @@ ErrorScreen* UpdateScreen::GetErrorScreen() {
}
void UpdateScreen::StartUpdateCheck() {
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (detector)
- detector->RemoveObserver(this);
+ NetworkPortalDetector::Get()->RemoveObserver(this);
if (state_ == STATE_ERROR)
HideErrorMessage();
state_ = STATE_UPDATE;
diff --git a/chrome/browser/chromeos/login/screens/update_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/update_screen_browsertest.cc
index f025c94..55915ab 100644
--- a/chrome/browser/chromeos/login/screens/update_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/screens/update_screen_browsertest.cc
@@ -10,7 +10,7 @@
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h"
#include "chrome/browser/chromeos/net/network_portal_detector.h"
-#include "chrome/browser/chromeos/net/network_portal_detector_stub.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/fake_dbus_thread_manager.h"
#include "chromeos/dbus/fake_update_engine_client.h"
@@ -37,7 +37,7 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
public:
UpdateScreenTest() : WizardInProcessBrowserTest("update"),
fake_update_engine_client_(NULL),
- network_portal_detector_stub_(NULL) {
+ network_portal_detector_(NULL) {
}
protected:
@@ -53,9 +53,8 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
// Setup network portal detector to return online state for both
// ethernet and wifi networks. Ethernet is an active network by
// default.
- network_portal_detector_stub_ =
- static_cast<NetworkPortalDetectorStub*>(
- NetworkPortalDetector::GetInstance());
+ network_portal_detector_ = new NetworkPortalDetectorTestImpl();
+ NetworkPortalDetector::InitializeForTesting(network_portal_detector_);
NetworkPortalDetector::CaptivePortalState online_state;
online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
online_state.response_code = 204;
@@ -87,27 +86,28 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
}
virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
+ NetworkPortalDetector::Shutdown();
WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture();
DBusThreadManager::Shutdown();
}
void SetDefaultNetworkPath(const std::string& service_path) {
- DCHECK(network_portal_detector_stub_);
- network_portal_detector_stub_->SetDefaultNetworkPathForTesting(
+ DCHECK(network_portal_detector_);
+ network_portal_detector_->SetDefaultNetworkPathForTesting(
service_path);
}
void SetDetectionResults(
const std::string& service_path,
const NetworkPortalDetector::CaptivePortalState& state) {
- DCHECK(network_portal_detector_stub_);
- network_portal_detector_stub_->SetDetectionResultsForTesting(service_path,
- state);
+ DCHECK(network_portal_detector_);
+ network_portal_detector_->SetDetectionResultsForTesting(service_path,
+ state);
}
void NotifyPortalDetectionCompleted() {
- DCHECK(network_portal_detector_stub_);
- network_portal_detector_stub_->NotifyObserversForTesting();
+ DCHECK(network_portal_detector_);
+ network_portal_detector_->NotifyObserversForTesting();
}
FakeUpdateEngineClient* fake_update_engine_client_;
@@ -115,7 +115,7 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
scoped_ptr<MockErrorScreenActor> mock_error_screen_actor_;
scoped_ptr<MockErrorScreen> mock_error_screen_;
UpdateScreen* update_screen_;
- NetworkPortalDetectorStub* network_portal_detector_stub_;
+ NetworkPortalDetectorTestImpl* network_portal_detector_;
private:
DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest);
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index 61a6556..84c9500 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -620,9 +620,7 @@ void WizardController::PerformPostEulaActions() {
NetworkStateHandler::kDefaultCheckPortalList);
host_->CheckForAutoEnrollment();
host_->PrewarmAuthentication();
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (NetworkPortalDetector::IsEnabledInCommandLine() && detector)
- detector->Enable(true);
+ NetworkPortalDetector::Get()->Enable(true);
}
void WizardController::PerformPostUpdateActions() {
diff --git a/chrome/browser/chromeos/net/network_portal_detector.cc b/chrome/browser/chromeos/net/network_portal_detector.cc
index 1f7bf5d..11d4074 100644
--- a/chrome/browser/chromeos/net/network_portal_detector.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector.cc
@@ -8,7 +8,7 @@
#include "base/logging.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/net/network_portal_detector_impl.h"
-#include "chrome/browser/chromeos/net/network_portal_detector_stub.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
#include "chrome/common/chrome_switches.h"
#include "chromeos/chromeos_switches.h"
@@ -17,47 +17,82 @@ namespace chromeos {
namespace {
NetworkPortalDetector* g_network_portal_detector = NULL;
+bool g_network_portal_detector_set_for_testing = false;
bool IsTestMode() {
return CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType);
}
-} // namespace
-
-NetworkPortalDetector::NetworkPortalDetector() {
+bool IsEnabledInCommandLine() {
+ return !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableChromeCaptivePortalDetector);
}
-NetworkPortalDetector::~NetworkPortalDetector() {
+// Stub implementation of NetworkPortalDetector.
+class NetworkPortalDetectorStubImpl : public NetworkPortalDetector {
+ protected:
+ // NetworkPortalDetector implementation:
+ virtual void AddObserver(Observer* /* observer */) OVERRIDE {}
+ virtual void AddAndFireObserver(Observer* observer) OVERRIDE {
+ if (observer)
+ observer->OnPortalDetectionCompleted(NULL, CaptivePortalState());
+ }
+ virtual void RemoveObserver(Observer* /* observer */) OVERRIDE {}
+ virtual CaptivePortalState GetCaptivePortalState(
+ const NetworkState* /* network */) OVERRIDE {
+ return CaptivePortalState();
+ }
+ virtual bool IsEnabled() OVERRIDE { return false; }
+ virtual void Enable(bool /* start_detection */) OVERRIDE {}
+ virtual bool StartDetectionIfIdle() OVERRIDE { return false; }
+ virtual void EnableLazyDetection() OVERRIDE {}
+ virtual void DisableLazyDetection() OVERRIDE {}
+};
+
+} // namespace
+
+void NetworkPortalDetector::InitializeForTesting(
+ NetworkPortalDetector* network_portal_detector) {
+ CHECK(!g_network_portal_detector)
+ << "NetworkPortalDetector::InitializeForTesting() is called after "
+ << "Initialize()";
+ CHECK(network_portal_detector);
+ g_network_portal_detector = network_portal_detector;
+ g_network_portal_detector_set_for_testing = true;
}
// static
-NetworkPortalDetector* NetworkPortalDetector::CreateInstance() {
- DCHECK(!g_network_portal_detector);
- CHECK(NetworkPortalDetector::IsEnabledInCommandLine());
- if (IsTestMode()) {
- g_network_portal_detector = new NetworkPortalDetectorStub();
+void NetworkPortalDetector::Initialize() {
+ if (g_network_portal_detector_set_for_testing)
+ return;
+ CHECK(!g_network_portal_detector)
+ << "NetworkPortalDetector::Initialize() is called twice";
+ if (!IsEnabledInCommandLine() || IsTestMode()) {
+ g_network_portal_detector = new NetworkPortalDetectorStubImpl();
} else {
CHECK(g_browser_process);
CHECK(g_browser_process->system_request_context());
g_network_portal_detector = new NetworkPortalDetectorImpl(
g_browser_process->system_request_context());
}
- return g_network_portal_detector;
}
// static
-NetworkPortalDetector* NetworkPortalDetector::GetInstance() {
- if (!NetworkPortalDetector::IsEnabledInCommandLine())
- return NULL;
- if (!g_network_portal_detector)
- return CreateInstance();
- return g_network_portal_detector;
+void NetworkPortalDetector::Shutdown() {
+ CHECK(g_network_portal_detector || g_network_portal_detector_set_for_testing)
+ << "NetworkPortalDetectorImpl::Shutdown() is called "
+ << "without previous call to Initialize()";
+ if (g_network_portal_detector) {
+ delete g_network_portal_detector;
+ g_network_portal_detector = NULL;
+ }
}
// static
-bool NetworkPortalDetector::IsEnabledInCommandLine() {
- return !CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableChromeCaptivePortalDetector);
+NetworkPortalDetector* NetworkPortalDetector::Get() {
+ CHECK(g_network_portal_detector)
+ << "NetworkPortalDetector::Get() called before Initialize()";
+ return g_network_portal_detector;
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_portal_detector.h b/chrome/browser/chromeos/net/network_portal_detector.h
index dd15575..9568b53 100644
--- a/chrome/browser/chromeos/net/network_portal_detector.h
+++ b/chrome/browser/chromeos/net/network_portal_detector.h
@@ -53,9 +53,6 @@ class NetworkPortalDetector {
virtual ~Observer() {}
};
- virtual void Init() = 0;
- virtual void Shutdown() = 0;
-
// Adds |observer| to the observers list.
virtual void AddObserver(Observer* observer) = 0;
@@ -100,18 +97,24 @@ class NetworkPortalDetector {
// Dizables lazy detection mode.
virtual void DisableLazyDetection() = 0;
+ // Initializes network portal detector for testing. The
+ // |network_portal_detector| will be owned by the internal pointer
+ // and deleted by Shutdown().
+ static void InitializeForTesting(
+ NetworkPortalDetector* network_portal_detector);
+
// Creates an instance of the NetworkPortalDetector.
- static NetworkPortalDetector* CreateInstance();
+ static void Initialize();
- // Gets the instance of the NetworkPortalDetector.
- static NetworkPortalDetector* GetInstance();
+ // Deletes the instance of the NetworkPortalDetector.
+ static void Shutdown();
- // Returns true is NetworkPortalDetector service is enabled in command line.
- static bool IsEnabledInCommandLine();
+ // Gets the instance of the NetworkPortalDetector.
+ static NetworkPortalDetector* Get();
protected:
- NetworkPortalDetector();
- virtual ~NetworkPortalDetector();
+ NetworkPortalDetector() {}
+ virtual ~NetworkPortalDetector() {}
private:
DISALLOW_COPY_AND_ASSIGN(NetworkPortalDetector);
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.cc b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
index c8c454f..0088b91 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
@@ -71,7 +71,8 @@ std::string CaptivePortalStatusString(
NetworkPortalDetectorImpl::NetworkPortalDetectorImpl(
const scoped_refptr<net::URLRequestContextGetter>& request_context)
- : test_url_(CaptivePortalDetector::kDefaultURL),
+ : state_(STATE_IDLE),
+ test_url_(CaptivePortalDetector::kDefaultURL),
enabled_(false),
weak_ptr_factory_(this),
attempt_count_(0),
@@ -91,20 +92,12 @@ NetworkPortalDetectorImpl::NetworkPortalDetectorImpl(
registrar_.Add(this,
chrome::NOTIFICATION_AUTH_CANCELLED,
content::NotificationService::AllSources());
-}
-
-NetworkPortalDetectorImpl::~NetworkPortalDetectorImpl() {
-}
-void NetworkPortalDetectorImpl::Init() {
- DCHECK(CalledOnValidThread());
-
- state_ = STATE_IDLE;
NetworkHandler::Get()->network_state_handler()->AddObserver(
this, FROM_HERE);
}
-void NetworkPortalDetectorImpl::Shutdown() {
+NetworkPortalDetectorImpl::~NetworkPortalDetectorImpl() {
DCHECK(CalledOnValidThread());
detection_task_.Cancel();
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.h b/chrome/browser/chromeos/net/network_portal_detector_impl.h
index cf0c4e9..9c7b68e 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.h
@@ -47,8 +47,6 @@ class NetworkPortalDetectorImpl
virtual ~NetworkPortalDetectorImpl();
// NetworkPortalDetector implementation:
- virtual void Init() OVERRIDE;
- virtual void Shutdown() OVERRIDE;
virtual void AddObserver(Observer* observer) OVERRIDE;
virtual void AddAndFireObserver(Observer* observer) OVERRIDE;
virtual void RemoveObserver(Observer* observer) OVERRIDE;
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 8f3c18a..42e1657 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl_unittest.cc
@@ -50,7 +50,6 @@ class NetworkPortalDetectorImplTest
profile_.reset(new TestingProfile());
network_portal_detector_.reset(
new NetworkPortalDetectorImpl(profile_->GetRequestContext()));
- network_portal_detector_->Init();
network_portal_detector_->Enable(false);
set_detector(network_portal_detector_->captive_portal_detector_.get());
@@ -60,7 +59,7 @@ class NetworkPortalDetectorImplTest
}
virtual void TearDown() {
- network_portal_detector_->Shutdown();
+ network_portal_detector_.reset();
profile_.reset();
NetworkHandler::Shutdown();
DBusThreadManager::Shutdown();
diff --git a/chrome/browser/chromeos/net/network_portal_detector_stub.cc b/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc
index 2fd08aa..473f0d70 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_stub.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_test_impl.cc
@@ -1,19 +1,19 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/chromeos/net/network_portal_detector_stub.h"
+#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
#include "chromeos/network/network_state.h"
namespace chromeos {
-NetworkPortalDetectorStub::NetworkPortalDetectorStub() {}
+NetworkPortalDetectorTestImpl::NetworkPortalDetectorTestImpl() {}
-NetworkPortalDetectorStub::~NetworkPortalDetectorStub() {
+NetworkPortalDetectorTestImpl::~NetworkPortalDetectorTestImpl() {
}
-void NetworkPortalDetectorStub::SetDefaultNetworkPathForTesting(
+void NetworkPortalDetectorTestImpl::SetDefaultNetworkPathForTesting(
const std::string& service_path) {
if (service_path.empty())
default_network_.reset();
@@ -21,14 +21,14 @@ void NetworkPortalDetectorStub::SetDefaultNetworkPathForTesting(
default_network_.reset(new NetworkState(service_path));
}
-void NetworkPortalDetectorStub::SetDetectionResultsForTesting(
+void NetworkPortalDetectorTestImpl::SetDetectionResultsForTesting(
const std::string& service_path,
const CaptivePortalState& state) {
if (!service_path.empty())
portal_state_map_[service_path] = state;
}
-void NetworkPortalDetectorStub::NotifyObserversForTesting() {
+void NetworkPortalDetectorTestImpl::NotifyObserversForTesting() {
CaptivePortalState state;
if (default_network_ &&
portal_state_map_.count(default_network_->path())) {
@@ -38,18 +38,12 @@ void NetworkPortalDetectorStub::NotifyObserversForTesting() {
OnPortalDetectionCompleted(default_network_.get(), state));
}
-void NetworkPortalDetectorStub::Init() {
-}
-
-void NetworkPortalDetectorStub::Shutdown() {
-}
-
-void NetworkPortalDetectorStub::AddObserver(Observer* observer) {
+void NetworkPortalDetectorTestImpl::AddObserver(Observer* observer) {
if (observer && !observers_.HasObserver(observer))
observers_.AddObserver(observer);
}
-void NetworkPortalDetectorStub::AddAndFireObserver(Observer* observer) {
+void NetworkPortalDetectorTestImpl::AddAndFireObserver(Observer* observer) {
AddObserver(observer);
if (!observer)
return;
@@ -64,34 +58,34 @@ void NetworkPortalDetectorStub::AddAndFireObserver(Observer* observer) {
}
}
-void NetworkPortalDetectorStub::RemoveObserver(Observer* observer) {
+void NetworkPortalDetectorTestImpl::RemoveObserver(Observer* observer) {
if (observer)
observers_.RemoveObserver(observer);
}
NetworkPortalDetector::CaptivePortalState
-NetworkPortalDetectorStub::GetCaptivePortalState(
+NetworkPortalDetectorTestImpl::GetCaptivePortalState(
const chromeos::NetworkState* network) {
if (!network || !portal_state_map_.count(network->path()))
return CaptivePortalState();
return portal_state_map_[network->path()];
}
-bool NetworkPortalDetectorStub::IsEnabled() {
+bool NetworkPortalDetectorTestImpl::IsEnabled() {
return true;
}
-void NetworkPortalDetectorStub::Enable(bool start_detection) {
+void NetworkPortalDetectorTestImpl::Enable(bool start_detection) {
}
-bool NetworkPortalDetectorStub::StartDetectionIfIdle() {
+bool NetworkPortalDetectorTestImpl::StartDetectionIfIdle() {
return false;
}
-void NetworkPortalDetectorStub::EnableLazyDetection() {
+void NetworkPortalDetectorTestImpl::EnableLazyDetection() {
}
-void NetworkPortalDetectorStub::DisableLazyDetection() {
+void NetworkPortalDetectorTestImpl::DisableLazyDetection() {
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_portal_detector_stub.h b/chrome/browser/chromeos/net/network_portal_detector_test_impl.h
index 9494109..9d6f9ba 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_stub.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_test_impl.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STUB_H_
-#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STUB_H_
+#ifndef CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_TEST_IMPL_H_
+#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_TEST_IMPL_H_
#include <string>
@@ -16,10 +16,10 @@
namespace chromeos {
-class NetworkPortalDetectorStub : public NetworkPortalDetector {
+class NetworkPortalDetectorTestImpl : public NetworkPortalDetector {
public:
- NetworkPortalDetectorStub();
- virtual ~NetworkPortalDetectorStub();
+ NetworkPortalDetectorTestImpl();
+ virtual ~NetworkPortalDetectorTestImpl();
void SetDefaultNetworkPathForTesting(const std::string& service_path);
void SetDetectionResultsForTesting(const std::string& service_path,
@@ -27,8 +27,6 @@ class NetworkPortalDetectorStub : public NetworkPortalDetector {
void NotifyObserversForTesting();
// NetworkPortalDetector implementation:
- virtual void Init() OVERRIDE;
- virtual void Shutdown() OVERRIDE;
virtual void AddObserver(Observer* observer) OVERRIDE;
virtual void AddAndFireObserver(Observer* observer) OVERRIDE;
virtual void RemoveObserver(Observer* observer) OVERRIDE;
@@ -49,9 +47,9 @@ class NetworkPortalDetectorStub : public NetworkPortalDetector {
scoped_ptr<NetworkState> default_network_;
CaptivePortalStateMap portal_state_map_;
- DISALLOW_COPY_AND_ASSIGN(NetworkPortalDetectorStub);
+ DISALLOW_COPY_AND_ASSIGN(NetworkPortalDetectorTestImpl);
};
} // namespace chromeos
-#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STUB_H_
+#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_TEST_IMPL_H_
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 cddd932..8724a7b 100644
--- a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
@@ -27,22 +27,6 @@ const char kJsScreenPath[] = "login.ErrorMessageScreen";
namespace chromeos {
-namespace {
-
-void EnableLazyDetection() {
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (NetworkPortalDetector::IsEnabledInCommandLine() && detector)
- detector->EnableLazyDetection();
-}
-
-void DisableLazyDetection() {
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
- if (NetworkPortalDetector::IsEnabledInCommandLine() && detector)
- detector->DisableLazyDetection();
-}
-
-} // namespace
-
ErrorScreenHandler::ErrorScreenHandler(
const scoped_refptr<NetworkStateInformer>& network_state_informer)
: BaseScreenHandler(kJsScreenPath),
@@ -63,7 +47,7 @@ void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen,
parent_screen_ = parent_screen;
ShowScreen(OobeUI::kScreenErrorMessage, params);
NetworkErrorShown();
- EnableLazyDetection();
+ NetworkPortalDetector::Get()->EnableLazyDetection();
LOG(WARNING) << "Offline message is displayed";
}
@@ -73,7 +57,7 @@ void ErrorScreenHandler::Hide() {
std::string screen_name;
if (GetScreenName(parent_screen_, &screen_name))
ShowScreen(screen_name.c_str(), NULL);
- DisableLazyDetection();
+ NetworkPortalDetector::Get()->DisableLazyDetection();
LOG(WARNING) << "Offline message is hidden";
}
diff --git a/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc b/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
index a7381db..115f545 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
@@ -41,10 +41,9 @@ NetworkStateInformer::State GetStateForDefaultNetwork() {
if (!network)
return NetworkStateInformer::OFFLINE;
- if (NetworkPortalDetector::IsEnabledInCommandLine() &&
- NetworkPortalDetector::GetInstance()) {
+ if (NetworkPortalDetector::Get()->IsEnabled()) {
NetworkPortalDetector::CaptivePortalState state =
- NetworkPortalDetector::GetInstance()->GetCaptivePortalState(network);
+ NetworkPortalDetector::Get()->GetCaptivePortalState(network);
NetworkPortalDetector::CaptivePortalStatus status = state.status;
if (status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN &&
NetworkState::StateIsConnecting(network->connection_state())) {
@@ -90,10 +89,7 @@ NetworkStateInformer::~NetworkStateInformer() {
NetworkHandler::Get()->network_state_handler()->RemoveObserver(
this, FROM_HERE);
}
- if (NetworkPortalDetector::IsEnabledInCommandLine() &&
- NetworkPortalDetector::GetInstance()) {
- NetworkPortalDetector::GetInstance()->RemoveObserver(this);
- }
+ NetworkPortalDetector::Get()->RemoveObserver(this);
}
void NetworkStateInformer::Init() {
@@ -101,10 +97,7 @@ void NetworkStateInformer::Init() {
NetworkHandler::Get()->network_state_handler()->AddObserver(
this, FROM_HERE);
- if (NetworkPortalDetector::IsEnabledInCommandLine() &&
- NetworkPortalDetector::GetInstance()) {
- NetworkPortalDetector::GetInstance()->AddAndFireObserver(this);
- }
+ NetworkPortalDetector::Get()->AddAndFireObserver(this);
registrar_.Add(this,
chrome::NOTIFICATION_LOGIN_PROXY_CHANGED,
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index 9a85f0a..1d65c13 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -240,7 +240,7 @@ std::string GetNetworkName(const std::string& service_path) {
// Returns captive portal state for a network by its service path.
NetworkPortalDetector::CaptivePortalState GetCaptivePortalState(
const std::string& service_path) {
- NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
+ NetworkPortalDetector* detector = NetworkPortalDetector::Get();
const NetworkState* network = NetworkHandler::Get()->network_state_handler()->
GetNetworkState(service_path);
if (!detector || !network)
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 9e52c09..56b5875 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -633,8 +633,8 @@
'browser/chromeos/net/network_portal_detector.h',
'browser/chromeos/net/network_portal_detector_impl.cc',
'browser/chromeos/net/network_portal_detector_impl.h',
- 'browser/chromeos/net/network_portal_detector_stub.cc',
- 'browser/chromeos/net/network_portal_detector_stub.h',
+ 'browser/chromeos/net/network_portal_detector_test_impl.cc',
+ 'browser/chromeos/net/network_portal_detector_test_impl.h',
'browser/chromeos/net/onc_utils.cc',
'browser/chromeos/net/onc_utils.h',
'browser/chromeos/net/proxy_config_handler.cc',