Revert of Fix missing GN dependencies. (patchset #4 id:60001 of https://codereview...
[chromium-blink-merge.git] / chromecast / net / connectivity_checker.h
blob53cb38d79cd5ada9658b3506bf0d3f6d4e2c1b33
1 // 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.
5 #ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
6 #define CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h"
11 #include "net/base/network_change_notifier.h"
12 #include "net/url_request/url_request.h"
14 class GURL;
16 namespace base {
17 class SingleThreadTaskRunner;
20 namespace net {
21 class SSLInfo;
22 class URLRequestContext;
25 namespace chromecast {
27 // Simple class to check network connectivity by sending a HEAD http request
28 // to given url.
29 class ConnectivityChecker
30 : public base::RefCountedThreadSafe<ConnectivityChecker>,
31 public net::URLRequest::Delegate,
32 public net::NetworkChangeNotifier::ConnectionTypeObserver,
33 public net::NetworkChangeNotifier::IPAddressObserver {
34 public:
35 class ConnectivityObserver {
36 public:
37 // Will be called when internet connectivity changes
38 virtual void OnConnectivityChanged(bool connected) = 0;
40 protected:
41 ConnectivityObserver() {}
42 virtual ~ConnectivityObserver() {}
44 private:
45 DISALLOW_COPY_AND_ASSIGN(ConnectivityObserver);
48 explicit ConnectivityChecker(
49 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
51 void AddConnectivityObserver(ConnectivityObserver* observer);
52 void RemoveConnectivityObserver(ConnectivityObserver* observer);
54 // Returns if there is internet connectivity
55 bool Connected() const;
57 // Checks for connectivity
58 void Check();
60 protected:
61 ~ConnectivityChecker() override;
63 private:
64 friend class base::RefCountedThreadSafe<ConnectivityChecker>;
66 // UrlRequest::Delegate implementation:
67 void OnResponseStarted(net::URLRequest* request) override;
68 void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
69 void OnSSLCertificateError(net::URLRequest* request,
70 const net::SSLInfo& ssl_info,
71 bool fatal) override;
73 // Initializes ConnectivityChecker
74 void Initialize();
76 // NetworkChangeNotifier::ConnectionTypeObserver implementation:
77 void OnConnectionTypeChanged(
78 net::NetworkChangeNotifier::ConnectionType type) override;
80 // net::NetworkChangeNotifier::IPAddressObserver implementation:
81 void OnIPAddressChanged() override;
83 // Cancels current connectivity checking in progress.
84 void Cancel();
86 // Sets connectivity and alerts observers if it has changed
87 void SetConnectivity(bool connected);
89 // Called when URL request failed.
90 void OnUrlRequestError();
92 scoped_ptr<GURL> connectivity_check_url_;
93 scoped_ptr<net::URLRequestContext> url_request_context_;
94 scoped_ptr<net::URLRequest> url_request_;
95 const scoped_refptr<ObserverListThreadSafe<ConnectivityObserver> >
96 connectivity_observer_list_;
97 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
98 bool connected_;
99 // Number of connectivity check errors.
100 unsigned int check_errors_;
102 DISALLOW_COPY_AND_ASSIGN(ConnectivityChecker);
105 } // namespace chromecast
107 #endif // CHROMECAST_NET_CONNECTIVITY_CHECKER_H_