| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/secure_channel/secure_channel_client_provider.h" |
| |
| #include "base/no_destructor.h" |
| #include "chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client.h" |
| #include "chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client_impl.h" |
| #include "chromeos/ash/services/secure_channel/secure_channel_base.h" |
| #include "chromeos/ash/services/secure_channel/secure_channel_initializer.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| |
| namespace ash { |
| namespace secure_channel { |
| |
| SecureChannelClientProvider::SecureChannelClientProvider() = default; |
| |
| SecureChannelClientProvider::~SecureChannelClientProvider() = default; |
| |
| // static |
| SecureChannelClientProvider* SecureChannelClientProvider::GetInstance() { |
| static base::NoDestructor<SecureChannelClientProvider> provider; |
| return provider.get(); |
| } |
| |
| SecureChannelClient* SecureChannelClientProvider::GetClient() { |
| if (!secure_channel_client_) { |
| static base::NoDestructor<std::unique_ptr<SecureChannelBase>> instance{ |
| [] { return SecureChannelInitializer::Factory::Create(); }()}; |
| |
| mojo::PendingRemote<mojom::SecureChannel> channel; |
| (*instance)->BindReceiver(channel.InitWithNewPipeAndPassReceiver()); |
| secure_channel_client_ = |
| SecureChannelClientImpl::Factory::Create(std::move(channel)); |
| } |
| |
| return secure_channel_client_.get(); |
| } |
| |
| } // namespace secure_channel |
| } // namespace ash |