Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / net / network_portal_detector.cc
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.
4
5 #include "chrome/browser/chromeos/net/network_portal_detector.h"
6
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"
14
15 namespace chromeos {
16
17 namespace {
18
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";
25
26 NetworkPortalDetector* g_network_portal_detector = NULL;
27 bool g_network_portal_detector_set_for_testing = false;
28
29 bool IsTestMode() {
30   return CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType);
31 }
32
33 // Stub implementation of NetworkPortalDetector.
34 class NetworkPortalDetectorStubImpl : public NetworkPortalDetector {
35  protected:
36   // NetworkPortalDetector implementation:
37   virtual void AddObserver(Observer* /* observer */) OVERRIDE {}
38   virtual void AddAndFireObserver(Observer* observer) OVERRIDE {
39     if (observer)
40       observer->OnPortalDetectionCompleted(NULL, CaptivePortalState());
41   }
42   virtual void RemoveObserver(Observer* /* observer */) OVERRIDE {}
43   virtual CaptivePortalState GetCaptivePortalState(
44       const std::string& /* service_path */) OVERRIDE {
45     return CaptivePortalState();
46   }
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 {}
52 };
53
54 }  // namespace
55
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;
65   } else {
66     g_network_portal_detector = NULL;
67     g_network_portal_detector_set_for_testing = false;
68   }
69 }
70
71 // static
72 void NetworkPortalDetector::Initialize() {
73   if (g_network_portal_detector_set_for_testing)
74     return;
75   CHECK(!g_network_portal_detector)
76       << "NetworkPortalDetector::Initialize() is called twice";
77   if (IsTestMode()) {
78     g_network_portal_detector = new NetworkPortalDetectorStubImpl();
79   } else {
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());
84   }
85 }
86
87 // static
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;
94 }
95
96 // static
97 NetworkPortalDetector* NetworkPortalDetector::Get() {
98   CHECK(g_network_portal_detector)
99       << "NetworkPortalDetector::Get() called before Initialize()";
100   return g_network_portal_detector;
101 }
102
103 // static
104 std::string NetworkPortalDetector::CaptivePortalStatusString(
105     CaptivePortalStatus status) {
106   switch (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:
118       NOTREACHED();
119   }
120   return kCaptivePortalStatusUnrecognized;
121 }
122
123 // static
124 bool NetworkPortalDetector::IsInitialized() {
125   return g_network_portal_detector;
126 }
127
128 }  // namespace chromeos