// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "third_party/blink/renderer/platform/p2p/network_manager_uma.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/webrtc/rtc_base/network.h" #include "third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h" namespace media { class MediaPermission; } // namespace media namespace blink { class FilteringNetworkManagerTest; class IpcNetworkManager; // FilteringNetworkManager exposes rtc::NetworkManager to // PeerConnectionDependencyFactory and wraps the IpcNetworkManager. It only // handles the case where multiple_routes is requested. It checks at least one // of mic/camera permissions is granted before allowing WebRTC to use the local // IP addresses as ICE candidates. The class handles asynchronous signals like // SignalNetworksChanged from IpcNetworkManager and permission status from // MediaPermission before it signals WebRTC that the network information is // ready. It is designed to fire the network change event at the earliest time // to reduce any extra call setup delay. This class is not thread safe and // should only be used by WebRTC's network thread. It inherits from // rtc::NetworkManagerBase to have the same implementation of // GetAnyAddressNetworks(). We can't mark the whole class PLATFORM_EXPORT // as it requires all super classes to be PLATFORM_EXPORT as well. class FilteringNetworkManager : public rtc::NetworkManagerBase, public sigslot::has_slots<> { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_