connectivity_checker.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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.
  4. #ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
  5. #define CHROMECAST_NET_CONNECTIVITY_CHECKER_H_
  6. #include <memory>
  7. #include "base/memory/ref_counted_delete_on_sequence.h"
  8. #include "base/observer_list_threadsafe.h"
  9. #include "base/task/sequenced_task_runner_helpers.h"
  10. #include "base/time/time.h"
  11. #include "chromecast/net/time_sync_tracker.h"
  12. namespace base {
  13. class SingleThreadTaskRunner;
  14. }
  15. namespace network {
  16. class PendingSharedURLLoaderFactory;
  17. class NetworkConnectionTracker;
  18. } // namespace network
  19. namespace chromecast {
  20. // Checks if internet connectivity is available.
  21. class ConnectivityChecker
  22. : public base::RefCountedDeleteOnSequence<ConnectivityChecker> {
  23. public:
  24. class ConnectivityObserver {
  25. public:
  26. ConnectivityObserver(const ConnectivityObserver&) = delete;
  27. ConnectivityObserver& operator=(const ConnectivityObserver&) = delete;
  28. // Will be called when internet connectivity changes.
  29. virtual void OnConnectivityChanged(bool connected) = 0;
  30. protected:
  31. ConnectivityObserver() {}
  32. virtual ~ConnectivityObserver() {}
  33. };
  34. class ConnectivityCheckFailureObserver {
  35. public:
  36. ConnectivityCheckFailureObserver(const ConnectivityCheckFailureObserver&) =
  37. delete;
  38. ConnectivityCheckFailureObserver& operator=(
  39. const ConnectivityCheckFailureObserver&) = delete;
  40. // will be called when connectivity check failed.
  41. virtual void OnConnectivityCheckFailed() = 0;
  42. protected:
  43. ConnectivityCheckFailureObserver() = default;
  44. virtual ~ConnectivityCheckFailureObserver() = default;
  45. };
  46. static scoped_refptr<ConnectivityChecker> Create(
  47. const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
  48. std::unique_ptr<network::PendingSharedURLLoaderFactory>
  49. pending_url_loader_factory,
  50. network::NetworkConnectionTracker* network_connection_tracker,
  51. TimeSyncTracker* time_sync_tracker = nullptr);
  52. // Static factory with additional parameters for connectivity check period
  53. // - disconnected_probe_period:
  54. // connectivity check period while disconnected.
  55. // - connected_probe_period:
  56. // connectivity check period while connected.
  57. static scoped_refptr<ConnectivityChecker> Create(
  58. const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
  59. std::unique_ptr<network::PendingSharedURLLoaderFactory>
  60. pending_url_loader_factory,
  61. network::NetworkConnectionTracker* network_connection_tracker,
  62. base::TimeDelta disconnected_probe_period,
  63. base::TimeDelta connected_probe_period,
  64. TimeSyncTracker* time_sync_tracker = nullptr);
  65. ConnectivityChecker(const ConnectivityChecker&) = delete;
  66. ConnectivityChecker& operator=(const ConnectivityChecker&) = delete;
  67. void AddConnectivityObserver(ConnectivityObserver* observer);
  68. void RemoveConnectivityObserver(ConnectivityObserver* observer);
  69. void AddConnectivityCheckFailureObserver(
  70. ConnectivityCheckFailureObserver* observer);
  71. void RemoveConnectivityCheckFailureObserver(
  72. ConnectivityCheckFailureObserver* observer);
  73. // Returns if there is internet connectivity.
  74. virtual bool Connected() const = 0;
  75. // Checks for connectivity.
  76. virtual void Check() = 0;
  77. protected:
  78. explicit ConnectivityChecker(
  79. scoped_refptr<base::SingleThreadTaskRunner> task_runner);
  80. virtual ~ConnectivityChecker();
  81. // Notifies observes that connectivity has changed.
  82. void Notify(bool connected);
  83. // Notifies observers that connectivity check failed.
  84. void NotifyCheckFailure();
  85. private:
  86. friend class base::RefCountedDeleteOnSequence<ConnectivityChecker>;
  87. friend class base::DeleteHelper<ConnectivityChecker>;
  88. const scoped_refptr<base::ObserverListThreadSafe<ConnectivityObserver>>
  89. connectivity_observer_list_;
  90. const scoped_refptr<
  91. base::ObserverListThreadSafe<ConnectivityCheckFailureObserver>>
  92. connectivity_check_failure_observer_list_;
  93. };
  94. } // namespace chromecast
  95. #endif // CHROMECAST_NET_CONNECTIVITY_CHECKER_H_