1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// 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.
#include "third_party/blink/renderer/platform/p2p/empty_network_manager.h"
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/location.h"
#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
namespace blink {
EmptyNetworkManager::EmptyNetworkManager(IpcNetworkManager* network_manager)
: EmptyNetworkManager(network_manager,
network_manager->AsWeakPtrForSignalingThread()) {}
// DO NOT dereference/check `network_manager_for_signaling_thread_` in the ctor!
// Doing so would bind its WeakFactory to the constructing thread (main thread)
// instead of the thread `this` lives in (signaling thread).
EmptyNetworkManager::EmptyNetworkManager(
webrtc::NetworkManager* network_manager,
base::WeakPtr<webrtc::NetworkManager> network_manager_for_signaling_thread)
: network_manager_for_signaling_thread_(
network_manager_for_signaling_thread) {
DCHECK(network_manager);
DETACH_FROM_THREAD(thread_checker_);
set_enumeration_permission(ENUMERATION_BLOCKED);
network_manager->SignalNetworksChanged.connect(
this, &EmptyNetworkManager::OnNetworksChanged);
}
EmptyNetworkManager::~EmptyNetworkManager() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
}
void EmptyNetworkManager::StartUpdating() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(network_manager_for_signaling_thread_);
++start_count_;
network_manager_for_signaling_thread_->StartUpdating();
}
void EmptyNetworkManager::StopUpdating() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (network_manager_for_signaling_thread_)
network_manager_for_signaling_thread_->StopUpdating();
--start_count_;
DCHECK_GE(start_count_, 0);
}
std::vector<const webrtc::Network*> EmptyNetworkManager::GetNetworks() const {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
return {};
}
bool EmptyNetworkManager::GetDefaultLocalAddress(
int family,
webrtc::IPAddress* ipaddress) const {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(network_manager_for_signaling_thread_);
return network_manager_for_signaling_thread_->GetDefaultLocalAddress(
family, ipaddress);
}
void EmptyNetworkManager::OnNetworksChanged() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (!start_count_)
return;
SignalNetworksChanged();
}
} // namespace blink
|