blob: a9711181132385ddb4dc292f0944d1db3484edff [file] [log] [blame]
derekjchow30d4c222015-02-20 20:30:261// Copyright 2015 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#ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
6#define CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
7
dcheng3c3c93d52016-04-08 05:12:318#include <memory>
9
avi82d54ced2015-12-22 22:01:4910#include "base/macros.h"
derekjchow30d4c222015-02-20 20:30:2611#include "base/memory/ref_counted.h"
derekjchow15b3f072015-06-03 00:01:4312#include "base/observer_list_threadsafe.h"
derekjchow30d4c222015-02-20 20:30:2613
14class GURL;
15
16namespace base {
gunsch48c25c12015-05-19 18:56:5417class SingleThreadTaskRunner;
derekjchow30d4c222015-02-20 20:30:2618}
19
derekjchow30d4c222015-02-20 20:30:2620namespace chromecast {
21
derekjchow15b3f072015-06-03 00:01:4322// Checks if internet connectivity is available.
derekjchow30d4c222015-02-20 20:30:2623class ConnectivityChecker
derekjchow15b3f072015-06-03 00:01:4324 : public base::RefCountedThreadSafe<ConnectivityChecker> {
derekjchow30d4c222015-02-20 20:30:2625 public:
26 class ConnectivityObserver {
27 public:
derekjchowd9fddc22015-06-03 18:15:4628 // Will be called when internet connectivity changes.
derekjchow30d4c222015-02-20 20:30:2629 virtual void OnConnectivityChanged(bool connected) = 0;
30
31 protected:
32 ConnectivityObserver() {}
33 virtual ~ConnectivityObserver() {}
34
35 private:
36 DISALLOW_COPY_AND_ASSIGN(ConnectivityObserver);
37 };
38
derekjchow15b3f072015-06-03 00:01:4339 static scoped_refptr<ConnectivityChecker> Create(
gunsch48c25c12015-05-19 18:56:5440 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
derekjchow30d4c222015-02-20 20:30:2641
derekjchow15b3f072015-06-03 00:01:4342 ConnectivityChecker();
43
derekjchow30d4c222015-02-20 20:30:2644 void AddConnectivityObserver(ConnectivityObserver* observer);
45 void RemoveConnectivityObserver(ConnectivityObserver* observer);
46
derekjchowd9fddc22015-06-03 18:15:4647 // Returns if there is internet connectivity.
derekjchow15b3f072015-06-03 00:01:4348 virtual bool Connected() const = 0;
derekjchow30d4c222015-02-20 20:30:2649
derekjchowd9fddc22015-06-03 18:15:4650 // Checks for connectivity.
derekjchow15b3f072015-06-03 00:01:4351 virtual void Check() = 0;
gfhuang9b06a7782015-06-01 21:23:3152
derekjchow30d4c222015-02-20 20:30:2653 protected:
derekjchow15b3f072015-06-03 00:01:4354 virtual ~ConnectivityChecker();
derekjchowd9fddc22015-06-03 18:15:4655
56 // Notifies observes that connectivity has changed.
57 void Notify(bool connected);
derekjchow30d4c222015-02-20 20:30:2658
59 private:
60 friend class base::RefCountedThreadSafe<ConnectivityChecker>;
61
brettwc250e032015-06-04 04:03:3162 const scoped_refptr<base::ObserverListThreadSafe<ConnectivityObserver>>
derekjchowd9fddc22015-06-03 18:15:4663 connectivity_observer_list_;
64
derekjchow30d4c222015-02-20 20:30:2665 DISALLOW_COPY_AND_ASSIGN(ConnectivityChecker);
66};
67
68} // namespace chromecast
69
70#endif // CHROMECAST_NET_CONNECTIVITY_CHECKER_H_