| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/base/mock_network_change_notifier.h" |
| |
| #include <utility> |
| |
| #include "base/memory/ptr_util.h" |
| #include "base/run_loop.h" |
| #include "net/dns/dns_config_service.h" |
| #include "net/dns/system_dns_config_change_notifier.h" |
| |
| namespace net::test { |
| |
| // static |
| std::unique_ptr<MockNetworkChangeNotifier> MockNetworkChangeNotifier::Create() { |
| // Use an empty noop SystemDnsConfigChangeNotifier to disable actual system |
| // DNS configuration notifications. |
| return base::WrapUnique(new MockNetworkChangeNotifier( |
| std::make_unique<SystemDnsConfigChangeNotifier>( |
| nullptr /* task_runner */, nullptr /* dns_config_service */))); |
| } |
| |
| MockNetworkChangeNotifier::~MockNetworkChangeNotifier() { |
| StopSystemDnsConfigNotifier(); |
| } |
| |
| MockNetworkChangeNotifier::ConnectionType |
| MockNetworkChangeNotifier::GetCurrentConnectionType() const { |
| return connection_type_; |
| } |
| |
| void MockNetworkChangeNotifier::ForceNetworkHandlesSupported() { |
| force_network_handles_supported_ = true; |
| } |
| |
| bool MockNetworkChangeNotifier::AreNetworkHandlesCurrentlySupported() const { |
| return force_network_handles_supported_; |
| } |
| |
| void MockNetworkChangeNotifier::SetConnectedNetworksList( |
| const NetworkList& network_list) { |
| connected_networks_ = network_list; |
| } |
| |
| void MockNetworkChangeNotifier::GetCurrentConnectedNetworks( |
| NetworkList* network_list) const { |
| network_list->clear(); |
| *network_list = connected_networks_; |
| } |
| |
| void MockNetworkChangeNotifier::NotifyNetworkMadeDefault( |
| handles::NetworkHandle network) { |
| QueueNetworkMadeDefault(network); |
| // Spin the message loop so the notification is delivered. |
| base::RunLoop().RunUntilIdle(); |
| } |
| |
| void MockNetworkChangeNotifier::QueueNetworkMadeDefault( |
| handles::NetworkHandle network) { |
| NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( |
| NetworkChangeNotifier::NetworkChangeType::kMadeDefault, network); |
| } |
| |
| void MockNetworkChangeNotifier::NotifyNetworkDisconnected( |
| handles::NetworkHandle network) { |
| QueueNetworkDisconnected(network); |
| // Spin the message loop so the notification is delivered. |
| base::RunLoop().RunUntilIdle(); |
| } |
| |
| void MockNetworkChangeNotifier::QueueNetworkDisconnected( |
| handles::NetworkHandle network) { |
| NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( |
| NetworkChangeNotifier::NetworkChangeType::kDisconnected, network); |
| } |
| |
| void MockNetworkChangeNotifier::NotifyNetworkConnected( |
| handles::NetworkHandle network) { |
| NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( |
| NetworkChangeNotifier::NetworkChangeType::kConnected, network); |
| // Spin the message loop so the notification is delivered. |
| base::RunLoop().RunUntilIdle(); |
| } |
| |
| bool MockNetworkChangeNotifier::IsDefaultNetworkActiveInternal() { |
| return is_default_network_active_; |
| } |
| |
| void MockNetworkChangeNotifier::SetConnectionTypeAndNotifyObservers( |
| ConnectionType connection_type) { |
| SetConnectionType(connection_type); |
| NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange(); |
| // Spin the message loop so the notification is delivered. |
| base::RunLoop().RunUntilIdle(); |
| } |
| |
| MockNetworkChangeNotifier::ConnectionCost |
| MockNetworkChangeNotifier::GetCurrentConnectionCost() { |
| if (use_default_connection_cost_implementation_) |
| return NetworkChangeNotifier::GetCurrentConnectionCost(); |
| return connection_cost_; |
| } |
| |
| MockNetworkChangeNotifier::MockNetworkChangeNotifier( |
| std::unique_ptr<SystemDnsConfigChangeNotifier> dns_config_notifier) |
| : NetworkChangeNotifier(NetworkChangeCalculatorParams(), |
| dns_config_notifier.get()), |
| dns_config_notifier_(std::move(dns_config_notifier)) {} |
| |
| ScopedMockNetworkChangeNotifier::ScopedMockNetworkChangeNotifier() |
| : disable_network_change_notifier_for_tests_( |
| std::make_unique<NetworkChangeNotifier::DisableForTest>()), |
| mock_network_change_notifier_(MockNetworkChangeNotifier::Create()) {} |
| |
| ScopedMockNetworkChangeNotifier::~ScopedMockNetworkChangeNotifier() = default; |
| |
| MockNetworkChangeNotifier* |
| ScopedMockNetworkChangeNotifier::mock_network_change_notifier() { |
| return mock_network_change_notifier_.get(); |
| } |
| |
| } // namespace net::test |