Chromium Code Reviews| Index: chrome/browser/media/router/discovery/discovery_network_monitor.h |
| diff --git a/chrome/browser/media/router/discovery/discovery_network_monitor.h b/chrome/browser/media/router/discovery/discovery_network_monitor.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..efe1c064dcc98ac0325d442c62317b99a155d183 |
| --- /dev/null |
| +++ b/chrome/browser/media/router/discovery/discovery_network_monitor.h |
| @@ -0,0 +1,88 @@ |
| +// Copyright (c) 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_H_ |
| +#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_H_ |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/bind.h" |
| +#include "base/lazy_instance.h" |
| +#include "base/macros.h" |
| +#include "base/observer_list_threadsafe.h" |
| +#include "base/synchronization/lock.h" |
| +#include "chrome/browser/media/router/discovery/discovery_network_info.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "net/base/ip_address.h" |
| +#include "net/base/network_change_notifier.h" |
| + |
| +// Tracks the set of active network interfaces that can be used for local |
| +// discovery. If the list of interfaces changes, then |
| +// DiscoveryNetworkMonitor::Observer is called with the instance of the monitor. |
| +// Only one instance of this should be created per browser process. |
| +// |
| +// This class is not thread-safe, except for adding and removing observers. |
| +// Most of the work done by the monitor is done on the IO thread, which includes |
| +// updating the current network ID. Therefore |GetNetworkId| should only be |
| +// called from the IO thread. All observers will be notified of network changes |
| +// on the thread from which they registered. |
| +class DiscoveryNetworkMonitor |
| + : public net::NetworkChangeNotifier::NetworkChangeObserver { |
| + public: |
| + using NetworkInfoCallback = |
| + base::Callback<std::vector<DiscoveryNetworkInfo>()>; |
| + using NetworkRefreshCompleteCallback = base::Callback<void()>; |
| + class Observer { |
| + public: |
| + // Called when the list of connected interfaces has changed. |
| + virtual void OnNetworksChanged(const DiscoveryNetworkMonitor& monitor) = 0; |
| + |
| + protected: |
| + ~Observer() = default; |
| + }; |
| + |
| + static DiscoveryNetworkMonitor* GetInstance(); |
| + static DiscoveryNetworkMonitor* GetInstanceForTest(NetworkInfoCallback); |
| + |
| + void RebindNetworkChangeObserverForTest(); |
| + |
| + void AddObserver(Observer* const observer); |
| + void RemoveObserver(Observer* const observer); |
| + |
| + // Forces a query of the current network state. |callback| will be called |
| + // after the refresh. This should be called from the UI thread. |
| + void Refresh(NetworkRefreshCompleteCallback callback); |
|
imcheng
2017/05/26 23:49:01
|callback| could be const ref?
btolsch
2017/05/30 09:54:30
From //docs/callback.md, base::Callback should be
|
| + |
| + // Computes a stable string identifier from the list of connected interfaces. |
| + // Returns kNetworkIdDisconnected if there are no connected interfaces or |
| + // kNetworkIdUnknown if the identifier could not be computed. This should be |
| + // called from the IO thread. |
| + const std::string& GetNetworkId() const; |
| + |
| + // Constants for the special states of network Id. |
|
mark a. foltz
2017/05/26 21:38:55
Constants should be declared before functions:
ht
btolsch
2017/05/26 23:38:10
Done.
|
| + static const char kNetworkIdDisconnected[]; |
| + static const char kNetworkIdUnknown[]; |
| + |
| + private: |
| + friend struct base::LazyInstanceTraitsBase<DiscoveryNetworkMonitor>; |
| + |
| + DiscoveryNetworkMonitor(); |
| + ~DiscoveryNetworkMonitor() override; |
| + |
| + // net::NetworkChangeNotifier::NetworkChangeObserver |
| + void OnNetworkChanged( |
| + net::NetworkChangeNotifier::ConnectionType type) override; |
| + |
| + void UpdateNetworkInfo(const NetworkRefreshCompleteCallback& callback); |
| + |
| + std::string network_id_; |
|
mark a. foltz
2017/05/26 21:38:55
Can you add documentation for these fields?
btolsch
2017/05/26 23:38:10
Done.
|
| + std::vector<DiscoveryNetworkInfo> networks_; |
| + scoped_refptr<base::ObserverListThreadSafe<Observer>> observers_; |
| + NetworkInfoCallback network_info_callback_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DiscoveryNetworkMonitor); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DISCOVERY_NETWORK_MONITOR_H_ |