| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/ash/services/network_config/in_process_instance.h" |
| |
| #include "base/no_destructor.h" |
| #include "chromeos/ash/components/network/network_handler.h" |
| #include "chromeos/ash/services/network_config/cros_network_config.h" |
| #include "mojo/public/cpp/bindings/receiver_set.h" |
| |
| namespace ash::network_config { |
| |
| namespace { |
| |
| namespace mojom = ::chromeos::network_config::mojom; |
| |
| mojom::CrosNetworkConfig* g_network_config_override; |
| |
| mojo::ReceiverSet<mojom::CrosNetworkConfig>& GetOverrideReceivers() { |
| static base::NoDestructor<mojo::ReceiverSet<mojom::CrosNetworkConfig>> |
| receivers; |
| return *receivers; |
| } |
| |
| } // namespace |
| |
| void BindToInProcessInstance( |
| mojo::PendingReceiver<mojom::CrosNetworkConfig> receiver) { |
| if (g_network_config_override) { |
| GetOverrideReceivers().Add(g_network_config_override, std::move(receiver)); |
| return; |
| } |
| |
| if (!NetworkHandler::IsInitialized()) { |
| DVLOG(1) << "Ignoring request to bind Network Config service because no " |
| << "NetworkHandler has been initialized."; |
| return; |
| } |
| |
| static base::NoDestructor<CrosNetworkConfig> instance; |
| instance->BindReceiver(std::move(receiver)); |
| } |
| |
| void OverrideInProcessInstanceForTesting( |
| mojom::CrosNetworkConfig* network_config) { |
| g_network_config_override = network_config; |
| |
| // Wipe out the set of override receivers any time a new override is set. |
| GetOverrideReceivers().Clear(); |
| } |
| |
| } // namespace ash::network_config |