| // Copyright 2026 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/openscreen_platform/socket_factory.h" |
| |
| #include "base/check.h" |
| |
| namespace openscreen_platform { |
| namespace { |
| |
| static SocketFactoryGetter::Callback* GetInstance() { |
| static SocketFactoryGetter::Callback* getter = |
| new SocketFactoryGetter::Callback(); |
| return getter; |
| } |
| |
| } // namespace |
| |
| namespace SocketFactoryGetter { |
| |
| void Set(Callback socket_factory_getter) { |
| Callback* getter = GetInstance(); |
| CHECK(getter->is_null() || socket_factory_getter.is_null()); |
| *getter = std::move(socket_factory_getter); |
| } |
| |
| void Clear() { |
| Callback* getter = GetInstance(); |
| getter->Reset(); |
| } |
| |
| bool IsSet() { |
| return !GetInstance()->is_null(); |
| } |
| |
| } // namespace SocketFactoryGetter |
| |
| network::mojom::SocketFactory* GetSocketFactory() { |
| SocketFactoryGetter::Callback* getter = GetInstance(); |
| if (getter->is_null()) { |
| return nullptr; |
| } |
| return getter->Run(); |
| } |
| |
| } // namespace openscreen_platform |