1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/net/network_portal_detector.h"
7 #include "base/command_line.h"
8 #include "base/logging.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/chromeos/net/network_portal_detector_impl.h"
11 #include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
12 #include "chrome/common/chrome_switches.h"
13 #include "chromeos/chromeos_switches.h"
19 const char kCaptivePortalStatusUnknown[] = "Unknown";
20 const char kCaptivePortalStatusOffline[] = "Offline";
21 const char kCaptivePortalStatusOnline[] = "Online";
22 const char kCaptivePortalStatusPortal[] = "Portal";
23 const char kCaptivePortalStatusProxyAuthRequired[] = "ProxyAuthRequired";
24 const char kCaptivePortalStatusUnrecognized[] = "Unrecognized";
26 NetworkPortalDetector* g_network_portal_detector = NULL;
27 bool g_network_portal_detector_set_for_testing = false;
30 return CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType);
33 // Stub implementation of NetworkPortalDetector.
34 class NetworkPortalDetectorStubImpl : public NetworkPortalDetector {
36 // NetworkPortalDetector implementation:
37 virtual void AddObserver(Observer* /* observer */) OVERRIDE {}
38 virtual void AddAndFireObserver(Observer* observer) OVERRIDE {
40 observer->OnPortalDetectionCompleted(NULL, CaptivePortalState());
42 virtual void RemoveObserver(Observer* /* observer */) OVERRIDE {}
43 virtual CaptivePortalState GetCaptivePortalState(
44 const std::string& /* service_path */) OVERRIDE {
45 return CaptivePortalState();
47 virtual bool IsEnabled() OVERRIDE { return false; }
48 virtual void Enable(bool /* start_detection */) OVERRIDE {}
49 virtual bool StartDetectionIfIdle() OVERRIDE { return false; }
50 virtual void SetStrategy(
51 PortalDetectorStrategy::StrategyId /* id */) OVERRIDE {}
56 void NetworkPortalDetector::InitializeForTesting(
57 NetworkPortalDetector* network_portal_detector) {
58 if (network_portal_detector) {
59 CHECK(!g_network_portal_detector_set_for_testing)
60 << "NetworkPortalDetector::InitializeForTesting is called twice";
61 CHECK(network_portal_detector);
62 delete g_network_portal_detector;
63 g_network_portal_detector = network_portal_detector;
64 g_network_portal_detector_set_for_testing = true;
66 g_network_portal_detector = NULL;
67 g_network_portal_detector_set_for_testing = false;
72 void NetworkPortalDetector::Initialize() {
73 if (g_network_portal_detector_set_for_testing)
75 CHECK(!g_network_portal_detector)
76 << "NetworkPortalDetector::Initialize() is called twice";
78 g_network_portal_detector = new NetworkPortalDetectorStubImpl();
80 CHECK(g_browser_process);
81 CHECK(g_browser_process->system_request_context());
82 g_network_portal_detector = new NetworkPortalDetectorImpl(
83 g_browser_process->system_request_context());
88 void NetworkPortalDetector::Shutdown() {
89 CHECK(g_network_portal_detector || g_network_portal_detector_set_for_testing)
90 << "NetworkPortalDetectorImpl::Shutdown() is called "
91 << "without previous call to Initialize()";
92 delete g_network_portal_detector;
93 g_network_portal_detector = NULL;
97 NetworkPortalDetector* NetworkPortalDetector::Get() {
98 CHECK(g_network_portal_detector)
99 << "NetworkPortalDetector::Get() called before Initialize()";
100 return g_network_portal_detector;
104 std::string NetworkPortalDetector::CaptivePortalStatusString(
105 CaptivePortalStatus status) {
107 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_UNKNOWN:
108 return kCaptivePortalStatusUnknown;
109 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_OFFLINE:
110 return kCaptivePortalStatusOffline;
111 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_ONLINE:
112 return kCaptivePortalStatusOnline;
113 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_PORTAL:
114 return kCaptivePortalStatusPortal;
115 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED:
116 return kCaptivePortalStatusProxyAuthRequired;
117 case NetworkPortalDetectorImpl::CAPTIVE_PORTAL_STATUS_COUNT:
120 return kCaptivePortalStatusUnrecognized;
124 bool NetworkPortalDetector::IsInitialized() {
125 return g_network_portal_detector;
128 } // namespace chromeos