1// Copyright 2014 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 "chromeos/network/portal_detector/network_portal_detector.h"
6
7#include "base/logging.h"
8
9namespace chromeos {
10
11namespace {
12
13const char kCaptivePortalStatusUnknown[] = "Unknown";
14const char kCaptivePortalStatusOffline[] = "Offline";
15const char kCaptivePortalStatusOnline[]  = "Online";
16const char kCaptivePortalStatusPortal[]  = "Portal";
17const char kCaptivePortalStatusProxyAuthRequired[] = "ProxyAuthRequired";
18const char kCaptivePortalStatusUnrecognized[] = "Unrecognized";
19
20}  // namespace
21
22// static
23bool NetworkPortalDetector::set_for_testing_ = false;
24NetworkPortalDetector* NetworkPortalDetector::network_portal_detector_ = NULL;
25
26// static
27void NetworkPortalDetector::InitializeForTesting(
28    NetworkPortalDetector* network_portal_detector) {
29  if (network_portal_detector) {
30    CHECK(!set_for_testing_)
31        << "NetworkPortalDetector::InitializeForTesting is called twice";
32    CHECK(network_portal_detector);
33    delete network_portal_detector_;
34    network_portal_detector_ = network_portal_detector;
35    set_for_testing_ = true;
36  } else {
37    network_portal_detector_ = NULL;
38    set_for_testing_ = false;
39  }
40}
41
42// static
43bool NetworkPortalDetector::IsInitialized() {
44  return NetworkPortalDetector::network_portal_detector_;
45}
46
47// static
48void NetworkPortalDetector::Shutdown() {
49  CHECK(network_portal_detector_ || set_for_testing_)
50      << "NetworkPortalDetector::Shutdown() called without Initialize()";
51  delete network_portal_detector_;
52  network_portal_detector_ = NULL;
53}
54
55// static
56NetworkPortalDetector* NetworkPortalDetector::Get() {
57  CHECK(network_portal_detector_)
58      << "NetworkPortalDetector::Get() called before Initialize()";
59  return network_portal_detector_;
60}
61
62// static
63std::string NetworkPortalDetector::CaptivePortalStatusString(
64    CaptivePortalStatus status) {
65  switch (status) {
66    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN:
67      return kCaptivePortalStatusUnknown;
68    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE:
69      return kCaptivePortalStatusOffline;
70    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE:
71      return kCaptivePortalStatusOnline;
72    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL:
73      return kCaptivePortalStatusPortal;
74    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED:
75      return kCaptivePortalStatusProxyAuthRequired;
76    case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT:
77      NOTREACHED();
78  }
79  return kCaptivePortalStatusUnrecognized;
80}
81
82// NetworkPortalDetectorStubImpl
83
84NetworkPortalDetectorStubImpl::NetworkPortalDetectorStubImpl() {
85}
86
87NetworkPortalDetectorStubImpl::~NetworkPortalDetectorStubImpl() {
88}
89
90void NetworkPortalDetectorStubImpl::AddObserver(Observer* /* observer */) {
91}
92
93void NetworkPortalDetectorStubImpl::AddAndFireObserver(Observer* observer) {
94  if (observer)
95    observer->OnPortalDetectionCompleted(NULL, CaptivePortalState());
96}
97
98void NetworkPortalDetectorStubImpl::RemoveObserver(Observer* /* observer */) {
99}
100
101NetworkPortalDetector::CaptivePortalState
102NetworkPortalDetectorStubImpl::GetCaptivePortalState(
103    const std::string& /* service_path */) {
104  return CaptivePortalState();
105}
106
107bool NetworkPortalDetectorStubImpl::IsEnabled() {
108  return false;
109}
110
111void NetworkPortalDetectorStubImpl::Enable(bool /* start_detection */) {
112}
113
114bool NetworkPortalDetectorStubImpl::StartDetectionIfIdle() {
115  return false;
116}
117
118void NetworkPortalDetectorStubImpl::SetStrategy(
119    PortalDetectorStrategy::StrategyId /* id */) {
120}
121
122}  // namespace chromeos
123